mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-22 12:39:51 +00:00
using instance id
This commit is contained in:
parent
65c5c2cddd
commit
d9aa3c8847
@ -10,14 +10,14 @@ namespace QSB.ElevatorSync
|
|||||||
|
|
||||||
public override void SetupListener()
|
public override void SetupListener()
|
||||||
{
|
{
|
||||||
GlobalMessenger<ElevatorDirection, string>.AddListener(EventNames.QSBStartLift, (direction, elevatorName) => SendEvent(CreateMessage(direction, elevatorName)));
|
GlobalMessenger<int, ElevatorDirection>.AddListener(EventNames.QSBStartLift, (id, direction) => SendEvent(CreateMessage(id, direction)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ElevatorMessage CreateMessage(ElevatorDirection direction, string elevatorName) => new ElevatorMessage
|
private ElevatorMessage CreateMessage(int id, ElevatorDirection direction) => new ElevatorMessage
|
||||||
{
|
{
|
||||||
SenderId = PlayerRegistry.LocalPlayer.NetId,
|
SenderId = PlayerRegistry.LocalPlayer.NetId,
|
||||||
Direction = direction,
|
Direction = direction,
|
||||||
UniqueName = elevatorName
|
Id = id
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(ElevatorMessage message)
|
public override void OnReceiveRemote(ElevatorMessage message)
|
||||||
@ -26,7 +26,7 @@ namespace QSB.ElevatorSync
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
WorldRegistry.GetObject<QSBElevator>(message.UniqueName).RemoteCall(message.Direction);
|
WorldRegistry.GetObject<QSBElevator>(message.Id).RemoteCall(message.Direction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,34 @@
|
|||||||
using UnityEngine;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
namespace QSB.ElevatorSync
|
namespace QSB.ElevatorSync
|
||||||
{
|
{
|
||||||
public class ElevatorManager : MonoBehaviour
|
public class ElevatorManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
public static ElevatorManager Instance { get; private set; }
|
||||||
|
|
||||||
|
private List<Elevator> _elevators;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
QSB.Helper.Events.Subscribe<Elevator>(OWML.Common.Events.AfterAwake);
|
Instance = this;
|
||||||
QSB.Helper.Events.Event += OnEvent;
|
|
||||||
|
LoadManager.OnCompleteSceneLoad += OnCompleteSceneLoad;
|
||||||
|
|
||||||
QSB.Helper.HarmonyHelper.AddPostfix<Elevator>("StartLift", typeof(ElevatorPatches), nameof(ElevatorPatches.StartLift));
|
QSB.Helper.HarmonyHelper.AddPostfix<Elevator>("StartLift", typeof(ElevatorPatches), nameof(ElevatorPatches.StartLift));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnEvent(MonoBehaviour behaviour, OWML.Common.Events ev)
|
private void OnCompleteSceneLoad(OWScene oldScene, OWScene newScene)
|
||||||
{
|
{
|
||||||
if (behaviour is Elevator elevator && ev == OWML.Common.Events.AfterAwake)
|
_elevators = Resources.FindObjectsOfTypeAll<Elevator>().ToList();
|
||||||
|
for (var id = 0; id < _elevators.Count; id++)
|
||||||
{
|
{
|
||||||
var elevatorController = new QSBElevator();
|
var elevatorController = new QSBElevator();
|
||||||
elevatorController.Init(elevator);
|
elevatorController.Init(_elevators[id], id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int GetId(Elevator elevator) => _elevators.IndexOf(elevator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,8 @@ namespace QSB.ElevatorSync
|
|||||||
{
|
{
|
||||||
var isGoingUp = __instance.GetValue<bool>("_goingToTheEnd");
|
var isGoingUp = __instance.GetValue<bool>("_goingToTheEnd");
|
||||||
var direction = isGoingUp ? ElevatorDirection.Up : ElevatorDirection.Down;
|
var direction = isGoingUp ? ElevatorDirection.Up : ElevatorDirection.Down;
|
||||||
GlobalMessenger<ElevatorDirection, string>.FireEvent(EventNames.QSBStartLift, direction, __instance.name);
|
var id = ElevatorManager.Instance.GetId(__instance);
|
||||||
|
GlobalMessenger<int, ElevatorDirection>.FireEvent(EventNames.QSBStartLift, id, direction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using OWML.ModHelper.Events;
|
using OWML.ModHelper.Events;
|
||||||
|
using QSB.Utility;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
@ -6,8 +7,6 @@ namespace QSB.ElevatorSync
|
|||||||
{
|
{
|
||||||
public class QSBElevator : WorldObject
|
public class QSBElevator : WorldObject
|
||||||
{
|
{
|
||||||
public override string UniqueName => _elevator.name;
|
|
||||||
|
|
||||||
private Elevator _elevator;
|
private Elevator _elevator;
|
||||||
private Vector3 _startLocalPos;
|
private Vector3 _startLocalPos;
|
||||||
private Vector3 _endLocalPos;
|
private Vector3 _endLocalPos;
|
||||||
@ -16,10 +15,16 @@ namespace QSB.ElevatorSync
|
|||||||
private OWAudioSource _owAudioSourceOneShot;
|
private OWAudioSource _owAudioSourceOneShot;
|
||||||
private OWAudioSource _owAudioSourceLP;
|
private OWAudioSource _owAudioSourceLP;
|
||||||
|
|
||||||
public void Init(Elevator elevator)
|
public void Init(Elevator elevator, int id)
|
||||||
{
|
{
|
||||||
WorldRegistry.WorldObjects.Add(this);
|
|
||||||
_elevator = elevator;
|
_elevator = elevator;
|
||||||
|
Id = id;
|
||||||
|
WorldRegistry.WorldObjects.Add(this);
|
||||||
|
UnityHelper.Instance.RunWhen(() => _elevator.GetValue<SingleInteractionVolume>("_interactVolume") != null, InitValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InitValues()
|
||||||
|
{
|
||||||
_startLocalPos = _elevator.GetValue<Vector3>("_startLocalPos");
|
_startLocalPos = _elevator.GetValue<Vector3>("_startLocalPos");
|
||||||
_endLocalPos = _elevator.GetValue<Vector3>("_endLocalPos");
|
_endLocalPos = _elevator.GetValue<Vector3>("_endLocalPos");
|
||||||
_interactVolume = _elevator.GetValue<SingleInteractionVolume>("_interactVolume");
|
_interactVolume = _elevator.GetValue<SingleInteractionVolume>("_interactVolume");
|
||||||
|
@ -10,13 +10,13 @@ namespace QSB.GeyserSync
|
|||||||
|
|
||||||
public override void SetupListener()
|
public override void SetupListener()
|
||||||
{
|
{
|
||||||
GlobalMessenger<string, bool>.AddListener(EventNames.QSBGeyserState, (name, state) => SendEvent(CreateMessage(name, state)));
|
GlobalMessenger<int, bool>.AddListener(EventNames.QSBGeyserState, (id, state) => SendEvent(CreateMessage(id, state)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GeyserMessage CreateMessage(string name, bool state) => new GeyserMessage
|
private GeyserMessage CreateMessage(int id, bool state) => new GeyserMessage
|
||||||
{
|
{
|
||||||
SenderId = PlayerRegistry.LocalPlayer.NetId,
|
SenderId = PlayerRegistry.LocalPlayer.NetId,
|
||||||
UniqueName = name,
|
Id = id,
|
||||||
State = state
|
State = state
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ namespace QSB.GeyserSync
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var geyser = WorldRegistry.GetObject<QSBGeyser>(message.UniqueName);
|
var geyser = WorldRegistry.GetObject<QSBGeyser>(message.Id);
|
||||||
geyser.SetState(message.State);
|
geyser.SetState(message.State);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,16 +10,16 @@ namespace QSB.GeyserSync
|
|||||||
{
|
{
|
||||||
Instance = this;
|
Instance = this;
|
||||||
|
|
||||||
QSB.Helper.Events.Subscribe<GeyserController>(OWML.Common.Events.AfterAwake);
|
LoadManager.OnCompleteSceneLoad += OnCompleteSceneLoad;
|
||||||
QSB.Helper.Events.Event += OnEvent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnEvent(MonoBehaviour behaviour, OWML.Common.Events ev)
|
private void OnCompleteSceneLoad(OWScene oldScene, OWScene newScene)
|
||||||
{
|
{
|
||||||
if (behaviour is GeyserController geyserController && ev == OWML.Common.Events.AfterAwake)
|
var geyserControllers = Resources.FindObjectsOfTypeAll<GeyserController>();
|
||||||
|
for (var id = 0; id < geyserControllers.Length; id++)
|
||||||
{
|
{
|
||||||
var geyser = new QSBGeyser();
|
var geyser = new QSBGeyser();
|
||||||
geyser.Init(geyserController);
|
geyser.Init(geyserControllers[id], id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,12 +6,11 @@ namespace QSB.GeyserSync
|
|||||||
{
|
{
|
||||||
public class QSBGeyser : WorldObject
|
public class QSBGeyser : WorldObject
|
||||||
{
|
{
|
||||||
public override string UniqueName => _geyserController.name;
|
|
||||||
|
|
||||||
private GeyserController _geyserController;
|
private GeyserController _geyserController;
|
||||||
|
|
||||||
public void Init(GeyserController geyserController)
|
public void Init(GeyserController geyserController, int id)
|
||||||
{
|
{
|
||||||
|
Id = id;
|
||||||
WorldRegistry.WorldObjects.Add(this);
|
WorldRegistry.WorldObjects.Add(this);
|
||||||
_geyserController = geyserController;
|
_geyserController = geyserController;
|
||||||
|
|
||||||
@ -23,7 +22,7 @@ namespace QSB.GeyserSync
|
|||||||
{
|
{
|
||||||
if (NetworkServer.active)
|
if (NetworkServer.active)
|
||||||
{
|
{
|
||||||
GlobalMessenger<string, bool>.FireEvent(EventNames.QSBGeyserState, UniqueName, state);
|
GlobalMessenger<int, bool>.FireEvent(EventNames.QSBGeyserState, Id, state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +83,9 @@
|
|||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>$(GameDir)\OuterWilds_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
<HintPath>$(GameDir)\OuterWilds_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.AudioModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
|
<Reference Include="UnityEngine.AudioModule">
|
||||||
|
<HintPath>$(GameDir)\OuterWilds_Data\Managed\UnityEngine.AudioModule.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="UnityEngine.CoreModule">
|
<Reference Include="UnityEngine.CoreModule">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>$(GameDir)\OuterWilds_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
<HintPath>$(GameDir)\OuterWilds_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
namespace QSB.WorldSync
|
namespace QSB.WorldSync
|
||||||
{
|
{
|
||||||
public abstract class WorldObject
|
public class WorldObject
|
||||||
{
|
{
|
||||||
public abstract string UniqueName { get; }
|
public int Id { get; protected set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,18 +5,18 @@ namespace QSB.WorldSync
|
|||||||
{
|
{
|
||||||
public class WorldObjectMessage : PlayerMessage
|
public class WorldObjectMessage : PlayerMessage
|
||||||
{
|
{
|
||||||
public string UniqueName { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
public override void Deserialize(NetworkReader reader)
|
public override void Deserialize(NetworkReader reader)
|
||||||
{
|
{
|
||||||
base.Deserialize(reader);
|
base.Deserialize(reader);
|
||||||
UniqueName = reader.ReadString();
|
Id = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Serialize(NetworkWriter writer)
|
public override void Serialize(NetworkWriter writer)
|
||||||
{
|
{
|
||||||
base.Serialize(writer);
|
base.Serialize(writer);
|
||||||
writer.Write(UniqueName);
|
writer.Write(Id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,9 @@ namespace QSB.WorldSync
|
|||||||
{
|
{
|
||||||
public static List<WorldObject> WorldObjects { get; } = new List<WorldObject>();
|
public static List<WorldObject> WorldObjects { get; } = new List<WorldObject>();
|
||||||
|
|
||||||
public static T GetObject<T>(string uniqueName) where T : WorldObject
|
public static T GetObject<T>(int id) where T : WorldObject
|
||||||
{
|
{
|
||||||
return WorldObjects.OfType<T>().FirstOrDefault(x => x.UniqueName == uniqueName);
|
return WorldObjects.OfType<T>().FirstOrDefault(x => x.Id == id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user