holy crap its sorta working

This commit is contained in:
JohnCorby 2022-02-15 00:28:24 -08:00
parent af0981b1d2
commit 99fa5c698b
3 changed files with 77 additions and 41 deletions

View File

@ -1,5 +1,7 @@
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using System;
using System.Collections;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
@ -9,83 +11,109 @@ namespace QSB.Player
{ {
public static void Create(PlayerInfo player, bool joining) public static void Create(PlayerInfo player, bool joining)
{ {
var go = new GameObject(nameof(JoinLeaveSingularity)); var joinLeaveSingularity = new GameObject(nameof(JoinLeaveSingularity))
go.SetActive(false); .AddComponent<JoinLeaveSingularity>();
var joinLeaveSingularity = go.AddComponent<JoinLeaveSingularity>();
joinLeaveSingularity._player = player; joinLeaveSingularity._player = player;
joinLeaveSingularity._joining = joining; joinLeaveSingularity._joining = joining;
go.SetActive(true);
} }
private PlayerInfo _player; private PlayerInfo _player;
private bool _joining; private bool _joining;
private SingularityWarpEffect _effect; private SingularityWarpEffect CreateEffect()
private void Awake()
{ {
DebugLog.DebugWrite($"WARP {_player.TransformSync}"); var fakePlayer = _player.Body.InstantiateInactive();
fakePlayer.transform.parent = transform;
fakePlayer.transform.localPosition = Vector3.zero;
fakePlayer.transform.localRotation = Quaternion.identity;
fakePlayer.transform.localScale = Vector3.one;
foreach (var component in fakePlayer.GetComponentsInChildren<Component>(true))
{
if (component is Behaviour behaviour)
{
behaviour.enabled = false;
}
else if (component is not (Transform or Renderer))
{
Destroy(component);
}
}
var playerGo = _player.Body; fakePlayer.SetActive(true);
transform.parent = playerGo.transform.parent;
transform.localPosition = playerGo.transform.localPosition;
transform.localRotation = playerGo.transform.localRotation;
transform.localScale = playerGo.transform.localScale;
var fakePlayerGo = _player.Body.transform.Find("REMOTE_Traveller_HEA_Player_v2") var referenceEffect = _joining ?
.gameObject.InstantiateInactive(); QSBWorldSync.GetUnityObjects<GravityCannonController>().First()._warpEffect :
fakePlayerGo.transform.parent = transform; QSBWorldSync.GetUnityObjects<NomaiShuttleController>().First()._warpEffect;
fakePlayerGo.transform.localPosition = Vector3.zero; var effectGo = referenceEffect.gameObject.InstantiateInactive();
fakePlayerGo.transform.localRotation = Quaternion.identity;
fakePlayerGo.transform.localScale = Vector3.one;
fakePlayerGo.SetActive(true);
var effectGo = QSBWorldSync.GetUnityObjects<GravityCannonController>().First()._warpEffect
.gameObject.InstantiateInactive();
effectGo.transform.parent = transform; effectGo.transform.parent = transform;
effectGo.transform.localPosition = Vector3.zero; effectGo.transform.localPosition = Vector3.zero;
effectGo.transform.localRotation = Quaternion.identity; effectGo.transform.localRotation = Quaternion.identity;
effectGo.transform.localScale = Vector3.one; effectGo.transform.localScale = Vector3.one;
_effect = effectGo.GetComponent<SingularityWarpEffect>(); var effect = effectGo.GetComponent<SingularityWarpEffect>();
_effect.enabled = true; effect.enabled = true;
_effect._singularity.enabled = true; effect._warpedObjectGeometry = fakePlayer;
effect.OnWarpComplete += OnWarpComplete;
_effect._singularity._startActive = false; effect._singularity.enabled = true;
_effect._singularity._muteSingularityEffectAudio = false; effect._singularity._startActive = false;
// var curve = AnimationCurve.EaseInOut(0, 0, .2f, 1); effect._singularity._muteSingularityEffectAudio = false;
// _effect._singularity._creationCurve = curve; effect._singularity._creationCurve = AnimationCurve.EaseInOut(0, 0, 1, 1);
// _effect._singularity._destructionCurve = curve; effect._singularity._destructionCurve = AnimationCurve.EaseInOut(0, 1, 1, 0);
var renderer = effectGo.GetComponent<OWRenderer>(); // var renderer = effectGo.GetComponent<OWRenderer>();
// renderer.SetMaterialProperty(Shader.PropertyToID("_DistortFadeDist"), 3); // renderer.SetMaterialProperty(Shader.PropertyToID("_DistortFadeDist"), 3);
// renderer.SetMaterialProperty(Shader.PropertyToID("_MassScale"), _joining ? -1 : 1); // renderer.SetMaterialProperty(Shader.PropertyToID("_MassScale"), _joining ? -1 : 1);
// renderer.SetMaterialProperty(Shader.PropertyToID("_MaxDistortRadius"), 10); // renderer.SetMaterialProperty(Shader.PropertyToID("_MaxDistortRadius"), 10);
// renderer.SetMaterialProperty(Shader.PropertyToID("_Radius"), 1); // renderer.SetMaterialProperty(Shader.PropertyToID("_Radius"), 1);
renderer.SetColor(_joining ? Color.white * 2 : Color.black); // renderer.SetColor(_joining ? Color.white : Color.black);
_effect._warpedObjectGeometry = fakePlayerGo;
_effect.OnWarpComplete += OnWarpComplete;
effectGo.SetActive(true); effectGo.SetActive(true);
return effect;
} }
private void Start() private IEnumerator Start()
{ {
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 effect = CreateEffect();
_player.SetVisible(false); _player.SetVisible(false);
yield return new WaitForSeconds(1);
const float length = 1; const float length = 1;
if (_joining) if (_joining)
{ {
DebugLog.DebugWrite($"WARP IN {_player.TransformSync}"); DebugLog.DebugWrite($"WARP IN {_player.TransformSync}");
_effect.WarpObjectIn(length); effect.WarpObjectIn(length);
} }
else else
{ {
DebugLog.DebugWrite($"WARP OUT {_player.TransformSync}"); DebugLog.DebugWrite($"WARP OUT {_player.TransformSync}");
_effect.WarpObjectOut(length); effect.WarpObjectOut(length);
} }
} }
private void Update()
{
var playerGo = _player.Body;
if (!playerGo)
{
enabled = false;
return;
}
transform.parent = playerGo.transform.parent;
transform.localPosition = playerGo.transform.localPosition;
transform.localRotation = playerGo.transform.localRotation;
transform.localScale = playerGo.transform.localScale;
}
private void OnWarpComplete() private void OnWarpComplete()
{ {
DebugLog.DebugWrite($"WARP DONE {_player.TransformSync}"); DebugLog.DebugWrite($"WARP DONE {_player.TransformSync}");
@ -94,5 +122,10 @@ namespace QSB.Player
_player.SetVisible(true); _player.SetVisible(true);
} }
private void OnRenderObject()
{
Popcron.Gizmos.Cube(transform.position, transform.rotation, Vector3.one * 3, Color.cyan);
}
} }
} }

View File

@ -76,9 +76,6 @@ namespace QSB.Player.Messages
player.Name = PlayerName; player.Name = PlayerName;
DebugLog.ToAll($"{player.Name} joined!", MessageType.Info); DebugLog.ToAll($"{player.Name} joined!", MessageType.Info);
DebugLog.DebugWrite($"{player.Name} joined. id:{player.PlayerId}, qsbVersion:{QSBVersion}, gameVersion:{GameVersion}, dlcInstalled:{DlcInstalled}", MessageType.Info); DebugLog.DebugWrite($"{player.Name} joined. id:{player.PlayerId}, qsbVersion:{QSBVersion}, gameVersion:{GameVersion}, dlcInstalled:{DlcInstalled}", MessageType.Info);
Delay.RunWhen(() => player.TransformSync.IsValid && player.TransformSync.ReferenceTransform,
() => JoinLeaveSingularity.Create(player, true));
} }
public override void OnReceiveLocal() public override void OnReceiveLocal()

View File

@ -44,6 +44,12 @@ namespace QSB.Player.TransformSync
base.OnStartClient(); base.OnStartClient();
QSBPlayerManager.OnAddPlayer?.Invoke(Player); QSBPlayerManager.OnAddPlayer?.Invoke(Player);
DebugLog.DebugWrite($"Create Player : id<{Player.PlayerId}>", MessageType.Info); DebugLog.DebugWrite($"Create Player : id<{Player.PlayerId}>", MessageType.Info);
if (!isLocalPlayer)
{
Delay.RunWhen(() => IsValid && ReferenceTransform,
() => JoinLeaveSingularity.Create(Player, true));
}
} }
public override void OnStartLocalPlayer() => LocalInstance = this; public override void OnStartLocalPlayer() => LocalInstance = this;