From 37e7a64c9c22ccabe409141a40f669b9ada55da2 Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Sat, 29 Aug 2020 22:49:29 +0100 Subject: [PATCH] this is broken but its getting there??? --- AssetBundles/debug.manifest | 2 +- AssetBundles/network | Bin 3850 -> 3831 bytes AssetBundles/network.manifest | 4 +- QSB/Events/EventList.cs | 6 +- QSB/Events/PlayerReadyEvent.cs | 2 +- QSB/Events/PlayerState.cs | 2 +- QSB/Events/PlayerStatesRequestEvent.cs | 2 +- QSB/GeyserSync/GeyserEvent.cs | 1 - QSB/Messaging/EventType.cs | 3 +- QSB/OrbSync/OrbSlotEvent.cs | 2 +- QSB/OrbSync/OrbSlotPatches.cs | 9 +- QSB/OrbSync/OrbStatusEvent.cs | 1 - QSB/OrbSync/QSBOrbSlot.cs | 4 +- QSB/QSB.csproj | 2 +- QSB/QSBNetworkManager.cs | 18 +- QSB/TransformSync/NomaiOrbTransformSync.cs | 15 +- QSB/TransformSync/PlayerCameraSync.cs | 2 +- QSB/TransformSync/PlayerProbeSync.cs | 4 +- QSB/TransformSync/PlayerSectorEvent.cs | 4 +- QSB/TransformSync/PlayerTransformSync.cs | 4 +- QSB/TransformSync/QSBTransformSync.cs | 260 +++++++++++++++++++++ QSB/TransformSync/SectorSync.cs | 6 +- QSB/TransformSync/ShipTransformSync.cs | 2 +- QSB/TransformSync/TransformSync.cs | 127 ---------- QSB/WorldSync/WorldRegistry.cs | 1 - UnityProject/Assets/NetworkPlayer.prefab | 22 -- 26 files changed, 305 insertions(+), 200 deletions(-) create mode 100644 QSB/TransformSync/QSBTransformSync.cs delete mode 100644 QSB/TransformSync/TransformSync.cs diff --git a/AssetBundles/debug.manifest b/AssetBundles/debug.manifest index 45688c2b..906fcb0f 100644 --- a/AssetBundles/debug.manifest +++ b/AssetBundles/debug.manifest @@ -3,7 +3,7 @@ CRC: 2815158869 Hashes: AssetFileHash: serializedVersion: 2 - Hash: 81bbcd8775249928cc67d7ff90ff9047 + Hash: 5677b7876f2afae05c0920067ef29e8a TypeTreeHash: serializedVersion: 2 Hash: 4d6a73cb377370ba69c96eb5da1b5028 diff --git a/AssetBundles/network b/AssetBundles/network index ad5961009ff104387d5b7390cae0481f31f794fc..fdb5bab6a2a467178e071b9ff362b22208878035 100644 GIT binary patch delta 3775 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 Illyf#fmI7w*Z=?k diff --git a/AssetBundles/network.manifest b/AssetBundles/network.manifest index 30af89e6..895edc67 100644 --- a/AssetBundles/network.manifest +++ b/AssetBundles/network.manifest @@ -1,9 +1,9 @@ ManifestFileVersion: 0 -CRC: 3775067745 +CRC: 2522957964 Hashes: AssetFileHash: serializedVersion: 2 - Hash: 3a9598581da083f242daab94ed0741fb + Hash: fb956af412c243bc7fa631660dc4d343 TypeTreeHash: serializedVersion: 2 Hash: 47ee499ae8022a6b96ca6a5fd541f154 diff --git a/QSB/Events/EventList.cs b/QSB/Events/EventList.cs index 7f84dbc5..1b908d6b 100644 --- a/QSB/Events/EventList.cs +++ b/QSB/Events/EventList.cs @@ -39,9 +39,9 @@ namespace QSB.Events new GeyserEvent(), new ServerTimeEvent(), new AnimTriggerEvent(), - new OrbSlotEvent(), - new OrbUserEvent(), - new OrbStatusEvent() + new OrbSlotEvent() + //new OrbUserEvent() + //new OrbStatusEvent() }; _eventList.ForEach(ev => ev.SetupListener()); diff --git a/QSB/Events/PlayerReadyEvent.cs b/QSB/Events/PlayerReadyEvent.cs index 06647dc8..2bf11d32 100644 --- a/QSB/Events/PlayerReadyEvent.cs +++ b/QSB/Events/PlayerReadyEvent.cs @@ -42,7 +42,7 @@ namespace QSB.Events public override void OnReceiveRemote(ToggleMessage message) { DebugLog.DebugWrite($"Get ready event from {message.FromId}", MessageType.Success); - foreach (var item in PlayerRegistry.GetSyncObjects() + foreach (var item in PlayerRegistry.GetSyncObjects() .Where(x => x != null && x.IsReady && x.ReferenceSector != null && x.PlayerId == LocalPlayerId)) { DebugLog.DebugWrite($"* Sending sector for netid {item.netId.Value}..."); diff --git a/QSB/Events/PlayerState.cs b/QSB/Events/PlayerState.cs index 8d0aba0d..60fdb23e 100644 --- a/QSB/Events/PlayerState.cs +++ b/QSB/Events/PlayerState.cs @@ -24,7 +24,7 @@ namespace QSB.Events return; } QSB.Helper.Events.Unity.RunWhen( - () => PlayerRegistry.GetSyncObject(message.AboutId) != null, + () => PlayerRegistry.GetSyncObject(message.AboutId) != null, () => PlayerRegistry.HandleFullStateMessage(message)); } diff --git a/QSB/Events/PlayerStatesRequestEvent.cs b/QSB/Events/PlayerStatesRequestEvent.cs index 419e2048..c2750fd5 100644 --- a/QSB/Events/PlayerStatesRequestEvent.cs +++ b/QSB/Events/PlayerStatesRequestEvent.cs @@ -30,7 +30,7 @@ namespace QSB.Events { DebugLog.DebugWrite($"[S] Get state request from {message.FromId}"); PlayerState.LocalInstance.Send(); - foreach (var item in PlayerRegistry.GetSyncObjects() + foreach (var item in PlayerRegistry.GetSyncObjects() .Where(x => x != null && x.IsReady && x.ReferenceSector != null)) { DebugLog.DebugWrite($"* Sending sector for netid {item.netId.Value}..."); diff --git a/QSB/GeyserSync/GeyserEvent.cs b/QSB/GeyserSync/GeyserEvent.cs index 939b2fb3..fa42e52a 100644 --- a/QSB/GeyserSync/GeyserEvent.cs +++ b/QSB/GeyserSync/GeyserEvent.cs @@ -1,6 +1,5 @@ using QSB.Events; using QSB.Messaging; -using QSB.Utility; using QSB.WorldSync; namespace QSB.GeyserSync diff --git a/QSB/Messaging/EventType.cs b/QSB/Messaging/EventType.cs index 50a7ad2d..3fe7ab29 100644 --- a/QSB/Messaging/EventType.cs +++ b/QSB/Messaging/EventType.cs @@ -22,6 +22,7 @@ Geyser, OrbSlot, OrbUser, - OrbStatus + OrbStatus, + QSBPositionMessage } } diff --git a/QSB/OrbSync/OrbSlotEvent.cs b/QSB/OrbSync/OrbSlotEvent.cs index 53ea7786..64c6a7ea 100644 --- a/QSB/OrbSync/OrbSlotEvent.cs +++ b/QSB/OrbSync/OrbSlotEvent.cs @@ -30,7 +30,7 @@ namespace QSB.OrbSync public override void OnReceiveRemote(BoolWorldObjectMessage message) { - + var orbSlot = WorldRegistry.GetObject(message.ObjectId); DebugLog.ToConsole($"GET ORB MESSAGE {message.ObjectId} : {message.State}"); orbSlot?.SetState(message.State); diff --git a/QSB/OrbSync/OrbSlotPatches.cs b/QSB/OrbSync/OrbSlotPatches.cs index 20fa8932..4d9bc19f 100644 --- a/QSB/OrbSync/OrbSlotPatches.cs +++ b/QSB/OrbSync/OrbSlotPatches.cs @@ -1,9 +1,4 @@ -using OWML.ModHelper.Events; -using QSB.Events; -using QSB.Utility; -using QSB.WorldSync; - -namespace QSB.OrbSync +namespace QSB.OrbSync { public static class OrbSlotPatches { @@ -12,6 +7,7 @@ namespace QSB.OrbSync return false; } + /* public static void StartDragCallEvent(bool __result, NomaiInterfaceOrb __instance) { if (__result) @@ -36,5 +32,6 @@ namespace QSB.OrbSync { return WorldRegistry.IsOrbControlledLocally(__instance); } + */ } } diff --git a/QSB/OrbSync/OrbStatusEvent.cs b/QSB/OrbSync/OrbStatusEvent.cs index d8fde3ca..251b8585 100644 --- a/QSB/OrbSync/OrbStatusEvent.cs +++ b/QSB/OrbSync/OrbStatusEvent.cs @@ -1,7 +1,6 @@ using OWML.ModHelper.Events; using QSB.Events; using QSB.Messaging; -using QSB.Utility; using QSB.WorldSync; namespace QSB.OrbSync diff --git a/QSB/OrbSync/QSBOrbSlot.cs b/QSB/OrbSync/QSBOrbSlot.cs index ff880a0c..e6f7003d 100644 --- a/QSB/OrbSync/QSBOrbSlot.cs +++ b/QSB/OrbSync/QSBOrbSlot.cs @@ -1,10 +1,8 @@ -using OWML.ModHelper.Events; -using QSB.Events; +using QSB.Events; using QSB.Utility; using QSB.WorldSync; using System; using System.Reflection; -using System.Runtime.CompilerServices; using UnityEngine.Networking; namespace QSB.OrbSync diff --git a/QSB/QSB.csproj b/QSB/QSB.csproj index 874f39c8..2c912aa2 100644 --- a/QSB/QSB.csproj +++ b/QSB/QSB.csproj @@ -169,6 +169,7 @@ + @@ -199,7 +200,6 @@ - diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index 146d6ccc..4f79eb1a 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -39,6 +39,7 @@ namespace QSB _assetBundle = QSB.NetworkAssetBundle; playerPrefab = _assetBundle.LoadAsset("assets/networkplayer.prefab"); + playerPrefab.AddComponent(); playerPrefab.AddComponent(); playerPrefab.AddComponent(); playerPrefab.AddComponent(); @@ -73,7 +74,6 @@ namespace QSB WorldRegistry.OldOrbList = Resources.FindObjectsOfTypeAll().ToList(); foreach (var orb in WorldRegistry.OldOrbList) { - if (NetworkServer.active) { WorldRegistry.OrbUserList.Add(orb, PlayerRegistry.LocalPlayerId); @@ -127,16 +127,18 @@ namespace QSB WakeUpPatches.AddPatches(); } - QSB.Helper.HarmonyHelper.AddPostfix("StartDragFromPosition", typeof(OrbSlotPatches), nameof(OrbSlotPatches.StartDragCallEvent)); - QSB.Helper.HarmonyHelper.AddPostfix("CancelDrag", typeof(OrbSlotPatches), nameof(OrbSlotPatches.CancelDrag)); - QSB.Helper.HarmonyHelper.AddPostfix("SetOrbPosition", typeof(OrbSlotPatches), nameof(OrbSlotPatches.SetPosition)); - QSB.Helper.HarmonyHelper.AddPrefix("SetOrbPosition", typeof(OrbSlotPatches), nameof(OrbSlotPatches.SetOrbPosition)); + //QSB.Helper.HarmonyHelper.AddPostfix("StartDragFromPosition", typeof(OrbSlotPatches), nameof(OrbSlotPatches.StartDragCallEvent)); + //QSB.Helper.HarmonyHelper.AddPostfix("CancelDrag", typeof(OrbSlotPatches), nameof(OrbSlotPatches.CancelDrag)); + //QSB.Helper.HarmonyHelper.AddPostfix("SetOrbPosition", typeof(OrbSlotPatches), nameof(OrbSlotPatches.SetPosition)); + //QSB.Helper.HarmonyHelper.AddPrefix("SetOrbPosition", typeof(OrbSlotPatches), nameof(OrbSlotPatches.SetOrbPosition)); _lobby.CanEditName = false; OnNetworkManagerReady?.Invoke(); IsReady = true; + NetworkServer.RegisterHandler((short)Messaging.EventType.QSBPositionMessage + MsgType.Highest + 1, new NetworkMessageDelegate(QSBTransformSync.HandleTransform)); + QSB.Helper.Events.Unity.RunWhen(() => PlayerTransformSync.LocalInstance != null, EventList.Init); QSB.Helper.Events.Unity.RunWhen(() => EventList.Ready, @@ -217,14 +219,14 @@ namespace QSB .Where(x => x != null && x.netId.Value == netId); foreach (var networkBehaviour in networkBehaviours) { - var transformSync = networkBehaviour.GetComponent(); + var transformSync = networkBehaviour.GetComponent(); if (transformSync != null) { PlayerRegistry.PlayerSyncObjects.Remove(transformSync); - if (transformSync.SyncedTransform != null) + if (transformSync.AttachedObject != null) { - Destroy(transformSync.SyncedTransform.gameObject); + Destroy(transformSync.AttachedObject.gameObject); } } Destroy(networkBehaviour.gameObject); diff --git a/QSB/TransformSync/NomaiOrbTransformSync.cs b/QSB/TransformSync/NomaiOrbTransformSync.cs index 6f14a0b2..8998be28 100644 --- a/QSB/TransformSync/NomaiOrbTransformSync.cs +++ b/QSB/TransformSync/NomaiOrbTransformSync.cs @@ -1,5 +1,4 @@ -using OWML.Common; -using QSB.Utility; +using QSB.Utility; using QSB.WorldSync; using UnityEngine; using UnityEngine.Networking; @@ -9,7 +8,7 @@ namespace QSB.TransformSync public class NomaiOrbTransformSync : NetworkBehaviour { private NomaiInterfaceOrb _attachedOrb; - private int _index => WorldRegistry.OrbList.FindIndex(x => x == this); + private int Index => WorldRegistry.OrbList.FindIndex(x => x == this); public Transform SyncedTransform { get; private set; } private bool _isInitialized; @@ -27,8 +26,8 @@ namespace QSB.TransformSync private void OnReady() { - _attachedOrb = WorldRegistry.OldOrbList[_index]; - DebugLog.DebugWrite($"orb index {_index} is attached to orb {_attachedOrb.GetInstanceID()}!"); + _attachedOrb = WorldRegistry.OldOrbList[Index]; + DebugLog.DebugWrite($"orb index {Index} is attached to orb {_attachedOrb.GetInstanceID()}!"); _isReady = true; } @@ -71,11 +70,7 @@ namespace QSB.TransformSync protected virtual void UpdateTransform() { - if (WorldRegistry.OldOrbList.FindIndex(x => x == _attachedOrb) == 31) - { - DebugLog.DebugWrite("31 is local? : " + WorldRegistry.IsOrbControlledLocally(_attachedOrb)); - } - if (WorldRegistry.IsOrbControlledLocally(_attachedOrb)) + if (isServer) { transform.position = ReferenceTransform.InverseTransformPoint(SyncedTransform.position); transform.rotation = ReferenceTransform.InverseTransformRotation(SyncedTransform.rotation); diff --git a/QSB/TransformSync/PlayerCameraSync.cs b/QSB/TransformSync/PlayerCameraSync.cs index cb116c51..5b8683f4 100644 --- a/QSB/TransformSync/PlayerCameraSync.cs +++ b/QSB/TransformSync/PlayerCameraSync.cs @@ -5,7 +5,7 @@ using UnityEngine; namespace QSB.TransformSync { - public class PlayerCameraSync : TransformSync + public class PlayerCameraSync : QSBTransformSync { public static PlayerCameraSync LocalInstance { get; private set; } diff --git a/QSB/TransformSync/PlayerProbeSync.cs b/QSB/TransformSync/PlayerProbeSync.cs index 662aed2b..1b3e4312 100644 --- a/QSB/TransformSync/PlayerProbeSync.cs +++ b/QSB/TransformSync/PlayerProbeSync.cs @@ -4,7 +4,7 @@ using UnityEngine; namespace QSB.TransformSync { - public class PlayerProbeSync : TransformSync + public class PlayerProbeSync : QSBTransformSync { public static PlayerProbeSync LocalInstance { get; private set; } @@ -48,6 +48,7 @@ namespace QSB.TransformSync return body; } + /* protected override void UpdateTransform() { base.UpdateTransform(); @@ -67,6 +68,7 @@ namespace QSB.TransformSync } SyncedTransform.localPosition = ReferenceSector.Transform.InverseTransformPoint(_disabledSocket.position); } + */ public override bool IsReady => Locator.GetProbe() != null && PlayerRegistry.PlayerExists(PlayerId) && Player.IsReady; } diff --git a/QSB/TransformSync/PlayerSectorEvent.cs b/QSB/TransformSync/PlayerSectorEvent.cs index 7dc59cdf..8d924595 100644 --- a/QSB/TransformSync/PlayerSectorEvent.cs +++ b/QSB/TransformSync/PlayerSectorEvent.cs @@ -42,9 +42,9 @@ namespace QSB.TransformSync return; } - var transformSync = PlayerRegistry.GetSyncObject(message.AboutId); + var transformSync = PlayerRegistry.GetSyncObject(message.AboutId); - QSB.Helper.Events.Unity.RunWhen(() => transformSync.SyncedTransform != null, + QSB.Helper.Events.Unity.RunWhen(() => transformSync.AttachedObject != null, () => transformSync.SetReferenceSector(sector)); } diff --git a/QSB/TransformSync/PlayerTransformSync.cs b/QSB/TransformSync/PlayerTransformSync.cs index 09373a59..5d0ad6cc 100644 --- a/QSB/TransformSync/PlayerTransformSync.cs +++ b/QSB/TransformSync/PlayerTransformSync.cs @@ -1,9 +1,10 @@ using QSB.Animation; +using QSB.Utility; using UnityEngine; namespace QSB.TransformSync { - public class PlayerTransformSync : TransformSync + public class PlayerTransformSync : QSBTransformSync { public static PlayerTransformSync LocalInstance { get; private set; } @@ -16,6 +17,7 @@ namespace QSB.TransformSync public override void OnStartLocalPlayer() { + DebugLog.DebugWrite("OnStartLocalPlayer " + PlayerId); LocalInstance = this; } diff --git a/QSB/TransformSync/QSBTransformSync.cs b/QSB/TransformSync/QSBTransformSync.cs new file mode 100644 index 00000000..c0912dd8 --- /dev/null +++ b/QSB/TransformSync/QSBTransformSync.cs @@ -0,0 +1,260 @@ +using OWML.Common; +using QSB.Utility; +using UnityEngine; +using UnityEngine.Networking; + +namespace QSB.TransformSync +{ + public abstract class QSBTransformSync : PlayerSyncObject + { + private readonly float sendInterval = 0.1f; + private readonly float movementTheshold = 1f / 1000f; + private float lastClientSendTime; + private Vector3 prevPosition; + private Quaternion prevRotation; + private NetworkWriter localTransformWriter; + private Vector3 _positionSmoothVelocity; + private bool _isInitialized; + + public QSBSector ReferenceSector { get; set; } + public Transform AttachedObject { get; private set; } + + public abstract bool IsReady { get; } + protected abstract Transform InitLocalTransform(); + protected abstract Transform InitRemoteTransform(); + + private void Awake() + { + prevPosition = transform.localPosition; + prevRotation = transform.localRotation; + if (!localPlayerAuthority) + { + return; + } + localTransformWriter = new NetworkWriter(); + + PlayerRegistry.PlayerSyncObjects.Add(this); + DontDestroyOnLoad(gameObject); + QSBSceneManager.OnSceneLoaded += OnSceneLoaded; + } + + private void OnSceneLoaded(OWScene scene, bool isInUniverse) + { + _isInitialized = false; + } + + public void SetReferenceSector(QSBSector sector) + { + DebugLog.DebugWrite("set reference sector of " + NetId + " to " + sector.Sector.name); + _positionSmoothVelocity = Vector3.zero; + ReferenceSector = sector; + transform.SetParent(sector.Transform, true); + transform.position = sector.Transform.InverseTransformPoint(transform.position); + transform.rotation = sector.Transform.InverseTransformRotation(transform.rotation); + } + + public override bool OnSerialize(NetworkWriter writer, bool initialState) + { + DebugLog.DebugWrite("On serialize"); + if (!initialState) + { + if (syncVarDirtyBits == 0) + { + writer.WritePackedUInt32(0U); + return false; + } + writer.WritePackedUInt32(1U); + } + SerializeModeTransform(writer); + return true; + } + + public override void OnDeserialize(NetworkReader reader, bool initialState) + { + if (isServer && NetworkServer.localClientActive || !initialState && (int)reader.ReadPackedUInt32() == 0) + { + return; + } + UnserializeModeTransform(reader); + } + + private void SerializeModeTransform(NetworkWriter writer) + { + if (transform.parent != null) + { + DebugLog.DebugWrite("* writing " + transform.localPosition + " with respect to " + transform.parent.name + ", using a reference of " + ReferenceSector.Name); + DebugLog.DebugWrite("* attached object is " + AttachedObject.name + " and it's localposition is " + ReferenceSector.Transform.InverseTransformPoint(AttachedObject.position)); + } + else + { + DebugLog.DebugWrite("* writing " + transform.localPosition + " with respect to NULL PARENT"); + } + writer.Write(transform.localPosition); + SerializeRotation3D(writer, transform.localRotation); + prevPosition = transform.localPosition; + prevRotation = transform.localRotation; + } + + private void UnserializeModeTransform(NetworkReader reader) + { + if (hasAuthority) + { + reader.ReadVector3(); + UnserializeRotation3D(reader); + } + else + { + transform.localPosition = reader.ReadVector3(); + transform.localRotation = UnserializeRotation3D(reader); + } + } + + private void FixedUpdate() + { + if (isServer) + { + FixedUpdateServer(); + } + } + + private void FixedUpdateServer() + { + if (syncVarDirtyBits != 0 || !NetworkServer.active || (!isServer || GetNetworkSendInterval() == 0.0) || (transform.localPosition - prevPosition).magnitude < movementTheshold && Quaternion.Angle(prevRotation, transform.localRotation) < movementTheshold) + { + return; + } + SetDirtyBit(1U); + } + + protected void Init() + { + DebugLog.DebugWrite("init of " + NetId); + ReferenceSector = QSBSectorManager.Instance.GetStartPlanetSector(); + AttachedObject = hasAuthority ? InitLocalTransform() : InitRemoteTransform(); + if (!hasAuthority) + { + AttachedObject.parent = transform; + AttachedObject.localPosition = Vector3.zero; + transform.localPosition = ReferenceSector.Position; + } + _isInitialized = true; + } + + private void Update() + { + if (!_isInitialized && IsReady) + { + Init(); + } + else if (_isInitialized && !IsReady) + { + DebugLog.DebugWrite("deinitialise " + PlayerId); + _isInitialized = false; + } + + if (!hasAuthority || !localPlayerAuthority || (NetworkServer.active || Time.time - lastClientSendTime <= GetNetworkSendInterval())) + { + return; + } + SendTransform(); + lastClientSendTime = Time.time; + } + + private bool HasMoved() + { + if ((transform.localPosition - prevPosition).magnitude > 9.99999974737875E-06) + { + return true; + } + float num = Quaternion.Angle(transform.localRotation, prevRotation); + return num > 9.99999974737875E-06; + } + + [Client] + private void SendTransform() + { + DebugLog.DebugWrite("send transform"); + if (!HasMoved() || ClientScene.readyConnection == null) + { + return; + } + localTransformWriter.StartMessage((short)Messaging.EventType.QSBPositionMessage + MsgType.Highest + 1); + localTransformWriter.Write(netId); + SerializeModeTransform(localTransformWriter); + prevPosition = transform.localPosition; + prevRotation = transform.localRotation; + localTransformWriter.FinishMessage(); + ClientScene.readyConnection.SendWriter(localTransformWriter, GetNetworkChannel()); + } + + public static void HandleTransform(NetworkMessage netMsg) + { + var netId = netMsg.reader.ReadNetworkId(); + var localObject = NetworkServer.FindLocalObject(netId); + if (localObject == null) + { + DebugLog.ToConsole("Error - LocalObject not found!", MessageType.Error); + } + else + { + var component = localObject.GetComponent(); + if (component == null) + { + DebugLog.ToConsole("Error - LocalObject doesn't have a QSBTransformSync!", MessageType.Error); + } + else if (!component.localPlayerAuthority) + { + DebugLog.ToConsole("Error - LocalObject doesn't have localPlayerAuthority!", MessageType.Error); + } + else if (netMsg.conn.clientOwnedObjects == null) + { + DebugLog.ToConsole("Error - LocalObject not owned by connection!", MessageType.Error); + } + else if (netMsg.conn.clientOwnedObjects.Contains(netId)) + { + component.UnserializeModeTransform(netMsg.reader); + } + else + { + DebugLog.ToConsole("Warning - HandleTransform netId:" + netId + " is not for a valid player", MessageType.Warning); + } + } + } + + private static void WriteAngle(NetworkWriter writer, float angle) + { + writer.Write(angle); + } + + private static float ReadAngle(NetworkReader reader) + { + return reader.ReadSingle(); + } + + public static void SerializeRotation3D(NetworkWriter writer, Quaternion rot) + { + WriteAngle(writer, rot.eulerAngles.x); + WriteAngle(writer, rot.eulerAngles.y); + WriteAngle(writer, rot.eulerAngles.z); + } + + public static Quaternion UnserializeRotation3D(NetworkReader reader) + { + var identity = Quaternion.identity; + var zero = Vector3.zero; + zero.Set(ReadAngle(reader), ReadAngle(reader), ReadAngle(reader)); + identity.eulerAngles = zero; + return identity; + } + + public override int GetNetworkChannel() + { + return 1; + } + + public override float GetNetworkSendInterval() + { + return sendInterval; + } + } +} diff --git a/QSB/TransformSync/SectorSync.cs b/QSB/TransformSync/SectorSync.cs index 7c81a0e2..64358819 100644 --- a/QSB/TransformSync/SectorSync.cs +++ b/QSB/TransformSync/SectorSync.cs @@ -21,13 +21,13 @@ namespace QSB.TransformSync { return; } - PlayerRegistry.GetSyncObjects().Where(x => x.IsLocal).ToList().ForEach(CheckTransformSyncSector); + PlayerRegistry.GetSyncObjects().Where(x => x.IsLocal).ToList().ForEach(CheckTransformSyncSector); _checkTimer = 0; } - private void CheckTransformSyncSector(TransformSync transformSync) + private void CheckTransformSyncSector(QSBTransformSync transformSync) { - var syncedTransform = transformSync.SyncedTransform; + var syncedTransform = transformSync.AttachedObject; if (syncedTransform == null || syncedTransform.position == Vector3.zero) { return; diff --git a/QSB/TransformSync/ShipTransformSync.cs b/QSB/TransformSync/ShipTransformSync.cs index 34a52a78..91708c76 100644 --- a/QSB/TransformSync/ShipTransformSync.cs +++ b/QSB/TransformSync/ShipTransformSync.cs @@ -2,7 +2,7 @@ namespace QSB.TransformSync { - public class ShipTransformSync : TransformSync + public class ShipTransformSync : QSBTransformSync { public static ShipTransformSync LocalInstance { get; private set; } diff --git a/QSB/TransformSync/TransformSync.cs b/QSB/TransformSync/TransformSync.cs deleted file mode 100644 index 3490c464..00000000 --- a/QSB/TransformSync/TransformSync.cs +++ /dev/null @@ -1,127 +0,0 @@ -using OWML.Common; -using QSB.Utility; -using UnityEngine; - -namespace QSB.TransformSync -{ - public abstract class TransformSync : PlayerSyncObject - { - public abstract bool IsReady { get; } - protected abstract Transform InitLocalTransform(); - protected abstract Transform InitRemoteTransform(); - - public Transform SyncedTransform { get; private set; } - public QSBSector ReferenceSector { get; set; } - - private const float SmoothTime = 0.1f; - private bool _isInitialized; - private Vector3 _positionSmoothVelocity; - private Quaternion _rotationSmoothVelocity; - private bool _isVisible; - - protected virtual void Awake() - { - PlayerRegistry.PlayerSyncObjects.Add(this); - DontDestroyOnLoad(gameObject); - QSBSceneManager.OnSceneLoaded += OnSceneLoaded; - } - - private void OnSceneLoaded(OWScene scene, bool isInUniverse) - { - _isInitialized = false; - } - - protected void Init() - { - ReferenceSector = QSBSectorManager.Instance.GetStartPlanetSector(); - SyncedTransform = hasAuthority ? InitLocalTransform() : InitRemoteTransform(); - if (!hasAuthority) - { - SyncedTransform.position = ReferenceSector.Position; - } - _isInitialized = true; - _isVisible = true; - } - - private void Update() - { - if (!_isInitialized && IsReady) - { - Init(); - } - else if (_isInitialized && !IsReady) - { - _isInitialized = false; - } - - if (SyncedTransform == null || !_isInitialized) - { - return; - } - - // Get which sector should be used as a reference point - - if (ReferenceSector == null) - { - DebugLog.ToConsole($"Error - TransformSync with id {netId.Value} doesn't have a reference sector", MessageType.Error); - } - - UpdateTransform(); - } - - protected virtual void UpdateTransform() - { - if (hasAuthority) // If this script is attached to the client's own body on the client's side. - { - if (ReferenceSector.Sector == null) - { - DebugLog.ToConsole($"Sector is null for referencesector for {GetType().Name}!", MessageType.Error); - } - transform.position = ReferenceSector.Transform.InverseTransformPoint(SyncedTransform.position); - transform.rotation = ReferenceSector.Transform.InverseTransformRotation(SyncedTransform.rotation); - return; - } - - // If this script is attached to any other body, eg the representations of other players - if (SyncedTransform.position == Vector3.zero) - { - Hide(); - } - else - { - Show(); - } - - SyncedTransform.localPosition = Vector3.SmoothDamp(SyncedTransform.localPosition, transform.position, ref _positionSmoothVelocity, SmoothTime); - SyncedTransform.localRotation = QuaternionHelper.SmoothDamp(SyncedTransform.localRotation, transform.rotation, ref _rotationSmoothVelocity, Time.deltaTime); - } - - public void SetReferenceSector(QSBSector sector) - { - _positionSmoothVelocity = Vector3.zero; - ReferenceSector = sector; - SyncedTransform.SetParent(sector.Transform, true); - transform.position = sector.Transform.InverseTransformPoint(SyncedTransform.position); - transform.rotation = sector.Transform.InverseTransformRotation(SyncedTransform.rotation); - } - - private void Show() - { - if (!_isVisible) - { - SyncedTransform.gameObject.Show(); - _isVisible = true; - } - } - - private void Hide() - { - if (_isVisible) - { - SyncedTransform.gameObject.Hide(); - _isVisible = false; - } - } - - } -} diff --git a/QSB/WorldSync/WorldRegistry.cs b/QSB/WorldSync/WorldRegistry.cs index c27af088..cf9e0cc8 100644 --- a/QSB/WorldSync/WorldRegistry.cs +++ b/QSB/WorldSync/WorldRegistry.cs @@ -1,7 +1,6 @@ using QSB.TransformSync; using System.Collections.Generic; using System.Linq; -using UnityEngine; namespace QSB.WorldSync { diff --git a/UnityProject/Assets/NetworkPlayer.prefab b/UnityProject/Assets/NetworkPlayer.prefab index 18d128c7..cf215ce0 100644 --- a/UnityProject/Assets/NetworkPlayer.prefab +++ b/UnityProject/Assets/NetworkPlayer.prefab @@ -20,7 +20,6 @@ GameObject: m_Component: - component: {fileID: 4562567225116386} - component: {fileID: 114951036537616502} - - component: {fileID: 114833759961836714} m_Layer: 0 m_Name: NetworkPlayer m_TagString: Untagged @@ -41,27 +40,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114833759961836714 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1211347487444314} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -1768714887, guid: dc443db3e92b4983b9738c1131f555cb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_TransformSyncMode: 1 - m_SendInterval: 0.09090909 - m_SyncRotationAxis: 7 - m_RotationSyncCompression: 0 - m_SyncSpin: 0 - m_MovementTheshold: 0.001 - m_VelocityThreshold: 0.0001 - m_SnapThreshold: 5 - m_InterpolateRotation: 1 - m_InterpolateMovement: 1 --- !u!114 &114951036537616502 MonoBehaviour: m_ObjectHideFlags: 1