mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-03-01 07:13:27 +00:00
triggers hold their owners
This commit is contained in:
parent
fafe7617c5
commit
2cbff8bb9a
@ -128,7 +128,7 @@ namespace QSB.Player.Messages
|
|||||||
QSBWorldSync.GetWorldObjects<QSBTornado>().ForEach(tornado
|
QSBWorldSync.GetWorldObjects<QSBTornado>().ForEach(tornado
|
||||||
=> tornado.SendMessage(new TornadoFormStateMessage(tornado.FormState) { To = From }));
|
=> tornado.SendMessage(new TornadoFormStateMessage(tornado.FormState) { To = From }));
|
||||||
|
|
||||||
QSBWorldSync.GetWorldObjects<QSBTrigger>().ForEach(trigger
|
QSBWorldSync.GetWorldObjects<IQSBTrigger>().ForEach(trigger
|
||||||
=> trigger.SendMessage(new TriggerResyncMessage(trigger.Players)));
|
=> trigger.SendMessage(new TriggerResyncMessage(trigger.Players)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,9 +8,20 @@ using UnityEngine;
|
|||||||
|
|
||||||
namespace QSB.TriggerSync
|
namespace QSB.TriggerSync
|
||||||
{
|
{
|
||||||
public abstract class QSBTrigger : WorldObject<OWTriggerVolume>
|
public interface IQSBTrigger : IWorldObject
|
||||||
{
|
{
|
||||||
public readonly List<PlayerInfo> Players = new();
|
List<PlayerInfo> Players { get; }
|
||||||
|
|
||||||
|
void Enter(PlayerInfo player);
|
||||||
|
|
||||||
|
void Exit(PlayerInfo player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class QSBTrigger<TO> : WorldObject<OWTriggerVolume>, IQSBTrigger
|
||||||
|
{
|
||||||
|
public TO TriggerOwner { get; init; }
|
||||||
|
|
||||||
|
public List<PlayerInfo> Players { get; } = new();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
@ -27,7 +38,7 @@ namespace QSB.TriggerSync
|
|||||||
}
|
}
|
||||||
else if (AttachedObject._trackedObjects.Contains(Locator.GetPlayerDetector()))
|
else if (AttachedObject._trackedObjects.Contains(Locator.GetPlayerDetector()))
|
||||||
{
|
{
|
||||||
this.SendMessage(new TriggerMessage(true));
|
((IQSBTrigger)this).SendMessage(new TriggerMessage(true));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -52,7 +63,7 @@ namespace QSB.TriggerSync
|
|||||||
{
|
{
|
||||||
if (hitObj.CompareTag("PlayerDetector"))
|
if (hitObj.CompareTag("PlayerDetector"))
|
||||||
{
|
{
|
||||||
this.SendMessage(new TriggerMessage(true));
|
((IQSBTrigger)this).SendMessage(new TriggerMessage(true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +71,7 @@ namespace QSB.TriggerSync
|
|||||||
{
|
{
|
||||||
if (hitObj.CompareTag("PlayerDetector"))
|
if (hitObj.CompareTag("PlayerDetector"))
|
||||||
{
|
{
|
||||||
this.SendMessage(new TriggerMessage(false));
|
((IQSBTrigger)this).SendMessage(new TriggerMessage(false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,19 +98,19 @@ namespace QSB.TriggerSync
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class QSBCharacterTrigger : QSBTrigger
|
public class QSBCharacterTrigger : QSBTrigger<CharacterAnimController>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public class QSBSolanumTrigger : QSBTrigger
|
public class QSBSolanumTrigger : QSBTrigger<NomaiConversationManager>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public class QSBVesselCageTrigger : QSBTrigger
|
public class QSBVesselCageTrigger : QSBTrigger<VesselWarpController>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public class QSBMaskZoneTrigger : QSBTrigger
|
public class QSBMaskZoneTrigger : QSBTrigger<MaskZoneController>
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace QSB.TriggerSync
|
namespace QSB.TriggerSync
|
||||||
{
|
{
|
||||||
@ -9,26 +8,10 @@ namespace QSB.TriggerSync
|
|||||||
|
|
||||||
protected override void RebuildWorldObjects(OWScene scene)
|
protected override void RebuildWorldObjects(OWScene scene)
|
||||||
{
|
{
|
||||||
QSBWorldSync.Init<QSBCharacterTrigger, OWTriggerVolume>(
|
QSBWorldSync.Init<QSBCharacterTrigger, CharacterAnimController>(x => x.playerTrackingZone);
|
||||||
QSBWorldSync.GetUnityObjects<CharacterAnimController>()
|
QSBWorldSync.Init<QSBSolanumTrigger, NomaiConversationManager>(x => x._watchPlayerVolume);
|
||||||
.Where(x => x.playerTrackingZone)
|
QSBWorldSync.Init<QSBVesselCageTrigger, VesselWarpController>(x => x._cageTrigger);
|
||||||
.Select(x => x.playerTrackingZone)
|
QSBWorldSync.Init<QSBMaskZoneTrigger, MaskZoneController>(x => x._maskZoneTrigger);
|
||||||
);
|
|
||||||
|
|
||||||
QSBWorldSync.Init<QSBSolanumTrigger, OWTriggerVolume>(
|
|
||||||
QSBWorldSync.GetUnityObjects<NomaiConversationManager>()
|
|
||||||
.Select(x => x._watchPlayerVolume)
|
|
||||||
);
|
|
||||||
|
|
||||||
QSBWorldSync.Init<QSBVesselCageTrigger, OWTriggerVolume>(
|
|
||||||
QSBWorldSync.GetUnityObjects<VesselWarpController>()
|
|
||||||
.Select(x => x._cageTrigger)
|
|
||||||
);
|
|
||||||
|
|
||||||
QSBWorldSync.Init<QSBMaskZoneTrigger, OWTriggerVolume>(
|
|
||||||
QSBWorldSync.GetUnityObjects<MaskZoneController>()
|
|
||||||
.Select(x => x._maskZoneTrigger)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ using QSB.Player;
|
|||||||
|
|
||||||
namespace QSB.TriggerSync
|
namespace QSB.TriggerSync
|
||||||
{
|
{
|
||||||
public class TriggerMessage : QSBBoolWorldObjectMessage<QSBTrigger>
|
public class TriggerMessage : QSBBoolWorldObjectMessage<IQSBTrigger>
|
||||||
{
|
{
|
||||||
public TriggerMessage(bool entered) => Value = entered;
|
public TriggerMessage(bool entered) => Value = entered;
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ namespace QSB.TriggerSync
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// always sent by host
|
/// always sent by host
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TriggerResyncMessage : QSBWorldObjectMessage<QSBTrigger>
|
public class TriggerResyncMessage : QSBWorldObjectMessage<IQSBTrigger>
|
||||||
{
|
{
|
||||||
private uint[] _playerIds;
|
private uint[] _playerIds;
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using QSB.ConversationSync.Patches;
|
using QSB.ConversationSync.Patches;
|
||||||
using QSB.LogSync;
|
using QSB.LogSync;
|
||||||
|
using QSB.TriggerSync;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -176,6 +177,28 @@ namespace QSB.WorldSync
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Init<TWorldObject, TUnityObject>(Func<TUnityObject, OWTriggerVolume> triggerSelector)
|
||||||
|
where TWorldObject : QSBTrigger<TUnityObject>, new()
|
||||||
|
where TUnityObject : MonoBehaviour
|
||||||
|
{
|
||||||
|
var list = GetUnityObjects<TUnityObject>()
|
||||||
|
.Select(x => (triggerSelector(x), x))
|
||||||
|
.Where(x => x.Item1);
|
||||||
|
foreach (var (item, owner) in list)
|
||||||
|
{
|
||||||
|
var obj = new TWorldObject
|
||||||
|
{
|
||||||
|
AttachedObject = item,
|
||||||
|
ObjectId = WorldObjects.Count,
|
||||||
|
TriggerOwner = owner
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.Init();
|
||||||
|
WorldObjects.Add(obj);
|
||||||
|
WorldObjectsToUnityObjects.Add(item, obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void SetDialogueCondition(string name, bool state)
|
public static void SetDialogueCondition(string name, bool state)
|
||||||
{
|
{
|
||||||
if (!QSBCore.IsHost)
|
if (!QSBCore.IsHost)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user