This commit is contained in:
Mister_Nebula 2022-03-14 07:12:51 +00:00 committed by JohnCorby
parent 6dcce3da84
commit 24cc63012a
9 changed files with 41 additions and 18 deletions

View File

@ -13,6 +13,6 @@ internal class AirlockManager : WorldObjectManager
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken ct)
{
await QSBWorldSync.InitWithVariableSync<QSBGhostAirlock, GhostAirlock, AirlockVariableSyncer>(ct);
await QSBWorldSync.InitWithVariableSync<QSBGhostAirlock, GhostAirlock, AirlockVariableSyncer>(ct, QSBNetworkManager.singleton.AirlockPrefab);
}
}

View File

@ -1,13 +1,28 @@
using QSB.Utility.VariableSync;
using System;
using System.Collections.Generic;
using QSB.EchoesOfTheEye.AirlockSync.WorldObjects;
using QSB.Utility.VariableSync;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace QSB.EchoesOfTheEye.AirlockSync.VariableSync;
internal class AirlockVariableSyncer : WorldObjectVariableSyncer<Vector3[]>
internal class AirlockVariableSyncer : WorldObjectVariableSyncer<Vector3[], QSBGhostAirlock>
{
protected override void Update()
{
base.Update();
var rotatingElements = AttachedWorldObject.AttachedObject._interface._rotatingElements;
if (hasAuthority)
{
Value = rotatingElements.Select(x => x.localRotation.eulerAngles).ToArray();
}
else
{
for (var i = 0; i < rotatingElements.Length; i++)
{
rotatingElements[i].localRotation = Quaternion.Euler(Value[i]);
}
}
}
}

View File

@ -24,6 +24,6 @@ internal class DoorManager : WorldObjectManager
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken ct)
{
await QSBWorldSync.InitWithVariableSync<QSBEclipseDoorController, EclipseDoorController, EclipseDoorVariableSyncer>(ct);
await QSBWorldSync.InitWithVariableSync<QSBEclipseDoorController, EclipseDoorController, EclipseDoorVariableSyncer>(ct, QSBNetworkManager.singleton.DoorPrefab);
}
}

View File

@ -1,6 +1,7 @@
using QSB.Utility.VariableSync;
using QSB.EchoesOfTheEye.EclipseDoors.WorldObjects;
using QSB.Utility.VariableSync;
using UnityEngine;
namespace QSB.EchoesOfTheEye.EclipseDoors.VariableSync;
public class EclipseDoorVariableSyncer : WorldObjectVariableSyncer<Vector3> { }
internal class EclipseDoorVariableSyncer : WorldObjectVariableSyncer<Vector3, QSBEclipseDoorController> { }

View File

@ -23,6 +23,6 @@ internal class EclipseElevatorManager : WorldObjectManager
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken ct)
{
await QSBWorldSync.InitWithVariableSync<QSBEclipseElevatorController, EclipseElevatorController, EclipseElevatorVariableSyncer>(ct);
await QSBWorldSync.InitWithVariableSync<QSBEclipseElevatorController, EclipseElevatorController, EclipseElevatorVariableSyncer>(ct, QSBNetworkManager.singleton.ElevatorPrefab);
}
}

View File

@ -1,6 +1,7 @@
using QSB.Utility.VariableSync;
using QSB.EchoesOfTheEye.EclipseElevators.WorldObjects;
using QSB.Utility.VariableSync;
using UnityEngine;
namespace QSB.EchoesOfTheEye.EclipseElevators.VariableSync;
internal class EclipseElevatorVariableSyncer : WorldObjectVariableSyncer<Vector3> { }
internal class EclipseElevatorVariableSyncer : WorldObjectVariableSyncer<Vector3, QSBEclipseElevatorController> { }

View File

@ -7,6 +7,7 @@ using QSB.Anglerfish.TransformSync;
using QSB.AuthoritySync;
using QSB.ClientServerStateSync;
using QSB.DeathSync;
using QSB.EchoesOfTheEye.AirlockSync.VariableSync;
using QSB.EchoesOfTheEye.EclipseDoors.VariableSync;
using QSB.EchoesOfTheEye.EclipseElevators.VariableSync;
using QSB.EchoesOfTheEye.RaftSync.TransformSync;
@ -48,6 +49,7 @@ public class QSBNetworkManager : NetworkManager, IAddComponentOnStart
public GameObject RaftPrefab { get; private set; }
public GameObject DoorPrefab { get; private set; }
public GameObject ElevatorPrefab { get; private set; }
public GameObject AirlockPrefab { get; private set; }
private string PlayerName { get; set; }
private const int MaxConnections = 128;
@ -128,6 +130,9 @@ public class QSBNetworkManager : NetworkManager, IAddComponentOnStart
ElevatorPrefab = MakeNewNetworkObject(10, "NetworkEclipseElevator", typeof(EclipseElevatorVariableSyncer));
spawnPrefabs.Add(ElevatorPrefab);
AirlockPrefab = MakeNewNetworkObject(11, "NetworkGhostAirlock", typeof(AirlockVariableSyncer));
spawnPrefabs.Add(AirlockPrefab);
ConfigureNetworkManager();
}

View File

@ -3,12 +3,13 @@ using UnityEngine.SceneManagement;
namespace QSB.Utility.VariableSync;
public class WorldObjectVariableSyncer<T> : BaseVariableSyncer<T>, IWorldObjectVariableSyncer
public class WorldObjectVariableSyncer<TSyncType, TWorldObjectType> : BaseVariableSyncer<TSyncType>, IWorldObjectVariableSyncer
where TWorldObjectType : IWorldObject
{
public IWorldObject AttachedWorldObject { get; private set; }
public TWorldObjectType AttachedWorldObject { get; private set; }
public void Init(IWorldObject worldObject)
=> AttachedWorldObject = worldObject;
=> AttachedWorldObject = (TWorldObjectType)worldObject;
public override void OnStartClient()
{

View File

@ -313,7 +313,7 @@ public static class QSBWorldSync
}
}
public static async UniTask InitWithVariableSync<TWorldObject, TUnityObject, TVariableSyncer>(CancellationToken ct)
public static async UniTask InitWithVariableSync<TWorldObject, TUnityObject, TVariableSyncer>(CancellationToken ct, GameObject prefab)
where TWorldObject : VariableSyncedWorldObject<TUnityObject, TVariableSyncer>, new()
where TUnityObject : MonoBehaviour
where TVariableSyncer : IWorldObjectVariableSyncer
@ -330,7 +330,7 @@ public static class QSBWorldSync
{
foreach (var item in allWorldObjects)
{
var networkObject = UnityEngine.Object.Instantiate(QSBNetworkManager.singleton.ElevatorPrefab);
var networkObject = UnityEngine.Object.Instantiate(prefab);
networkObject.SpawnWithServerAuthority();
}
}