diff --git a/QSB/Player/JoinLeaveSingularity.cs b/QSB/Player/JoinLeaveSingularity.cs index 70aba046..def6701a 100644 --- a/QSB/Player/JoinLeaveSingularity.cs +++ b/QSB/Player/JoinLeaveSingularity.cs @@ -1,4 +1,6 @@ using QSB.Utility; +using QSB.WorldSync; +using System.Linq; using UnityEngine; namespace QSB.Player @@ -24,42 +26,46 @@ namespace QSB.Player { DebugLog.DebugWrite($"WARP {_player.TransformSync}"); - transform.parent = _player.Body.transform.parent; - transform.localPosition = _player.Body.transform.localPosition; - transform.localRotation = _player.Body.transform.localRotation; - transform.localScale = _player.Body.transform.localScale; + var playerGo = _player.Body; + transform.parent = playerGo.transform.parent; + transform.localPosition = playerGo.transform.localPosition; + transform.localRotation = playerGo.transform.localRotation; + transform.localScale = playerGo.transform.localScale; - var SingularityWarpEffect = _player.Body.transform.Find("SingularityWarpEffect").gameObject; + var fakePlayerGo = _player.Body.transform.Find("REMOTE_Traveller_HEA_Player_v2") + .gameObject.InstantiateInactive(); + fakePlayerGo.transform.parent = transform; + fakePlayerGo.transform.localPosition = Vector3.zero; + fakePlayerGo.transform.localRotation = Quaternion.identity; + fakePlayerGo.transform.localScale = Vector3.one; + fakePlayerGo.SetActive(true); - var effectGo = SingularityWarpEffect.InstantiateInactive(); + var effectGo = QSBWorldSync.GetUnityObjects().First()._warpEffect + .gameObject.InstantiateInactive(); effectGo.transform.parent = transform; effectGo.transform.localPosition = Vector3.zero; effectGo.transform.localRotation = Quaternion.identity; effectGo.transform.localScale = Vector3.one; - var effect = effectGo.GetComponent(); - var curve = AnimationCurve.EaseInOut(0, 0, .2f, 1); - effect._singularity._creationCurve = curve; - effect._singularity._destructionCurve = curve; + _effect = effectGo.GetComponent(); + _effect.enabled = true; + _effect._singularity.enabled = true; + + _effect._singularity._startActive = false; + _effect._singularity._muteSingularityEffectAudio = false; + // var curve = AnimationCurve.EaseInOut(0, 0, .2f, 1); + // _effect._singularity._creationCurve = curve; + // _effect._singularity._destructionCurve = curve; var renderer = effectGo.GetComponent(); - renderer.SetMaterialProperty(Shader.PropertyToID("_DistortFadeDist"), 3); - renderer.SetMaterialProperty(Shader.PropertyToID("_MassScale"), _joining ? -1 : 1); - renderer.SetMaterialProperty(Shader.PropertyToID("_MaxDistortRadius"), 10); - renderer.SetMaterialProperty(Shader.PropertyToID("_Radius"), 1); + // renderer.SetMaterialProperty(Shader.PropertyToID("_DistortFadeDist"), 3); + // renderer.SetMaterialProperty(Shader.PropertyToID("_MassScale"), _joining ? -1 : 1); + // renderer.SetMaterialProperty(Shader.PropertyToID("_MaxDistortRadius"), 10); + // renderer.SetMaterialProperty(Shader.PropertyToID("_Radius"), 1); renderer.SetColor(_joining ? Color.white * 2 : Color.black); - _effect = effect; - var warpedObjectGeometry = _effect._warpedObjectGeometry.InstantiateInactive(); - warpedObjectGeometry.transform.parent = transform; - warpedObjectGeometry.transform.localPosition = Vector3.zero; - warpedObjectGeometry.transform.localRotation = Quaternion.identity; - warpedObjectGeometry.transform.localScale = Vector3.one; - _effect._warpedObjectGeometry = warpedObjectGeometry; - + _effect._warpedObjectGeometry = fakePlayerGo; _effect.OnWarpComplete += OnWarpComplete; - - warpedObjectGeometry.SetActive(true); effectGo.SetActive(true); } diff --git a/QSB/Player/TransformSync/PlayerTransformSync.cs b/QSB/Player/TransformSync/PlayerTransformSync.cs index 20d65ef6..8ec40f5d 100644 --- a/QSB/Player/TransformSync/PlayerTransformSync.cs +++ b/QSB/Player/TransformSync/PlayerTransformSync.cs @@ -50,7 +50,10 @@ namespace QSB.Player.TransformSync public override void OnStopClient() { - JoinLeaveSingularity.Create(Player, false); + if (!isLocalPlayer) + { + JoinLeaveSingularity.Create(Player, false); + } // TODO : Maybe move this to a leave event...? Would ensure everything could finish up before removing the player QSBPlayerManager.OnRemovePlayer?.Invoke(Player);