1
0
mirror of https://github.com/misternebula/quantum-space-buddies.git synced 2025-03-31 16:20:45 +00:00
This commit is contained in:
Mister_Nebula 2021-07-06 22:29:47 +01:00
parent 0d4c9bfac2
commit 72956bfe65
9 changed files with 188 additions and 236 deletions

@ -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;

@ -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>();
camera.enabled = false;
var owcamera = body.AddComponent<OWCamera>();
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;
}
}

@ -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<RoastingStickController>().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<AnimationSync>().InitLocal(body);
GetComponent<InstrumentsManager>().InitLocal(body);
// player body
var playerBody = GetPlayerModel();
GetComponent<AnimationSync>().InitLocal(playerBody);
GetComponent<InstrumentsManager>().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<AnimationSync>().InitRemote(body);
GetComponent<InstrumentsManager>().InitRemote(body);
GetComponent<AnimationSync>().InitRemote(playerBody);
GetComponent<InstrumentsManager>().InitRemote(playerBody);
var marker = body.gameObject.AddComponent<PlayerHUDMarker>();
var marker = playerBody.gameObject.AddComponent<PlayerHUDMarker>();
marker.Init(Player);
body.gameObject.AddComponent<PlayerMapMarker>().PlayerName = Player.Name;
playerBody.gameObject.AddComponent<PlayerMapMarker>().PlayerName = Player.Name;
return body;
// camera
var cameraBody = new GameObject("RemotePlayerCamera");
cameraBody.transform.parent = playerBody;
PlayerToolsManager.Init(cameraBody.transform);
var camera = cameraBody.AddComponent<Camera>();
camera.enabled = false;
var owcamera = cameraBody.AddComponent<OWCamera>();
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<Marshmallow>();
// Recreate particle system
Destroy(mallowRoot.Find("MallowSmoke").GetComponent<RelativisticParticleSystem>());
var newSystem = mallowRoot.Find("MallowSmoke").gameObject.AddComponent<CustomRelativisticParticleSystem>();
newSystem.Init(Player);
// Create new marshmallow
var newMarshmallow = mallowRoot.gameObject.AddComponent<QSBMarshmallow>();
newMarshmallow._fireRenderer = oldMarshmallow.GetValue<MeshRenderer>("_fireRenderer");
newMarshmallow._smokeParticles = oldMarshmallow.GetValue<ParticleSystem>("_smokeParticles");
newMarshmallow._mallowRenderer = oldMarshmallow.GetValue<MeshRenderer>("_mallowRenderer");
newMarshmallow._rawColor = oldMarshmallow.GetValue<Color>("_rawColor");
newMarshmallow._toastedColor = oldMarshmallow.GetValue<Color>("_toastedColor");
newMarshmallow._burntColor = oldMarshmallow.GetValue<Color>("_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;

@ -287,7 +287,6 @@
<Compile Include="StatueSync\Events\StartStatueMessage.cs" />
<Compile Include="StatueSync\Patches\StatuePatches.cs" />
<Compile Include="StatueSync\StatueManager.cs" />
<Compile Include="RoastingSync\TransformSync\RoastingStickTransformSync.cs" />
<Compile Include="Syncs\TransformSync\BaseTransformSync.cs" />
<Compile Include="Syncs\IntermediaryTransform.cs" />
<Compile Include="Syncs\TransformSync\SectoredTransformSync.cs" />
@ -360,7 +359,6 @@
<Compile Include="Player\PlayerInfo.cs" />
<Compile Include="DeathSync\RespawnOnDeath.cs" />
<Compile Include="Player\QSBPlayerManager.cs" />
<Compile Include="Player\TransformSync\PlayerCameraSync.cs" />
<Compile Include="Player\PlayerHUDMarker.cs" />
<Compile Include="Tools\PlayerToolsManager.cs" />
<Compile Include="Utility\QuaternionHelper.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<JetpackAccelerationSync>();
playerPrefab.AddComponent<InstrumentsManager>();
_cameraPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkcameraroot.prefab");
SetupNetworkId(_cameraPrefab);
SetupNetworkTransform(_cameraPrefab);
_cameraPrefab.AddComponent<PlayerCameraSync>();
spawnPrefabs.Add(_cameraPrefab);
ShipPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkship.prefab");
SetupNetworkId(ShipPrefab);
SetupNetworkTransform(_cameraPrefab);
SetupNetworkTransform(ShipPrefab);
ShipPrefab.AddComponent<ShipTransformSync>();
spawnPrefabs.Add(ShipPrefab);
@ -87,12 +79,6 @@ namespace QSB
OrbPrefab.AddComponent<NomaiOrbTransformSync>();
spawnPrefabs.Add(OrbPrefab);
_stickPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkstickpivot.prefab");
SetupNetworkId(_stickPrefab);
SetupNetworkTransform(_stickPrefab);
_stickPrefab.AddComponent<RoastingStickTransformSync>();
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 _)

@ -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<RoastingStickController>().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<Marshmallow>();
// Recreate particle system
Destroy(mallowRoot.Find("MallowSmoke").GetComponent<RelativisticParticleSystem>());
var newSystem = mallowRoot.Find("MallowSmoke").gameObject.AddComponent<CustomRelativisticParticleSystem>();
newSystem.Init(Player);
// Create new marshmallow
var newMarshmallow = mallowRoot.gameObject.AddComponent<QSBMarshmallow>();
newMarshmallow._fireRenderer = oldMarshmallow.GetValue<MeshRenderer>("_fireRenderer");
newMarshmallow._smokeParticles = oldMarshmallow.GetValue<ParticleSystem>("_smokeParticles");
newMarshmallow._mallowRenderer = oldMarshmallow.GetValue<MeshRenderer>("_mallowRenderer");
newMarshmallow._rawColor = oldMarshmallow.GetValue<Color>("_rawColor");
newMarshmallow._toastedColor = oldMarshmallow.GetValue<Color>("_toastedColor");
newMarshmallow._burntColor = oldMarshmallow.GetValue<Color>("_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;
}
}

@ -5,9 +5,7 @@
None = 0,
Player = 1,
Probe = 2,
PlayerCamera = 3,
RoastingStick = 4,
Ship = 5,
Other = 6
Ship = 3,
Other = 4
}
}

@ -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;
}
}

@ -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();