mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-15 09:40:03 +00:00
holy crap its sorta working
This commit is contained in:
parent
af0981b1d2
commit
99fa5c698b
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user