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
|
||||
=> tornado.SendMessage(new TornadoFormStateMessage(tornado.FormState) { To = From }));
|
||||
|
||||
QSBWorldSync.GetWorldObjects<QSBTrigger>().ForEach(trigger
|
||||
QSBWorldSync.GetWorldObjects<IQSBTrigger>().ForEach(trigger
|
||||
=> trigger.SendMessage(new TriggerResyncMessage(trigger.Players)));
|
||||
}
|
||||
|
||||
|
@ -8,9 +8,20 @@ using UnityEngine;
|
||||
|
||||
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()
|
||||
{
|
||||
@ -27,7 +38,7 @@ namespace QSB.TriggerSync
|
||||
}
|
||||
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"))
|
||||
{
|
||||
this.SendMessage(new TriggerMessage(true));
|
||||
((IQSBTrigger)this).SendMessage(new TriggerMessage(true));
|
||||
}
|
||||
}
|
||||
|
||||
@ -60,7 +71,7 @@ namespace QSB.TriggerSync
|
||||
{
|
||||
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 System.Linq;
|
||||
|
||||
namespace QSB.TriggerSync
|
||||
{
|
||||
@ -9,26 +8,10 @@ namespace QSB.TriggerSync
|
||||
|
||||
protected override void RebuildWorldObjects(OWScene scene)
|
||||
{
|
||||
QSBWorldSync.Init<QSBCharacterTrigger, OWTriggerVolume>(
|
||||
QSBWorldSync.GetUnityObjects<CharacterAnimController>()
|
||||
.Where(x => x.playerTrackingZone)
|
||||
.Select(x => x.playerTrackingZone)
|
||||
);
|
||||
|
||||
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)
|
||||
);
|
||||
QSBWorldSync.Init<QSBCharacterTrigger, CharacterAnimController>(x => x.playerTrackingZone);
|
||||
QSBWorldSync.Init<QSBSolanumTrigger, NomaiConversationManager>(x => x._watchPlayerVolume);
|
||||
QSBWorldSync.Init<QSBVesselCageTrigger, VesselWarpController>(x => x._cageTrigger);
|
||||
QSBWorldSync.Init<QSBMaskZoneTrigger, MaskZoneController>(x => x._maskZoneTrigger);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ using QSB.Player;
|
||||
|
||||
namespace QSB.TriggerSync
|
||||
{
|
||||
public class TriggerMessage : QSBBoolWorldObjectMessage<QSBTrigger>
|
||||
public class TriggerMessage : QSBBoolWorldObjectMessage<IQSBTrigger>
|
||||
{
|
||||
public TriggerMessage(bool entered) => Value = entered;
|
||||
|
||||
|
@ -10,7 +10,7 @@ namespace QSB.TriggerSync
|
||||
/// <summary>
|
||||
/// always sent by host
|
||||
/// </summary>
|
||||
public class TriggerResyncMessage : QSBWorldObjectMessage<QSBTrigger>
|
||||
public class TriggerResyncMessage : QSBWorldObjectMessage<IQSBTrigger>
|
||||
{
|
||||
private uint[] _playerIds;
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
using OWML.Common;
|
||||
using QSB.ConversationSync.Patches;
|
||||
using QSB.LogSync;
|
||||
using QSB.TriggerSync;
|
||||
using QSB.Utility;
|
||||
using System;
|
||||
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)
|
||||
{
|
||||
if (!QSBCore.IsHost)
|
||||
|
Loading…
x
Reference in New Issue
Block a user