From 2500d8a19227e161936ef74a8f22fca875031774 Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Thu, 19 Aug 2021 23:14:59 +0100 Subject: [PATCH] remove old rigidbody sync --- QSB/Syncs/RigidbodySync/BaseRigidbodySync.cs | 250 ------------------ .../RigidbodySync/SectoredRigidbodySync.cs | 120 --------- 2 files changed, 370 deletions(-) delete mode 100644 QSB/Syncs/RigidbodySync/BaseRigidbodySync.cs delete mode 100644 QSB/Syncs/RigidbodySync/SectoredRigidbodySync.cs diff --git a/QSB/Syncs/RigidbodySync/BaseRigidbodySync.cs b/QSB/Syncs/RigidbodySync/BaseRigidbodySync.cs deleted file mode 100644 index 4483341b..00000000 --- a/QSB/Syncs/RigidbodySync/BaseRigidbodySync.cs +++ /dev/null @@ -1,250 +0,0 @@ -using OWML.Common; -using OWML.Utils; -using QSB.Player.TransformSync; -using QSB.Utility; -using QuantumUNET.Transport; -using System.Linq; -using UnityEngine; - -namespace QSB.Syncs.RigidbodySync -{ - public abstract class BaseRigidbodySync : SyncBase - { - protected Vector3 _relativeVelocity; - protected Vector3 _relativeAngularVelocity; - protected Vector3 _prevVelocity; - protected Vector3 _prevAngularVelocity; - - protected abstract OWRigidbody GetRigidbody(); - - public virtual void Start() - { - var lowestBound = Resources.FindObjectsOfTypeAll() - .Where(x => x.NetId.Value <= NetId.Value).OrderBy(x => x.NetId.Value).Last(); - NetIdentity.SetRootIdentity(lowestBound.NetIdentity); - - DontDestroyOnLoad(gameObject); - _intermediaryTransform = new IntermediaryTransform(transform); - QSBSceneManager.OnSceneLoaded += OnSceneLoaded; - } - - protected virtual void OnDestroy() => QSBSceneManager.OnSceneLoaded -= OnSceneLoaded; - - private void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool isInUniverse) - => _isInitialized = false; - - protected override void Init() - { - if (!QSBSceneManager.IsInUniverse) - { - DebugLog.ToConsole($"Error - {_logName} is being init-ed when not in the universe!", MessageType.Error); - } - - AttachedObject = GetRigidbody(); - _isInitialized = true; - } - - public override void SerializeTransform(QNetworkWriter writer, bool initialState) - { - if (_intermediaryTransform == null) - { - _intermediaryTransform = new IntermediaryTransform(transform); - } - - /* We need to send : - * - Position - * - Rotation - * - Velocity - * - Angular velocity - * We can't store the last two on the IntermediaryTransform, so they come from fields. - */ - - var worldPos = _intermediaryTransform.GetPosition(); - var worldRot = _intermediaryTransform.GetRotation(); - var relativeVelocity = _relativeVelocity; - var relativeAngularVelocity = _relativeAngularVelocity; - - writer.Write(worldPos); - SerializeRotation(writer, worldRot); - writer.Write(relativeVelocity); - writer.Write(relativeAngularVelocity); - - _prevPosition = worldPos; - _prevRotation = worldRot; - _prevVelocity = relativeVelocity; - _prevAngularVelocity = relativeAngularVelocity; - } - - public override void DeserializeTransform(QNetworkReader reader, bool initialState) - { - if (!QSBCore.WorldObjectsReady) - { - reader.ReadVector3(); - DeserializeRotation(reader); - reader.ReadVector3(); - reader.ReadVector3(); - return; - } - - var pos = reader.ReadVector3(); - var rot = DeserializeRotation(reader); - var relativeVelocity = reader.ReadVector3(); - var relativeAngularVelocity = reader.ReadVector3(); - - if (HasAuthority) - { - return; - } - - if (_intermediaryTransform == null) - { - _intermediaryTransform = new IntermediaryTransform(transform); - } - - _intermediaryTransform.SetPosition(pos); - _intermediaryTransform.SetRotation(rot); - _relativeVelocity = relativeVelocity; - _relativeAngularVelocity = relativeAngularVelocity; - - if (_intermediaryTransform.GetPosition() == Vector3.zero) - { - DebugLog.ToConsole($"Warning - {_logName} at (0,0,0)! - Given position was {pos}", MessageType.Warning); - } - } - - protected override bool UpdateTransform() - { - if (HasAuthority) - { - _intermediaryTransform.EncodePosition(AttachedObject.transform.position); - _intermediaryTransform.EncodeRotation(AttachedObject.transform.rotation); - _relativeVelocity = GetRelativeVelocity(); - _relativeAngularVelocity = (AttachedObject as OWRigidbody).GetRelativeAngularVelocity(ReferenceTransform.GetAttachedOWRigidbody()); - return true; - } - - var targetPos = _intermediaryTransform.GetTargetPosition_Unparented(); - var targetRot = _intermediaryTransform.GetTargetRotation_Unparented(); - - if (targetPos == Vector3.zero || _intermediaryTransform.GetTargetPosition_ParentedToReference() == Vector3.zero) - { - return false; - } - - if (UseInterpolation) - { - (AttachedObject as OWRigidbody).SetPosition(SmartSmoothDamp(AttachedObject.transform.position, targetPos)); - (AttachedObject as OWRigidbody).SetRotation(QuaternionHelper.SmoothDamp(AttachedObject.transform.rotation, targetRot, ref _rotationSmoothVelocity, SmoothTime)); - } - else - { - (AttachedObject as OWRigidbody).SetPosition(targetPos); - (AttachedObject as OWRigidbody).SetRotation(targetRot); - } - - var currentVelocity = GetRelativeVelocity(); - var targetVelocity = ReferenceTransform.GetAttachedOWRigidbody().GetPointVelocity(targetPos) + _relativeVelocity; - var adjustedTarget = targetVelocity + Locator.GetCenterOfTheUniverse().GetStaticFrameWorldVelocity(); - - SetVelocity((AttachedObject as OWRigidbody), targetVelocity); - (AttachedObject as OWRigidbody).SetAngularVelocity(ReferenceTransform.GetAttachedOWRigidbody().GetAngularVelocity() + _relativeAngularVelocity); - - return true; - } - - private void SetVelocity(OWRigidbody rigidbody, Vector3 relativeVelocity) - { - var isRunningKinematic = rigidbody.RunningKinematicSimulation(); - var currentVelocity = rigidbody.GetValue("_currentVelocity"); - - if (isRunningKinematic) - { - var kinematicRigidbody = rigidbody.GetValue("_kinematicRigidbody"); - kinematicRigidbody.velocity = relativeVelocity + Locator.GetCenterOfTheUniverse().GetStaticFrameWorldVelocity(); - } - else - { - var normalRigidbody = rigidbody.GetValue("_rigidbody"); - normalRigidbody.velocity = relativeVelocity + Locator.GetCenterOfTheUniverse().GetStaticFrameWorldVelocity(); - } - - rigidbody.SetValue("_lastVelocity", currentVelocity); - rigidbody.SetValue("_currentVelocity", relativeVelocity); - } - - public void SetReferenceTransform(Transform transform) - { - if (ReferenceTransform == transform) - { - return; - } - - ReferenceTransform = transform; - _intermediaryTransform.SetReferenceTransform(transform); - - if (HasAuthority) - { - _intermediaryTransform.EncodePosition(AttachedObject.transform.position); - _intermediaryTransform.EncodeRotation(AttachedObject.transform.rotation); - } - } - - // TODO : optimize by using sqrMagnitude - public override bool HasMoved() - { - var displacementMagnitude = (_intermediaryTransform.GetPosition() - _prevPosition).magnitude; - - if (displacementMagnitude > 1E-03f) - { - return true; - } - - if (Quaternion.Angle(_intermediaryTransform.GetRotation(), _prevRotation) > 1E-03f) - { - return true; - } - - var velocityChangeMagnitude = (_relativeVelocity - _prevVelocity).magnitude; - var angularVelocityChangeMagnitude = (_relativeAngularVelocity - _prevAngularVelocity).magnitude; - if (velocityChangeMagnitude > 1E-03f) - { - return true; - } - - if (angularVelocityChangeMagnitude > 1E-03f) - { - return true; - } - - return false; - } - - public float GetVelocityChangeMagnitude() - => (_relativeVelocity - _prevVelocity).magnitude; - - public Vector3 GetRelativeVelocity() - { - if (AttachedObject == null) - { - DebugLog.ToConsole($"Error - Trying to get relative velocity when AttachedObject is null.", MessageType.Error); - return Vector3.zero; - } - - if (ReferenceTransform == null) - { - DebugLog.ToConsole($"Error - Trying to get relative velocity when ReferenceTransform is null. ({AttachedObject.name})", MessageType.Error); - return Vector3.zero; - } - - var attachedRigid = ReferenceTransform.GetAttachedOWRigidbody(); - if (attachedRigid == null) - { - DebugLog.ToConsole($"Error - ReferenceTransform ({ReferenceTransform.name}) on {AttachedObject.name} has no attached OWRigidBody.", MessageType.Error); - return Vector3.zero; - } - - var pointVelocity = attachedRigid.GetPointVelocity(AttachedObject.transform.position); - return (AttachedObject as OWRigidbody).GetVelocity() - pointVelocity; - } - } -} \ No newline at end of file diff --git a/QSB/Syncs/RigidbodySync/SectoredRigidbodySync.cs b/QSB/Syncs/RigidbodySync/SectoredRigidbodySync.cs deleted file mode 100644 index 666e5f88..00000000 --- a/QSB/Syncs/RigidbodySync/SectoredRigidbodySync.cs +++ /dev/null @@ -1,120 +0,0 @@ -using QSB.SectorSync; -using QSB.SectorSync.WorldObjects; -using QSB.WorldSync; -using QuantumUNET.Transport; - -namespace QSB.Syncs.RigidbodySync -{ - public abstract class SectoredRigidbodySync : BaseRigidbodySync, ISectoredSync - { - public QSBSector ReferenceSector { get; set; } - public SectorSync.SectorSync SectorSync { get; private set; } - public abstract TargetType Type { get; } - - public override bool IgnoreDisabledAttachedObject => false; - public override bool IgnoreNullReferenceTransform => true; - - public override void Start() - { - SectorSync = gameObject.AddComponent(); - QSBSectorManager.Instance.SectoredRigidbodySyncs.Add(this); - base.Start(); - } - - protected override void OnDestroy() - { - base.OnDestroy(); - QSBSectorManager.Instance.SectoredRigidbodySyncs.Remove(this); - if (SectorSync != null) - { - Destroy(SectorSync); - } - } - - protected override void Init() - { - base.Init(); - if (!QSBSectorManager.Instance.IsReady) - { - return; - } - - if (!HasAuthority) - { - return; - } - - var closestSector = SectorSync.GetClosestSector(AttachedObject.transform); - if (closestSector != null) - { - SetReferenceTransform(closestSector.Transform); - } - } - - public override void SerializeTransform(QNetworkWriter writer, bool initialState) - { - if (_intermediaryTransform == null) - { - _intermediaryTransform = new IntermediaryTransform(transform); - } - - if (ReferenceSector != null) - { - writer.Write(ReferenceSector.ObjectId); - } - else - { - writer.Write(-1); - } - - base.SerializeTransform(writer, initialState); - } - - public override void DeserializeTransform(QNetworkReader reader, bool initialState) - { - if (!QSBCore.WorldObjectsReady) - { - reader.ReadInt32(); - reader.ReadVector3(); - DeserializeRotation(reader); - return; - } - - var sectorId = reader.ReadInt32(); - var sector = sectorId == -1 - ? null - : QSBWorldSync.GetWorldFromId(sectorId); - - if (sector != ReferenceSector) - { - SetReferenceSector(sector); - } - - base.DeserializeTransform(reader, initialState); - } - - protected override bool UpdateTransform() - { - if ((ReferenceTransform == null || ReferenceSector == null || _intermediaryTransform.GetReferenceTransform() == null) && QSBSectorManager.Instance.IsReady && HasAuthority) - { - var closestSector = SectorSync.GetClosestSector(AttachedObject.transform); - if (closestSector != null) - { - SetReferenceTransform(closestSector.Transform); - } - else - { - return false; - } - } - - return base.UpdateTransform(); - } - - public void SetReferenceSector(QSBSector sector) - { - ReferenceSector = sector; - SetReferenceTransform(sector?.Transform); - } - } -} \ No newline at end of file