From 72956bfe655816dbadd966eaf77219e46f9afeec Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Tue, 6 Jul 2021 22:29:47 +0100 Subject: [PATCH] do it!!! --- QSB/Player/PlayerHUDMarker.cs | 6 + QSB/Player/TransformSync/PlayerCameraSync.cs | 56 ------- .../TransformSync/PlayerTransformSync.cs | 140 ++++++++++++++++-- QSB/QSB.csproj | 2 - QSB/QSBNetworkManager.cs | 18 +-- .../RoastingStickTransformSync.cs | 94 ------------ QSB/SectorSync/TargetType.cs | 6 +- .../TransformSync/SectoredTransformSync.cs | 10 +- .../Components/QNetworkTransformChild.cs | 92 ++++++------ 9 files changed, 188 insertions(+), 236 deletions(-) delete mode 100644 QSB/Player/TransformSync/PlayerCameraSync.cs delete mode 100644 QSB/RoastingSync/TransformSync/RoastingStickTransformSync.cs diff --git a/QSB/Player/PlayerHUDMarker.cs b/QSB/Player/PlayerHUDMarker.cs index 014141e8..18913139 100644 --- a/QSB/Player/PlayerHUDMarker.cs +++ b/QSB/Player/PlayerHUDMarker.cs @@ -56,6 +56,12 @@ namespace QSB.Player private void Initialize() { + if (_player.Name == null) + { + DebugLog.ToConsole($"Error - {_player.PlayerId} has a null name!", OWML.Common.MessageType.Error); + _player.Name = "NULL"; + } + _markerLabel = _player.Name.ToUpper(); _needsInitializing = false; _isReady = true; diff --git a/QSB/Player/TransformSync/PlayerCameraSync.cs b/QSB/Player/TransformSync/PlayerCameraSync.cs deleted file mode 100644 index c2a4f61c..00000000 --- a/QSB/Player/TransformSync/PlayerCameraSync.cs +++ /dev/null @@ -1,56 +0,0 @@ -using QSB.Events; -using QSB.SectorSync; -using QSB.Syncs.TransformSync; -using QSB.Tools; -using QSB.Utility; -using UnityEngine; - -namespace QSB.Player.TransformSync -{ - public class PlayerCameraSync : SectoredTransformSync - { - protected override Transform InitLocalTransform() - { - SectorSync.Init(Locator.GetPlayerSectorDetector(), this); - var body = Locator.GetPlayerCamera().gameObject.transform; - - Player.Camera = Locator.GetPlayerCamera(); - Player.CameraBody = body.gameObject; - - Player.PlayerStates.IsReady = true; - QSBEventManager.FireEvent(EventNames.QSBPlayerReady, true); - DebugLog.DebugWrite("PlayerCameraSync init done - Request state!"); - QSBEventManager.FireEvent(EventNames.QSBPlayerStatesRequest); - - return body; - } - - protected override Transform InitRemoteTransform() - { - var body = new GameObject("RemotePlayerCamera"); - - PlayerToolsManager.Init(body.transform); - - var camera = body.AddComponent(); - camera.enabled = false; - var owcamera = body.AddComponent(); - owcamera.fieldOfView = 70; - owcamera.nearClipPlane = 0.1f; - owcamera.farClipPlane = 50000f; - Player.Camera = owcamera; - Player.CameraBody = body; - - return body.transform; - } - - public override bool IsReady => Locator.GetPlayerTransform() != null - && Player != null - && QSBPlayerManager.PlayerExists(Player.PlayerId) - && NetId.Value != uint.MaxValue - && NetId.Value != 0U; - - public override bool UseInterpolation => true; - - public override TargetType Type => TargetType.PlayerCamera; - } -} \ No newline at end of file diff --git a/QSB/Player/TransformSync/PlayerTransformSync.cs b/QSB/Player/TransformSync/PlayerTransformSync.cs index 26059ef1..2e7d1494 100644 --- a/QSB/Player/TransformSync/PlayerTransformSync.cs +++ b/QSB/Player/TransformSync/PlayerTransformSync.cs @@ -1,7 +1,13 @@ -using QSB.Animation.Player; +using OWML.Utils; +using QSB.Animation.Player; +using QSB.Events; using QSB.Instruments; +using QSB.RoastingSync; using QSB.SectorSync; using QSB.Syncs.TransformSync; +using QSB.Tools; +using QSB.Utility; +using System.Linq; using UnityEngine; namespace QSB.Player.TransformSync @@ -10,6 +16,18 @@ namespace QSB.Player.TransformSync { static PlayerTransformSync() => AnimControllerPatch.Init(); + private Transform _visibleCameraRoot; + private Transform _networkCameraRoot => gameObject.transform.GetChild(0); + + private Transform _visibleStickPivot; + private Transform _networkStickPivot => gameObject.transform.GetChild(1); + + private Transform _visibleStickTip; + private Transform _networkStickTip => _networkStickPivot.GetChild(0); + + private Transform GetStickPivot() + => Resources.FindObjectsOfTypeAll().First().transform.Find("Stick_Root/Stick_Pivot"); + public override void OnStartLocalPlayer() => LocalInstance = this; @@ -36,36 +54,130 @@ namespace QSB.Player.TransformSync protected override Transform InitLocalTransform() { SectorSync.Init(Locator.GetPlayerSectorDetector(), this); - var body = GetPlayerModel(); - GetComponent().InitLocal(body); - GetComponent().InitLocal(body); + // player body + var playerBody = GetPlayerModel(); + GetComponent().InitLocal(playerBody); + GetComponent().InitLocal(playerBody); + Player.Body = playerBody.gameObject; - Player.Body = body.gameObject; + // camera + var cameraBody = Locator.GetPlayerCamera().gameObject.transform; + Player.Camera = Locator.GetPlayerCamera(); + Player.CameraBody = cameraBody.gameObject; + _visibleCameraRoot = cameraBody; - return body; + // stick + var pivot = GetStickPivot(); + Player.RoastingStick = pivot.gameObject; + _visibleStickPivot = pivot; + _visibleStickTip = pivot.Find("Stick_Tip"); + + Player.PlayerStates.IsReady = true; + QSBEventManager.FireEvent(EventNames.QSBPlayerReady, true); + DebugLog.DebugWrite("PlayerTransformSync init done - Request state!"); + QSBEventManager.FireEvent(EventNames.QSBPlayerStatesRequest); + + return playerBody; } protected override Transform InitRemoteTransform() { - var body = Instantiate(GetPlayerModel()); - Player.Body = body.gameObject; + // player body + var playerBody = Instantiate(GetPlayerModel()); + Player.Body = playerBody.gameObject; - GetComponent().InitRemote(body); - GetComponent().InitRemote(body); + GetComponent().InitRemote(playerBody); + GetComponent().InitRemote(playerBody); - var marker = body.gameObject.AddComponent(); + var marker = playerBody.gameObject.AddComponent(); marker.Init(Player); - body.gameObject.AddComponent().PlayerName = Player.Name; + playerBody.gameObject.AddComponent().PlayerName = Player.Name; - return body; + // camera + var cameraBody = new GameObject("RemotePlayerCamera"); + cameraBody.transform.parent = playerBody; + + PlayerToolsManager.Init(cameraBody.transform); + + var camera = cameraBody.AddComponent(); + camera.enabled = false; + var owcamera = cameraBody.AddComponent(); + owcamera.fieldOfView = 70; + owcamera.nearClipPlane = 0.1f; + owcamera.farClipPlane = 50000f; + Player.Camera = owcamera; + Player.CameraBody = cameraBody; + _visibleCameraRoot = cameraBody.transform; + + // stick + + var newPivot = Instantiate(GetStickPivot()); + // TODO : this is meant to be the camera? + newPivot.parent = null; + newPivot.gameObject.SetActive(false); + Destroy(newPivot.Find("Stick_Tip/Props_HEA_RoastingStick/RoastingStick_Arm").gameObject); + Destroy(newPivot.Find("Stick_Tip/Props_HEA_RoastingStick/RoastingStick_Arm_NoSuit").gameObject); + var mallowRoot = newPivot.Find("Stick_Tip/Mallow_Root"); + mallowRoot.gameObject.SetActive(false); + var oldMarshmallow = mallowRoot.GetComponent(); + + // Recreate particle system + Destroy(mallowRoot.Find("MallowSmoke").GetComponent()); + var newSystem = mallowRoot.Find("MallowSmoke").gameObject.AddComponent(); + newSystem.Init(Player); + + // Create new marshmallow + var newMarshmallow = mallowRoot.gameObject.AddComponent(); + newMarshmallow._fireRenderer = oldMarshmallow.GetValue("_fireRenderer"); + newMarshmallow._smokeParticles = oldMarshmallow.GetValue("_smokeParticles"); + newMarshmallow._mallowRenderer = oldMarshmallow.GetValue("_mallowRenderer"); + newMarshmallow._rawColor = oldMarshmallow.GetValue("_rawColor"); + newMarshmallow._toastedColor = oldMarshmallow.GetValue("_toastedColor"); + newMarshmallow._burntColor = oldMarshmallow.GetValue("_burntColor"); + Destroy(oldMarshmallow); + + Player.RoastingStick = newPivot.gameObject; + Player.Marshmallow = newMarshmallow; + mallowRoot.gameObject.SetActive(true); + _visibleStickPivot = newPivot; + _visibleStickTip = newPivot.Find("Stick_Tip"); + + return playerBody; + } + + protected override void UpdateTransform() + { + base.UpdateTransform(); + + if (HasAuthority) + { + _networkStickPivot.localPosition = _visibleStickPivot.localPosition; + _networkStickPivot.localRotation = _visibleStickPivot.localRotation; + + _networkStickTip.localPosition = _visibleStickTip.localPosition; + _networkStickTip.localRotation = _visibleStickTip.localRotation; + + _networkCameraRoot.localPosition = _visibleCameraRoot.localPosition; + _networkCameraRoot.localRotation = _visibleCameraRoot.localRotation; + + return; + } + + _visibleStickPivot.localPosition = _networkStickPivot.localPosition; + _visibleStickPivot.localRotation = _networkStickPivot.localRotation; + + _visibleStickTip.localPosition = _networkStickTip.localPosition; + _visibleStickTip.localRotation = _networkStickTip.localRotation; + + _visibleCameraRoot.localPosition = _networkCameraRoot.localPosition; + _visibleCameraRoot.localRotation = _networkCameraRoot.localRotation; } public override bool IsReady => Locator.GetPlayerTransform() != null && Player != null && QSBPlayerManager.PlayerExists(Player.PlayerId) - && Player.PlayerStates.IsReady && NetId.Value != uint.MaxValue && NetId.Value != 0U; diff --git a/QSB/QSB.csproj b/QSB/QSB.csproj index 9f2934d5..80d227c4 100644 --- a/QSB/QSB.csproj +++ b/QSB/QSB.csproj @@ -287,7 +287,6 @@ - @@ -360,7 +359,6 @@ - diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index e16e0945..88cefa39 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -11,7 +11,6 @@ using QSB.Player; using QSB.Player.TransformSync; using QSB.PoolSync; using QSB.ProbeSync.TransformSync; -using QSB.RoastingSync.TransformSync; using QSB.ShipSync.TransformSync; using QSB.TimeSync; using QSB.Utility; @@ -40,9 +39,7 @@ namespace QSB private QSBNetworkLobby _lobby; private AssetBundle _assetBundle; - private GameObject _cameraPrefab; private GameObject _probePrefab; - private GameObject _stickPrefab; private bool _everConnected; public new void Awake() @@ -63,15 +60,10 @@ namespace QSB playerPrefab.AddComponent(); playerPrefab.AddComponent(); - _cameraPrefab = _assetBundle.LoadAsset("assets/networkcameraroot.prefab"); - SetupNetworkId(_cameraPrefab); - SetupNetworkTransform(_cameraPrefab); - _cameraPrefab.AddComponent(); - spawnPrefabs.Add(_cameraPrefab); ShipPrefab = _assetBundle.LoadAsset("assets/networkship.prefab"); SetupNetworkId(ShipPrefab); - SetupNetworkTransform(_cameraPrefab); + SetupNetworkTransform(ShipPrefab); ShipPrefab.AddComponent(); spawnPrefabs.Add(ShipPrefab); @@ -87,12 +79,6 @@ namespace QSB OrbPrefab.AddComponent(); spawnPrefabs.Add(OrbPrefab); - _stickPrefab = _assetBundle.LoadAsset("assets/networkstickpivot.prefab"); - SetupNetworkId(_stickPrefab); - SetupNetworkTransform(_stickPrefab); - _stickPrefab.AddComponent(); - spawnPrefabs.Add(_stickPrefab); - ConfigureNetworkManager(); } @@ -146,9 +132,7 @@ namespace QSB DebugLog.DebugWrite($"OnServerAddPlayer {playerControllerId}", MessageType.Info); base.OnServerAddPlayer(connection, playerControllerId); - QNetworkServer.SpawnWithClientAuthority(Instantiate(_cameraPrefab), connection); QNetworkServer.SpawnWithClientAuthority(Instantiate(_probePrefab), connection); - QNetworkServer.SpawnWithClientAuthority(Instantiate(_stickPrefab), connection); } public override void OnStartClient(QNetworkClient _) diff --git a/QSB/RoastingSync/TransformSync/RoastingStickTransformSync.cs b/QSB/RoastingSync/TransformSync/RoastingStickTransformSync.cs deleted file mode 100644 index e97e6252..00000000 --- a/QSB/RoastingSync/TransformSync/RoastingStickTransformSync.cs +++ /dev/null @@ -1,94 +0,0 @@ -using OWML.Utils; -using QSB.Player; -using QSB.SectorSync; -using QSB.Syncs.TransformSync; -using QSB.Utility; -using System.Linq; -using UnityEngine; - -namespace QSB.RoastingSync.TransformSync -{ - internal class RoastingStickTransformSync : SectoredTransformSync - { - private Transform _stickTip; - private Transform _networkStickTip => gameObject.transform.GetChild(0); - private const float SmoothTime = 0.1f; - private Vector3 _positionSmoothVelocity; - private Quaternion _rotationSmoothVelocity; - - private Transform GetPivot() - => Resources.FindObjectsOfTypeAll().First().transform.Find("Stick_Root/Stick_Pivot"); - - protected override Transform InitLocalTransform() - { - var pivot = GetPivot(); - Player.RoastingStick = pivot.gameObject; - _stickTip = pivot.Find("Stick_Tip"); - return pivot; - } - - protected override Transform InitRemoteTransform() - { - var newPivot = Instantiate(GetPivot()); - newPivot.parent = null; - newPivot.gameObject.SetActive(false); - Destroy(newPivot.Find("Stick_Tip/Props_HEA_RoastingStick/RoastingStick_Arm").gameObject); - Destroy(newPivot.Find("Stick_Tip/Props_HEA_RoastingStick/RoastingStick_Arm_NoSuit").gameObject); - var mallowRoot = newPivot.Find("Stick_Tip/Mallow_Root"); - mallowRoot.gameObject.SetActive(false); - var oldMarshmallow = mallowRoot.GetComponent(); - - // Recreate particle system - Destroy(mallowRoot.Find("MallowSmoke").GetComponent()); - var newSystem = mallowRoot.Find("MallowSmoke").gameObject.AddComponent(); - newSystem.Init(Player); - - // Create new marshmallow - var newMarshmallow = mallowRoot.gameObject.AddComponent(); - newMarshmallow._fireRenderer = oldMarshmallow.GetValue("_fireRenderer"); - newMarshmallow._smokeParticles = oldMarshmallow.GetValue("_smokeParticles"); - newMarshmallow._mallowRenderer = oldMarshmallow.GetValue("_mallowRenderer"); - newMarshmallow._rawColor = oldMarshmallow.GetValue("_rawColor"); - newMarshmallow._toastedColor = oldMarshmallow.GetValue("_toastedColor"); - newMarshmallow._burntColor = oldMarshmallow.GetValue("_burntColor"); - Destroy(oldMarshmallow); - - Player.RoastingStick = newPivot.gameObject; - Player.Marshmallow = newMarshmallow; - mallowRoot.gameObject.SetActive(true); - _stickTip = newPivot.Find("Stick_Tip"); - return newPivot; - } - - protected override void UpdateTransform() - { - base.UpdateTransform(); - if (_stickTip == null) - { - DebugLog.ToConsole($"Warning - _stickTip is null for player {PlayerId}", OWML.Common.MessageType.Warning); - return; - } - - if (HasAuthority) - { - _networkStickTip.localPosition = _stickTip.localPosition; - _networkStickTip.localRotation = _stickTip.localRotation; - return; - } - - _stickTip.localPosition = Vector3.SmoothDamp(_stickTip.localPosition, _networkStickTip.localPosition, ref _positionSmoothVelocity, SmoothTime); - _stickTip.localRotation = QuaternionHelper.SmoothDamp(_stickTip.localRotation, _networkStickTip.localRotation, ref _rotationSmoothVelocity, SmoothTime); - } - - public override bool IsReady => Locator.GetPlayerTransform() != null - && Player != null - && QSBPlayerManager.PlayerExists(Player.PlayerId) - && Player.PlayerStates.IsReady - && NetId.Value != uint.MaxValue - && NetId.Value != 0U; - - public override bool UseInterpolation => true; - - public override TargetType Type => TargetType.RoastingStick; - } -} \ No newline at end of file diff --git a/QSB/SectorSync/TargetType.cs b/QSB/SectorSync/TargetType.cs index b3ca5ab4..b463a2eb 100644 --- a/QSB/SectorSync/TargetType.cs +++ b/QSB/SectorSync/TargetType.cs @@ -5,9 +5,7 @@ None = 0, Player = 1, Probe = 2, - PlayerCamera = 3, - RoastingStick = 4, - Ship = 5, - Other = 6 + Ship = 3, + Other = 4 } } diff --git a/QSB/Syncs/TransformSync/SectoredTransformSync.cs b/QSB/Syncs/TransformSync/SectoredTransformSync.cs index f63e6f6c..4abb5689 100644 --- a/QSB/Syncs/TransformSync/SectoredTransformSync.cs +++ b/QSB/Syncs/TransformSync/SectoredTransformSync.cs @@ -66,6 +66,7 @@ namespace QSB.Syncs.TransformSync } else { + DebugLog.ToConsole($"Warning - ReferenceSector of {PlayerId}.{GetType().Name} is null."); writer.Write(-1); } @@ -89,7 +90,13 @@ namespace QSB.Syncs.TransformSync if (sector != ReferenceSector) { - DebugLog.DebugWrite($"DESERAILIZE new sector ({ReferenceSector.Name} to {sector.Name})"); + if (sector == null) + { + DebugLog.ToConsole($"Error - {PlayerId}.{GetType().Name} got sector of ID -1.", OWML.Common.MessageType.Error); + base.DeserializeTransform(reader); + return; + } + DebugLog.DebugWrite($"DESERAILIZE new sector ({(ReferenceSector == null ? "NULL" : ReferenceSector.Name)} to {sector.Name})"); SetReferenceSector(sector); } @@ -107,6 +114,7 @@ namespace QSB.Syncs.TransformSync } else { + DebugLog.ToConsole($"Error - No closest sector found to {PlayerId}.{GetType().Name}!", OWML.Common.MessageType.Error); return; } } diff --git a/QuantumUNET/Components/QNetworkTransformChild.cs b/QuantumUNET/Components/QNetworkTransformChild.cs index 769d9787..0da83cc0 100644 --- a/QuantumUNET/Components/QNetworkTransformChild.cs +++ b/QuantumUNET/Components/QNetworkTransformChild.cs @@ -15,8 +15,6 @@ namespace QuantumUNET.Components public QNetworkTransform m_Root; public float m_SendInterval = 0.1f; public float m_MovementThreshold = 0.001f; - public float m_InterpolateRotation = 0.5f; - public float m_InterpolateMovement = 0.5f; public float LastSyncTime { get; private set; } public Vector3 TargetSyncPosition => _targetSyncPosition; public Quaternion TargetSyncRotation3D => _targetSyncRotation3D; @@ -50,18 +48,6 @@ namespace QuantumUNET.Components set => m_MovementThreshold = value; } - public float InterpolateRotation - { - get => m_InterpolateRotation; - set => m_InterpolateRotation = value; - } - - public float InterpolateMovement - { - get => m_InterpolateMovement; - set => m_InterpolateMovement = value; - } - public void Awake() { _prevPosition = m_Target.localPosition; @@ -122,47 +108,56 @@ namespace QuantumUNET.Components private void FixedUpdateClient() { - if (LastSyncTime != 0f) + if (LastSyncTime == 0f) { - if (QNetworkServer.active || QNetworkClient.active) - { - if (IsServer || IsClient) - { - if (GetNetworkSendInterval() != 0f) - { - if (!HasAuthority) - { - if (LastSyncTime != 0f) - { - m_Target.localPosition = m_InterpolateMovement > 0f - ? Vector3.Lerp(m_Target.localPosition, _targetSyncPosition, m_InterpolateMovement) - : _targetSyncPosition; - m_Target.localRotation = m_InterpolateRotation > 0f - ? Quaternion.Slerp(m_Target.localRotation, _targetSyncRotation3D, m_InterpolateRotation) - : _targetSyncRotation3D; - } - } - } - } - } + return; } + + if (!QNetworkServer.active && !QNetworkClient.active) + { + return; + } + + if (!IsServer && !IsClient) + { + return; + } + + if (GetNetworkSendInterval() == 0f) + { + return; + } + + if (HasAuthority) + { + return; + } + + m_Target.localPosition = _targetSyncPosition; + m_Target.localRotation = _targetSyncRotation3D; } public void Update() { - if (HasAuthority) + if (!HasAuthority) { - if (LocalPlayerAuthority) - { - if (!QNetworkServer.active) - { - if (Time.time - _lastClientSendTime > GetNetworkSendInterval()) - { - SendTransform(); - _lastClientSendTime = Time.time; - } - } - } + return; + } + + if (!LocalPlayerAuthority) + { + return; + } + + if (QNetworkServer.active) + { + return; + } + + if (Time.time - _lastClientSendTime > GetNetworkSendInterval()) + { + SendTransform(); + _lastClientSendTime = Time.time; } } @@ -255,6 +250,7 @@ namespace QuantumUNET.Components } } + // Called on the server internal static void HandleChildTransform(QNetworkMessage netMsg) { var networkInstanceId = netMsg.Reader.ReadNetworkId();