Merge branch 'dev' into steamworks

# Conflicts:
#	QSB/manifest.json
This commit is contained in:
JohnCorby 2022-01-20 22:42:41 -08:00
commit 13b3f9c634
33 changed files with 334 additions and 321 deletions

View File

@ -6,12 +6,15 @@ using UnityEngine;
namespace QSB.Anglerfish.Messages namespace QSB.Anglerfish.Messages
{ {
public class AnglerChangeStateMessage : QSBEnumWorldObjectMessage<QSBAngler, AnglerfishController.AnglerState> /// <summary>
/// angler state, target transform, and local disturbance pos
/// </summary>
public class AnglerDataMessage : QSBEnumWorldObjectMessage<QSBAngler, AnglerfishController.AnglerState>
{ {
private uint TargetId; private uint TargetId;
private Vector3 LocalDisturbancePos; private Vector3 LocalDisturbancePos;
public AnglerChangeStateMessage(QSBAngler qsbAngler) public AnglerDataMessage(QSBAngler qsbAngler)
{ {
Value = qsbAngler.AttachedObject._currentState; Value = qsbAngler.AttachedObject._currentState;
TargetId = TargetToId(qsbAngler.TargetTransform); TargetId = TargetToId(qsbAngler.TargetTransform);

View File

@ -39,7 +39,8 @@ namespace QSB.Anglerfish.Patches
if (qsbAngler.TargetTransform != null && sectorDetector.GetAttachedOWRigidbody().transform == qsbAngler.TargetTransform) if (qsbAngler.TargetTransform != null && sectorDetector.GetAttachedOWRigidbody().transform == qsbAngler.TargetTransform)
{ {
qsbAngler.TargetTransform = null; qsbAngler.TargetTransform = null;
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
} }
return false; return false;
@ -62,7 +63,7 @@ namespace QSB.Anglerfish.Patches
if ((__instance._brambleBody.transform.TransformPoint(__instance._localDisturbancePos) - __instance._anglerBody.GetPosition()).sqrMagnitude < __instance._arrivalDistance * __instance._arrivalDistance) if ((__instance._brambleBody.transform.TransformPoint(__instance._localDisturbancePos) - __instance._anglerBody.GetPosition()).sqrMagnitude < __instance._arrivalDistance * __instance._arrivalDistance)
{ {
__instance.ChangeState(AnglerfishController.AnglerState.Lurking); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
return false; return false;
} }
@ -71,7 +72,7 @@ namespace QSB.Anglerfish.Patches
if (qsbAngler.TargetTransform == null) if (qsbAngler.TargetTransform == null)
{ {
__instance.ChangeState(AnglerfishController.AnglerState.Lurking); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
return false; return false;
} }
@ -79,7 +80,7 @@ namespace QSB.Anglerfish.Patches
{ {
qsbAngler.TargetTransform = null; qsbAngler.TargetTransform = null;
__instance.ChangeState(AnglerfishController.AnglerState.Lurking); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
return false; return false;
} }
@ -90,7 +91,7 @@ namespace QSB.Anglerfish.Patches
if (qsbAngler.TargetTransform == null) if (qsbAngler.TargetTransform == null)
{ {
__instance.ChangeState(AnglerfishController.AnglerState.Lurking); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
return false; return false;
} }
@ -124,7 +125,8 @@ namespace QSB.Anglerfish.Patches
else else
{ {
qsbAngler.TargetTransform = null; qsbAngler.TargetTransform = null;
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
} }
break; break;
@ -135,12 +137,12 @@ namespace QSB.Anglerfish.Patches
if (qsbAngler.TargetTransform != null) if (qsbAngler.TargetTransform != null)
{ {
__instance.ChangeState(AnglerfishController.AnglerState.Chasing); __instance.ChangeState(AnglerfishController.AnglerState.Chasing);
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
return false; return false;
} }
__instance.ChangeState(AnglerfishController.AnglerState.Lurking); __instance.ChangeState(AnglerfishController.AnglerState.Lurking);
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
} }
break; break;
@ -252,7 +254,7 @@ namespace QSB.Anglerfish.Patches
{ {
qsbAngler.TargetTransform = attachedOWRigidbody.transform; qsbAngler.TargetTransform = attachedOWRigidbody.transform;
__instance.ChangeState(AnglerfishController.AnglerState.Chasing); __instance.ChangeState(AnglerfishController.AnglerState.Chasing);
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
return false; return false;
} }
@ -281,7 +283,7 @@ namespace QSB.Anglerfish.Patches
__instance.ChangeState(AnglerfishController.AnglerState.Chasing); __instance.ChangeState(AnglerfishController.AnglerState.Chasing);
} }
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
return false; return false;
} }
} }
@ -293,7 +295,7 @@ namespace QSB.Anglerfish.Patches
__instance.ChangeState(AnglerfishController.AnglerState.Investigating); __instance.ChangeState(AnglerfishController.AnglerState.Investigating);
} }
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
} }
return false; return false;
@ -321,7 +323,7 @@ namespace QSB.Anglerfish.Patches
qsbAngler.TargetTransform = caughtBody.transform; qsbAngler.TargetTransform = caughtBody.transform;
__instance._consumeStartTime = Time.time; __instance._consumeStartTime = Time.time;
__instance.ChangeState(AnglerfishController.AnglerState.Consuming); __instance.ChangeState(AnglerfishController.AnglerState.Consuming);
qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
} }
return false; return false;

View File

@ -19,16 +19,16 @@ namespace QSB.Anglerfish.TransformSync
protected override OWRigidbody InitAttachedRigidbody() protected override OWRigidbody InitAttachedRigidbody()
=> _qsbAngler.AttachedObject._anglerBody; => _qsbAngler.AttachedObject._anglerBody;
public override void Start() public override void OnStartClient()
{ {
_instances.Add(this); _instances.Add(this);
base.Start(); base.OnStartClient();
} }
protected override void OnDestroy() public override void OnStopClient()
{ {
_instances.Remove(this); _instances.Remove(this);
base.OnDestroy(); base.OnStopClient();
if (QSBCore.IsHost) if (QSBCore.IsHost)
{ {

View File

@ -7,7 +7,6 @@ namespace QSB.JellyfishSync.Messages
{ {
public JellyfishRisingMessage(bool isRising) => Value = isRising; public JellyfishRisingMessage(bool isRising) => Value = isRising;
public override void OnReceiveRemote() => WorldObject.IsRising = Value; public override void OnReceiveRemote() => WorldObject.SetIsRising(Value);
} }
} }

View File

@ -20,17 +20,16 @@ namespace QSB.JellyfishSync.Patches
return true; return true;
} }
var qsbJellyfish = __instance.GetWorldObject<QSBJellyfish>();
var sqrMagnitude = (__instance._jellyfishBody.GetPosition() - __instance._planetBody.GetPosition()).sqrMagnitude; var sqrMagnitude = (__instance._jellyfishBody.GetPosition() - __instance._planetBody.GetPosition()).sqrMagnitude;
if (qsbJellyfish.IsRising) if (__instance._isRising)
{ {
__instance._jellyfishBody.AddAcceleration(__instance.transform.up * __instance._upwardsAcceleration); __instance._jellyfishBody.AddAcceleration(__instance.transform.up * __instance._upwardsAcceleration);
if (sqrMagnitude > __instance._upperLimit * __instance._upperLimit) if (sqrMagnitude > __instance._upperLimit * __instance._upperLimit)
{ {
qsbJellyfish.IsRising = false; __instance._isRising = false;
__instance._attractiveFluidVolume.SetVolumeActivation(true);
qsbJellyfish.SendMessage(new JellyfishRisingMessage(qsbJellyfish.IsRising)); __instance.GetWorldObject<QSBJellyfish>().SendMessage(new JellyfishRisingMessage(false));
return false;
} }
} }
else else
@ -38,8 +37,9 @@ namespace QSB.JellyfishSync.Patches
__instance._jellyfishBody.AddAcceleration(-__instance.transform.up * __instance._downwardsAcceleration); __instance._jellyfishBody.AddAcceleration(-__instance.transform.up * __instance._downwardsAcceleration);
if (sqrMagnitude < __instance._lowerLimit * __instance._lowerLimit) if (sqrMagnitude < __instance._lowerLimit * __instance._lowerLimit)
{ {
qsbJellyfish.IsRising = true; __instance._isRising = true;
qsbJellyfish.SendMessage(new JellyfishRisingMessage(qsbJellyfish.IsRising)); __instance._attractiveFluidVolume.SetVolumeActivation(false);
__instance.GetWorldObject<QSBJellyfish>().SendMessage(new JellyfishRisingMessage(true));
} }
} }

View File

@ -1,5 +1,4 @@
using Mirror; using QSB.AuthoritySync;
using QSB.AuthoritySync;
using QSB.JellyfishSync.WorldObjects; using QSB.JellyfishSync.WorldObjects;
using QSB.Syncs.Unsectored.Rigidbodies; using QSB.Syncs.Unsectored.Rigidbodies;
using QSB.Utility; using QSB.Utility;
@ -21,16 +20,16 @@ namespace QSB.JellyfishSync.TransformSync
protected override OWRigidbody InitAttachedRigidbody() protected override OWRigidbody InitAttachedRigidbody()
=> _qsbJellyfish.AttachedObject._jellyfishBody; => _qsbJellyfish.AttachedObject._jellyfishBody;
public override void Start() public override void OnStartClient()
{ {
_instances.Add(this); _instances.Add(this);
base.Start(); base.OnStartClient();
} }
protected override void OnDestroy() public override void OnStopClient()
{ {
_instances.Remove(this); _instances.Remove(this);
base.OnDestroy(); base.OnStopClient();
if (QSBCore.IsHost) if (QSBCore.IsHost)
{ {
@ -65,36 +64,9 @@ namespace QSB.JellyfishSync.TransformSync
private void OnUnsuspend(OWRigidbody suspendedBody) => netIdentity.SendAuthQueueMessage(AuthQueueAction.Add); private void OnUnsuspend(OWRigidbody suspendedBody) => netIdentity.SendAuthQueueMessage(AuthQueueAction.Add);
private void OnSuspend(OWRigidbody suspendedBody) => netIdentity.SendAuthQueueMessage(AuthQueueAction.Remove); private void OnSuspend(OWRigidbody suspendedBody) => netIdentity.SendAuthQueueMessage(AuthQueueAction.Remove);
private bool _isRising;
protected override void Serialize(NetworkWriter writer, bool initialState)
{
base.Serialize(writer, initialState);
writer.Write(_isRising);
}
protected override void Deserialize(NetworkReader reader, bool initialState)
{
base.Deserialize(reader, initialState);
_isRising = reader.ReadBool();
}
protected override void GetFromAttached()
{
base.GetFromAttached();
_qsbJellyfish.Align = true;
_isRising = _qsbJellyfish.IsRising;
}
/// replacement using SetPosition/Rotation instead of Move /// replacement using SetPosition/Rotation instead of Move
protected override void ApplyToAttached() protected override void ApplyToAttached()
{ {
_qsbJellyfish.Align = false;
_qsbJellyfish.IsRising = _isRising;
var pos = ReferenceTransform.FromRelPos(transform.position); var pos = ReferenceTransform.FromRelPos(transform.position);
AttachedRigidbody.SetPosition(pos); AttachedRigidbody.SetPosition(pos);
AttachedRigidbody.SetRotation(ReferenceTransform.FromRelRot(transform.rotation)); AttachedRigidbody.SetRotation(ReferenceTransform.FromRelRot(transform.rotation));

View File

@ -32,24 +32,15 @@ namespace QSB.JellyfishSync.WorldObjects
} }
} }
public bool IsRising public void SetIsRising(bool value)
{ {
get => AttachedObject._isRising; if (AttachedObject._isRising == value)
set
{ {
if (AttachedObject._isRising == value) return;
{
return;
}
AttachedObject._isRising = value;
AttachedObject._attractiveFluidVolume.SetVolumeActivation(!value);
} }
}
public bool Align AttachedObject._isRising = value;
{ AttachedObject._attractiveFluidVolume.SetVolumeActivation(!value);
set => _alignWithTargetBody.enabled = value;
} }
} }
} }

View File

@ -267,7 +267,7 @@ namespace QSB.Menus
if (QSBCore.IsHost) if (QSBCore.IsHost)
{ {
SetButtonActive(ResumeGameButton, StandaloneProfileManager.SharedInstance.currentProfileGameSave.loopCount > 1); QSBCore.UnityEvents.RunWhen(PlayerData.IsLoaded, () => SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1));
SetButtonActive(NewGameButton, true); SetButtonActive(NewGameButton, true);
} }
else else
@ -279,7 +279,7 @@ namespace QSB.Menus
else else
{ {
SetButtonActive(ClientButton, true); SetButtonActive(ClientButton, true);
SetButtonActive(ResumeGameButton, StandaloneProfileManager.SharedInstance.currentProfileGameSave.loopCount > 1); QSBCore.UnityEvents.RunWhen(PlayerData.IsLoaded, () => SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1));
SetButtonActive(NewGameButton, true); SetButtonActive(NewGameButton, true);
} }
@ -389,7 +389,7 @@ namespace QSB.Menus
{ {
KickReason.QSBVersionNotMatching => "Server refused connection as QSB version does not match.", KickReason.QSBVersionNotMatching => "Server refused connection as QSB version does not match.",
KickReason.GameVersionNotMatching => "Server refused connection as Outer Wilds version does not match.", KickReason.GameVersionNotMatching => "Server refused connection as Outer Wilds version does not match.",
KickReason.GamePlatformNotMatching => "Server refused connection as Outer Wilds platform does not match. (Steam/Epic)", KickReason.GamePlatformNotMatching => "Server refused connection as Outer Wilds platform does not match. (Steam/Epic/Xbox)",
KickReason.DLCNotMatching => "Server refused connection as DLC installation state does not match.", KickReason.DLCNotMatching => "Server refused connection as DLC installation state does not match.",
KickReason.InEye => "Server refused connection as game has progressed too far.", KickReason.InEye => "Server refused connection as game has progressed too far.",
KickReason.None => "Kicked from server. No reason given.", KickReason.None => "Kicked from server. No reason given.",
@ -433,7 +433,7 @@ namespace QSB.Menus
SetButtonActive(ClientButton, true); SetButtonActive(ClientButton, true);
SetButtonActive(QuitButton, true); SetButtonActive(QuitButton, true);
SetButtonActive(HostButton, true); SetButtonActive(HostButton, true);
SetButtonActive(ResumeGameButton, StandaloneProfileManager.SharedInstance.currentProfileGameSave.loopCount > 1); SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1);
SetButtonActive(NewGameButton, true); SetButtonActive(NewGameButton, true);
} }
} }

View File

@ -22,16 +22,16 @@ namespace QSB.OrbSync.TransformSync
private QSBOrb _qsbOrb; private QSBOrb _qsbOrb;
private static readonly List<NomaiOrbTransformSync> _instances = new(); private static readonly List<NomaiOrbTransformSync> _instances = new();
public override void Start() public override void OnStartClient()
{ {
_instances.Add(this); _instances.Add(this);
base.Start(); base.OnStartClient();
} }
protected override void OnDestroy() public override void OnStopClient()
{ {
_instances.Remove(this); _instances.Remove(this);
base.OnDestroy(); base.OnStopClient();
if (QSBCore.IsHost) if (QSBCore.IsHost)
{ {

View File

@ -3,6 +3,7 @@
public enum GamePlatform public enum GamePlatform
{ {
Steam, Steam,
Epic Epic,
Xbox
} }
} }

View File

@ -1,9 +1,13 @@
using OWML.Common; using OWML.Common;
using QSB.Anglerfish.Messages;
using QSB.Anglerfish.WorldObjects;
using QSB.CampfireSync.Messages; using QSB.CampfireSync.Messages;
using QSB.CampfireSync.WorldObjects; using QSB.CampfireSync.WorldObjects;
using QSB.ClientServerStateSync; using QSB.ClientServerStateSync;
using QSB.ClientServerStateSync.Messages; using QSB.ClientServerStateSync.Messages;
using QSB.ConversationSync.Messages; using QSB.ConversationSync.Messages;
using QSB.JellyfishSync.Messages;
using QSB.JellyfishSync.WorldObjects;
using QSB.LogSync.Messages; using QSB.LogSync.Messages;
using QSB.Messaging; using QSB.Messaging;
using QSB.MeteorSync.Messages; using QSB.MeteorSync.Messages;
@ -148,6 +152,26 @@ namespace QSB.Player.Messages
qsbOrb.SendMessage(new OrbDragMessage(qsbOrb.AttachedObject._isBeingDragged) { To = From }); qsbOrb.SendMessage(new OrbDragMessage(qsbOrb.AttachedObject._isBeingDragged) { To = From });
qsbOrb.SendMessage(new OrbSlotMessage(qsbOrb.AttachedObject._slots.IndexOf(qsbOrb.AttachedObject._occupiedSlot)) { To = From }); qsbOrb.SendMessage(new OrbSlotMessage(qsbOrb.AttachedObject._slots.IndexOf(qsbOrb.AttachedObject._occupiedSlot)) { To = From });
} }
foreach (var qsbJellyfish in QSBWorldSync.GetWorldObjects<QSBJellyfish>())
{
if (!qsbJellyfish.TransformSync.hasAuthority)
{
continue;
}
qsbJellyfish.SendMessage(new JellyfishRisingMessage(qsbJellyfish.AttachedObject._isRising));
}
foreach (var qsbAngler in QSBWorldSync.GetWorldObjects<QSBAngler>())
{
if (!qsbAngler.TransformSync.hasAuthority)
{
continue;
}
qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler));
}
} }
} }
} }

View File

@ -43,53 +43,44 @@ namespace QSB.Player.TransformSync
private Transform GetStickPivot() private Transform GetStickPivot()
=> QSBWorldSync.GetUnityObjects<RoastingStickController>().First().transform.Find("Stick_Root/Stick_Pivot"); => QSBWorldSync.GetUnityObjects<RoastingStickController>().First().transform.Find("Stick_Root/Stick_Pivot");
public override void OnStartLocalPlayer() public override void OnStartClient()
=> LocalInstance = this;
public override void Start()
{ {
var player = new PlayerInfo(this); var player = new PlayerInfo(this);
QSBPlayerManager.PlayerList.SafeAdd(player); QSBPlayerManager.PlayerList.SafeAdd(player);
base.Start(); 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);
} }
public override void OnStartLocalPlayer() => LocalInstance = this;
protected override void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool isInUniverse) protected override void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool isInUniverse)
{ {
if (!hasAuthority)
{
base.OnSceneLoaded(oldScene, newScene, isInUniverse);
}
if (isInUniverse && !IsInitialized)
{
Player.IsReady = false;
new PlayerReadyMessage(false).Send();
}
if (!isInUniverse)
{
Player.IsReady = false;
new PlayerReadyMessage(false).Send();
}
base.OnSceneLoaded(oldScene, newScene, isInUniverse); base.OnSceneLoaded(oldScene, newScene, isInUniverse);
if (isLocalPlayer)
{
Player.IsReady = false;
new PlayerReadyMessage(false).Send();
}
} }
protected override void Init() protected override void Init()
{ {
base.Init(); base.Init();
Player.IsReady = true; if (isLocalPlayer)
new PlayerReadyMessage(true).Send(); {
Player.IsReady = true;
new PlayerReadyMessage(true).Send();
}
} }
protected override void OnDestroy() public override void OnStopClient()
{ {
// TODO : Maybe move this to a leave event...? Would ensure everything could finish up before removing the player // TODO : Maybe move this to a leave event...? Would ensure everything could finish up before removing the player
QSBPlayerManager.OnRemovePlayer?.Invoke(Player); QSBPlayerManager.OnRemovePlayer?.Invoke(Player);
base.OnDestroy(); base.OnStopClient();
Player.HudMarker?.Remove(); Player.HudMarker?.Remove();
QSBPlayerManager.PlayerList.Remove(Player); QSBPlayerManager.PlayerList.Remove(Player);
DebugLog.DebugWrite($"Remove Player : id<{Player.PlayerId}>", MessageType.Info); DebugLog.DebugWrite($"Remove Player : id<{Player.PlayerId}>", MessageType.Info);

View File

@ -1,21 +1,23 @@
using Mirror; using Mirror;
using OWML.Common; using OWML.Common;
using OWML.ModHelper; using OWML.ModHelper;
using OWML.ModHelper.Input;
using QSB.EyeOfTheUniverse.GalaxyMap; using QSB.EyeOfTheUniverse.GalaxyMap;
using QSB.EyeOfTheUniverse.MaskSync; using QSB.EyeOfTheUniverse.MaskSync;
using QSB.Inputs; using QSB.Inputs;
using QSB.Menus; using QSB.Menus;
using QSB.Patches; using QSB.Patches;
using QSB.Player; using QSB.Player;
using QSB.QuantumSync;
using QSB.RespawnSync; using QSB.RespawnSync;
using QSB.SatelliteSync; using QSB.SatelliteSync;
using QSB.StatueSync; using QSB.StatueSync;
using QSB.TimeSync; using QSB.TimeSync;
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using System;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
using UnityEngine.InputSystem;
/* /*
Copyright (C) 2020 - 2021 Copyright (C) 2020 - 2021
@ -59,13 +61,11 @@ namespace QSB
public static bool IsInMultiplayer => QSBNetworkManager.singleton.isNetworkActive; public static bool IsInMultiplayer => QSBNetworkManager.singleton.isNetworkActive;
public static string QSBVersion => Helper.Manifest.Version; public static string QSBVersion => Helper.Manifest.Version;
public static string GameVersion => Application.version; public static string GameVersion => Application.version;
public static GamePlatform Platform => typeof(Achievements).Assembly.GetTypes().Any(x => x.Name == "EpicEntitlementRetriever") public static GamePlatform Platform { get; private set; }
? GamePlatform.Epic
: GamePlatform.Steam;
public static bool DLCInstalled => EntitlementsManager.IsDlcOwned() == EntitlementsManager.AsyncOwnershipStatus.Owned; public static bool DLCInstalled => EntitlementsManager.IsDlcOwned() == EntitlementsManager.AsyncOwnershipStatus.Owned;
public static IMenuAPI MenuApi { get; private set; } public static IMenuAPI MenuApi { get; private set; }
private static DebugSettings DebugSettings { get; set; } = new DebugSettings(); private static DebugSettings DebugSettings { get; set; } = new();
public void Awake() public void Awake()
{ {
@ -79,6 +79,23 @@ namespace QSB
Helper = ModHelper; Helper = ModHelper;
DebugLog.ToConsole($"* Start of QSB version {QSBVersion} - authored by {Helper.Manifest.Author}", MessageType.Info); DebugLog.ToConsole($"* Start of QSB version {QSBVersion} - authored by {Helper.Manifest.Author}", MessageType.Info);
switch (EntitlementsManager.instance._entitlementRetriever.GetType().Name)
{
case "EpicEntitlementRetriever":
Platform = GamePlatform.Epic;
break;
case "SteamEntitlementRetriever":
Platform = GamePlatform.Steam;
break;
case "MSStoreEntitlementRetriever":
Platform = GamePlatform.Xbox;
break;
case var other:
DebugLog.ToConsole($"Cannot get game platform (entitlement retriever name = {other})\nTell a QSB Dev!", MessageType.Error);
enabled = false;
return;
}
MenuApi = ModHelper.Interaction.GetModApi<IMenuAPI>("_nebula.MenuFramework"); MenuApi = ModHelper.Interaction.GetModApi<IMenuAPI>("_nebula.MenuFramework");
NetworkAssetBundle = Helper.Assets.LoadBundle("AssetBundles/network"); NetworkAssetBundle = Helper.Assets.LoadBundle("AssetBundles/network");
@ -87,7 +104,7 @@ namespace QSB
DebugAssetBundle = Helper.Assets.LoadBundle("AssetBundles/debug"); DebugAssetBundle = Helper.Assets.LoadBundle("AssetBundles/debug");
TextAssetsBundle = Helper.Assets.LoadBundle("AssetBundles/textassets"); TextAssetsBundle = Helper.Assets.LoadBundle("AssetBundles/textassets");
DebugSettings = ModHelper.Storage.Load<DebugSettings>("debugsettings.json"); DebugSettings = Helper.Storage.Load<DebugSettings>("debugsettings.json");
if (DebugSettings == null) if (DebugSettings == null)
{ {
@ -139,6 +156,21 @@ namespace QSB
{ {
DefaultServerIP = config.GetSettingsValue<string>("defaultServerIP"); DefaultServerIP = config.GetSettingsValue<string>("defaultServerIP");
} }
private void Update()
{
if (Keyboard.current[Key.Q].isPressed && Keyboard.current[Key.D].wasPressedThisFrame)
{
DebugSettings.DebugMode = !DebugSettings.DebugMode;
GetComponent<DebugActions>().enabled = DebugMode;
GetComponent<DebugGUI>().enabled = DebugMode;
QuantumManager.UpdateFromDebugSetting();
DebugCameraSettings.UpdateFromDebugSetting();
DebugLog.ToConsole($"DEBUG MODE = {DebugMode}");
}
}
} }
} }

View File

@ -15,7 +15,6 @@ using QSB.Patches;
using QSB.Player; using QSB.Player;
using QSB.Player.Messages; using QSB.Player.Messages;
using QSB.Player.TransformSync; using QSB.Player.TransformSync;
using QSB.PoolSync;
using QSB.ShipSync.TransformSync; using QSB.ShipSync.TransformSync;
using QSB.TimeSync; using QSB.TimeSync;
using QSB.Tools.ProbeTool.TransformSync; using QSB.Tools.ProbeTool.TransformSync;
@ -72,7 +71,7 @@ namespace QSB
base.Awake(); base.Awake();
PlayerName = GetPlayerName(); InitPlayerName();
playerPrefab = QSBCore.NetworkAssetBundle.LoadAsset<GameObject>("Assets/Prefabs/NETWORK_Player_Body.prefab"); playerPrefab = QSBCore.NetworkAssetBundle.LoadAsset<GameObject>("Assets/Prefabs/NETWORK_Player_Body.prefab");
playerPrefab.GetRequiredComponent<NetworkIdentity>().SetValue("m_AssetId", 1.ToGuid().ToString("N")); playerPrefab.GetRequiredComponent<NetworkIdentity>().SetValue("m_AssetId", 1.ToGuid().ToString("N"));
@ -98,21 +97,29 @@ namespace QSB
ConfigureNetworkManager(); ConfigureNetworkManager();
} }
private string GetPlayerName() private void InitPlayerName()
{ {
try QSBCore.UnityEvents.RunWhen(PlayerData.IsLoaded, () =>
{ {
var profileManager = StandaloneProfileManager.SharedInstance; try
profileManager.Initialize(); {
var profile = profileManager._currentProfile; var titleScreenManager = FindObjectOfType<TitleScreenManager>();
var profileName = profile.profileName; var profileManager = titleScreenManager._profileManager;
return profileName; if (profileManager.GetType().Name == "MSStoreProfileManager")
} {
catch (Exception ex) PlayerName = (string)profileManager.GetType().GetProperty("userDisplayName").GetValue(profileManager);
{ }
DebugLog.ToConsole($"Error - Exception when getting player name : {ex}", MessageType.Error); else
return "Player"; {
} PlayerName = StandaloneProfileManager.SharedInstance.currentProfile.profileName;
}
}
catch (Exception ex)
{
DebugLog.ToConsole($"Error - Exception when getting player name : {ex}", MessageType.Error);
PlayerName = "Player";
}
});
} }
/// create a new network prefab from the network object prefab template. /// create a new network prefab from the network object prefab template.

View File

@ -35,6 +35,8 @@ namespace QSB.QuantumSync
{ {
Shrine = QSBWorldSync.GetUnityObjects<QuantumShrine>().First(); Shrine = QSBWorldSync.GetUnityObjects<QuantumShrine>().First();
} }
UpdateFromDebugSetting();
} }
public void PlayerLeave(PlayerInfo player) public void PlayerLeave(PlayerInfo player)
@ -121,5 +123,82 @@ namespace QSB.QuantumSync
var worldObj = obj.GetWorldObject<IQSBQuantumObject>(); var worldObj = obj.GetWorldObject<IQSBQuantumObject>();
return QSBPlayerManager.PlayerList.Where(x => x.EntangledObject == worldObj); return QSBPlayerManager.PlayerList.Where(x => x.EntangledObject == worldObj);
} }
#region debug shapes
private static GameObject _debugSphere, _debugCube, _debugCapsule;
private class DebugShape : MonoBehaviour { }
public static void UpdateFromDebugSetting()
{
if (QSBCore.ShowQuantumVisibilityObjects)
{
if (_debugSphere == null)
{
_debugSphere = QSBCore.DebugAssetBundle.LoadAsset<GameObject>("Assets/Prefabs/Sphere.prefab");
}
if (_debugCube == null)
{
_debugCube = QSBCore.DebugAssetBundle.LoadAsset<GameObject>("Assets/Prefabs/Cube.prefab");
}
if (_debugCapsule == null)
{
_debugCapsule = QSBCore.DebugAssetBundle.LoadAsset<GameObject>("Assets/Prefabs/Capsule.prefab");
}
foreach (var quantumObject in QSBWorldSync.GetWorldObjects<IQSBQuantumObject>())
{
foreach (var shape in quantumObject.GetAttachedShapes())
{
if (shape is BoxShape boxShape)
{
var newCube = Instantiate(_debugCube);
newCube.transform.parent = shape.transform;
newCube.transform.localPosition = Vector3.zero;
newCube.transform.localRotation = Quaternion.Euler(0, 0, 0);
newCube.transform.localScale = boxShape.size;
newCube.AddComponent<DebugShape>();
}
else if (shape is SphereShape sphereShape)
{
var newSphere = Instantiate(_debugSphere);
newSphere.transform.parent = shape.transform;
newSphere.transform.localPosition = Vector3.zero;
newSphere.transform.localRotation = Quaternion.Euler(0, 0, 0);
newSphere.transform.localScale = Vector3.one * (sphereShape.radius * 2);
newSphere.AddComponent<DebugShape>();
}
else if (shape is CapsuleShape capsuleShape)
{
var newCapsule = Instantiate(_debugCapsule);
newCapsule.transform.parent = shape.transform;
newCapsule.transform.localPosition = Vector3.zero;
newCapsule.transform.localRotation = Quaternion.Euler(0, 0, 0);
newCapsule.transform.localScale = new Vector3(capsuleShape.radius * 2, capsuleShape.height, capsuleShape.radius * 2);
newCapsule.AddComponent<DebugShape>();
}
}
}
}
else
{
foreach (var quantumObject in QSBWorldSync.GetWorldObjects<IQSBQuantumObject>())
{
foreach (var shape in quantumObject.GetAttachedShapes())
{
var debugShape = shape.GetComponentInChildren<DebugShape>();
if (debugShape)
{
Destroy(debugShape.gameObject);
}
}
}
}
}
#endregion
} }
} }

View File

@ -38,57 +38,6 @@ namespace QSB.QuantumSync.WorldObjects
public override void Init() public override void Init()
{ {
if (QSBCore.ShowQuantumVisibilityObjects)
{
var debugBundle = QSBCore.DebugAssetBundle;
var sphere = debugBundle.LoadAsset<GameObject>("Assets/Prefabs/Sphere.prefab");
var cube = debugBundle.LoadAsset<GameObject>("Assets/Prefabs/Cube.prefab");
var capsule = debugBundle.LoadAsset<GameObject>("Assets/Prefabs/Capsule.prefab");
if (cube == null)
{
DebugLog.DebugWrite($"CUBE IS NULL");
}
if (sphere == null)
{
DebugLog.DebugWrite($"SPHERE IS NULL");
}
if (capsule == null)
{
DebugLog.DebugWrite($"CAPSULE IS NULL");
}
foreach (var shape in GetAttachedShapes())
{
if (shape is BoxShape boxShape)
{
var newCube = Object.Instantiate(cube);
newCube.transform.parent = shape.transform;
newCube.transform.localPosition = Vector3.zero;
newCube.transform.localRotation = Quaternion.Euler(0, 0, 0);
newCube.transform.localScale = boxShape.size;
}
else if (shape is SphereShape sphereShape)
{
var newSphere = Object.Instantiate(sphere);
newSphere.transform.parent = shape.transform;
newSphere.transform.localPosition = Vector3.zero;
newSphere.transform.localRotation = Quaternion.Euler(0, 0, 0);
newSphere.transform.localScale = Vector3.one * (sphereShape.radius * 2);
}
else if (shape is CapsuleShape capsuleShape)
{
var newCapsule = Object.Instantiate(capsule);
newCapsule.transform.parent = shape.transform;
newCapsule.transform.localPosition = Vector3.zero;
newCapsule.transform.localRotation = Quaternion.Euler(0, 0, 0);
newCapsule.transform.localScale = new Vector3(capsuleShape.radius * 2, capsuleShape.height, capsuleShape.radius * 2);
}
}
}
StartDelayedReady(); StartDelayedReady();
QSBCore.UnityEvents.FireInNUpdates(LateInit, 5); QSBCore.UnityEvents.FireInNUpdates(LateInit, 5);
} }

View File

@ -22,7 +22,7 @@ namespace QSB.SaveSync.Messages
public GameStateMessage(uint toId) public GameStateMessage(uint toId)
{ {
To = toId; To = toId;
var gameSave = StandaloneProfileManager.SharedInstance.currentProfileGameSave; var gameSave = PlayerData._currentGameSave;
WarpedToTheEye = gameSave.warpedToTheEye; WarpedToTheEye = gameSave.warpedToTheEye;
SecondsRemainingOnWarp = gameSave.secondsRemainingOnWarp; SecondsRemainingOnWarp = gameSave.secondsRemainingOnWarp;
LaunchCodesGiven = PlayerData.KnowsLaunchCodes(); LaunchCodesGiven = PlayerData.KnowsLaunchCodes();
@ -89,7 +89,7 @@ namespace QSB.SaveSync.Messages
PlayerData.ResetGame(); PlayerData.ResetGame();
var gameSave = StandaloneProfileManager.SharedInstance.currentProfileGameSave; var gameSave = PlayerData._currentGameSave;
gameSave.loopCount = LoopCount; gameSave.loopCount = LoopCount;
gameSave.knownFrequencies = KnownFrequencies; gameSave.knownFrequencies = KnownFrequencies;
gameSave.knownSignals = KnownSignals; gameSave.knownSignals = KnownSignals;

View File

@ -16,7 +16,7 @@ namespace QSB.SaveSync.Messages
{ {
new GameStateMessage(From).Send(); new GameStateMessage(From).Send();
var gameSave = StandaloneProfileManager.SharedInstance.currentProfileGameSave; var gameSave = PlayerData._currentGameSave;
var factSaves = gameSave.shipLogFactSaves; var factSaves = gameSave.shipLogFactSaves;
foreach (var item in factSaves) foreach (var item in factSaves)

View File

@ -15,9 +15,9 @@ namespace QSB.ShipSync.TransformSync
protected override bool IsReady protected override bool IsReady
=> Locator.GetShipBody() != null; => Locator.GetShipBody() != null;
public override void Start() public override void OnStartClient()
{ {
base.Start(); base.OnStartClient();
LocalInstance = this; LocalInstance = this;
} }
@ -31,8 +31,7 @@ namespace QSB.ShipSync.TransformSync
protected override void ApplyToAttached() protected override void ApplyToAttached()
{ {
ApplyToSector(); ApplyToSector();
if (!ReferenceTransform)
if (ReferenceTransform == null || transform.position == Vector3.zero)
{ {
return; return;
} }

View File

@ -14,16 +14,16 @@ namespace QSB.Syncs.Sectored
private int _sectorId = -1; private int _sectorId = -1;
public override void Start() public override void OnStartClient()
{ {
SectorSync = gameObject.AddComponent<SectorSync.SectorSync>(); SectorSync = gameObject.AddComponent<SectorSync.SectorSync>();
QSBSectorManager.Instance.TransformSyncs.Add(this); QSBSectorManager.Instance.TransformSyncs.Add(this);
base.Start(); base.OnStartClient();
} }
protected override void OnDestroy() public override void OnStopClient()
{ {
base.OnDestroy(); base.OnStopClient();
QSBSectorManager.Instance.TransformSyncs.Remove(this); QSBSectorManager.Instance.TransformSyncs.Remove(this);
Destroy(SectorSync); Destroy(SectorSync);
} }
@ -48,14 +48,7 @@ namespace QSB.Syncs.Sectored
protected void GetFromSector() protected void GetFromSector()
{ {
if (ReferenceSector != null) _sectorId = ReferenceSector?.ObjectId ?? -1;
{
_sectorId = ReferenceSector.ObjectId;
}
else
{
_sectorId = -1;
}
} }
protected void ApplyToSector() protected void ApplyToSector()

View File

@ -50,28 +50,21 @@ namespace QSB.Syncs.Sectored.Rigidbodies
protected override void GetFromAttached() protected override void GetFromAttached()
{ {
GetFromSector(); GetFromSector();
if (!ReferenceTransform)
{
return;
}
if (ReferenceTransform != null) transform.position = ReferenceTransform.ToRelPos(AttachedRigidbody.GetPosition());
{ transform.rotation = ReferenceTransform.ToRelRot(AttachedRigidbody.GetRotation());
transform.position = ReferenceTransform.ToRelPos(AttachedRigidbody.GetPosition()); _relativeVelocity = ReferenceTransform.GetAttachedOWRigidbody().ToRelVel(AttachedRigidbody.GetVelocity(), AttachedRigidbody.GetPosition());
transform.rotation = ReferenceTransform.ToRelRot(AttachedRigidbody.GetRotation()); _relativeAngularVelocity = ReferenceTransform.GetAttachedOWRigidbody().ToRelAngVel(AttachedRigidbody.GetAngularVelocity());
_relativeVelocity = ReferenceTransform.GetAttachedOWRigidbody().ToRelVel(AttachedRigidbody.GetVelocity(), AttachedRigidbody.GetPosition());
_relativeAngularVelocity = ReferenceTransform.GetAttachedOWRigidbody().ToRelAngVel(AttachedRigidbody.GetAngularVelocity());
}
else
{
transform.position = Vector3.zero;
transform.rotation = Quaternion.identity;
_relativeVelocity = Vector3.zero;
_relativeAngularVelocity = Vector3.zero;
}
} }
protected override void ApplyToAttached() protected override void ApplyToAttached()
{ {
ApplyToSector(); ApplyToSector();
if (!ReferenceTransform)
if (ReferenceTransform == null || transform.position == Vector3.zero)
{ {
return; return;
} }

View File

@ -1,5 +1,4 @@
using Mirror; using QSB.Utility;
using QSB.Utility;
using UnityEngine; using UnityEngine;
namespace QSB.Syncs.Sectored.Transforms namespace QSB.Syncs.Sectored.Transforms
@ -12,36 +11,22 @@ namespace QSB.Syncs.Sectored.Transforms
protected override Transform InitAttachedTransform() protected override Transform InitAttachedTransform()
=> hasAuthority ? InitLocalTransform() : InitRemoteTransform(); => hasAuthority ? InitLocalTransform() : InitRemoteTransform();
protected override void Deserialize(NetworkReader reader, bool initialState)
{
base.Deserialize(reader, initialState);
if (transform.position == Vector3.zero)
{
}
}
protected override void GetFromAttached() protected override void GetFromAttached()
{ {
GetFromSector(); GetFromSector();
if (!ReferenceTransform)
{
return;
}
if (ReferenceTransform != null) transform.position = ReferenceTransform.ToRelPos(AttachedTransform.position);
{ transform.rotation = ReferenceTransform.ToRelRot(AttachedTransform.rotation);
transform.position = ReferenceTransform.ToRelPos(AttachedTransform.position);
transform.rotation = ReferenceTransform.ToRelRot(AttachedTransform.rotation);
}
else
{
transform.position = Vector3.zero;
transform.rotation = Quaternion.identity;
}
} }
protected override void ApplyToAttached() protected override void ApplyToAttached()
{ {
ApplyToSector(); ApplyToSector();
if (!ReferenceTransform)
if (ReferenceTransform == null || transform.position == Vector3.zero)
{ {
return; return;
} }

View File

@ -1,7 +1,6 @@
using Mirror; using Mirror;
using OWML.Common; using OWML.Common;
using QSB.Player; using QSB.Player;
using QSB.Player.TransformSync;
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using System; using System;
@ -26,9 +25,9 @@ namespace QSB.Syncs
{ {
if (_player == null) if (_player == null)
{ {
DebugLog.ToConsole("Error - trying to get SyncBase.Player before Start has been called! " DebugLog.ToConsole($"Error - trying to get SyncBase.Player for {netId} before Start has been called! "
+ "this really should not be happening!\n" + "this really should not be happening!\n"
+ $"{Environment.StackTrace}", + Environment.StackTrace,
MessageType.Error); MessageType.Error);
} }
@ -54,7 +53,12 @@ namespace QSB.Syncs
if (IsPlayerObject) if (IsPlayerObject)
{ {
if (!Player.IsReady && this is not PlayerTransformSync) if (_player == null)
{
return false;
}
if (!isLocalPlayer && !Player.IsReady)
{ {
return false; return false;
} }
@ -66,7 +70,6 @@ namespace QSB.Syncs
protected abstract bool IsReady { get; } protected abstract bool IsReady { get; }
protected abstract bool UseInterpolation { get; } protected abstract bool UseInterpolation { get; }
protected virtual bool AllowDisabledAttachedObject => false;
protected abstract bool AllowNullReferenceTransform { get; } protected abstract bool AllowNullReferenceTransform { get; }
protected virtual bool IsPlayerObject => false; protected virtual bool IsPlayerObject => false;
protected virtual bool OnlyApplyOnDeserialize => false; protected virtual bool OnlyApplyOnDeserialize => false;
@ -88,7 +91,7 @@ namespace QSB.Syncs
protected abstract void GetFromAttached(); protected abstract void GetFromAttached();
protected abstract void ApplyToAttached(); protected abstract void ApplyToAttached();
public virtual void Start() public override void OnStartClient()
{ {
if (IsPlayerObject) if (IsPlayerObject)
{ {
@ -103,7 +106,7 @@ namespace QSB.Syncs
QSBSceneManager.OnSceneLoaded += OnSceneLoaded; QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
} }
protected virtual void OnDestroy() public override void OnStopClient()
{ {
if (IsPlayerObject && !hasAuthority && AttachedTransform != null) if (IsPlayerObject && !hasAuthority && AttachedTransform != null)
{ {
@ -169,12 +172,11 @@ namespace QSB.Syncs
if (AttachedTransform == null) if (AttachedTransform == null)
{ {
DebugLog.ToConsole($"Warning - AttachedObject {LogName} is null.", MessageType.Warning); DebugLog.ToConsole($"Error - AttachedObject {LogName} is null!", MessageType.Error);
IsInitialized = false;
return; return;
} }
if (!AttachedTransform.gameObject.activeInHierarchy && !AllowDisabledAttachedObject) if (!AttachedTransform.gameObject.activeInHierarchy)
{ {
return; return;
} }
@ -185,16 +187,16 @@ namespace QSB.Syncs
return; return;
} }
if (ReferenceTransform != null && ReferenceTransform.position == Vector3.zero && ReferenceTransform != Locator.GetRootTransform())
{
DebugLog.ToConsole($"Warning - {LogName}'s ReferenceTransform is at (0,0,0). ReferenceTransform:{ReferenceTransform.name}, AttachedObject:{AttachedTransform.name}", MessageType.Warning);
}
if (ReferenceTransform == Locator.GetRootTransform()) if (ReferenceTransform == Locator.GetRootTransform())
{ {
return; return;
} }
if (ReferenceTransform != null && ReferenceTransform.position == Vector3.zero)
{
DebugLog.ToConsole($"Warning - {LogName}'s ReferenceTransform is at (0,0,0). ReferenceTransform:{ReferenceTransform.name}, AttachedObject:{AttachedTransform.name}", MessageType.Warning);
}
if (UseInterpolation) if (UseInterpolation)
{ {
SmoothPosition = SmartSmoothDamp(SmoothPosition, transform.position); SmoothPosition = SmartSmoothDamp(SmoothPosition, transform.position);

View File

@ -121,7 +121,7 @@ namespace QSB.TimeSync
} }
else else
{ {
if (!QSBCore.SkipTitleScreen) if (!QSBCore.AvoidTimeSync)
{ {
WakeUpOrSleep(); WakeUpOrSleep();
} }

View File

@ -1,5 +1,6 @@
using QSB.Tools.ProbeLauncherTool.WorldObjects; using QSB.Tools.ProbeLauncherTool.WorldObjects;
using QSB.WorldSync; using QSB.WorldSync;
using System.Linq;
namespace QSB.Tools.ProbeLauncherTool namespace QSB.Tools.ProbeLauncherTool
{ {
@ -8,6 +9,12 @@ namespace QSB.Tools.ProbeLauncherTool
public override WorldObjectType WorldObjectType => WorldObjectType.Both; public override WorldObjectType WorldObjectType => WorldObjectType.Both;
public override void BuildWorldObjects(OWScene scene) public override void BuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBProbeLauncher, ProbeLauncher>(typeof(PlayerProbeLauncher)); {
QSBWorldSync.Init<QSBProbeLauncher, ProbeLauncher>(typeof(PlayerProbeLauncher));
QSBWorldSync.Init<QSBProbeLauncher, ProbeLauncher>(new[]
{
QSBWorldSync.GetUnityObjects<ShipCockpitController>().First().GetShipProbeLauncher()
});
}
} }
} }

View File

@ -11,7 +11,6 @@ namespace QSB.Tools.ProbeTool.TransformSync
{ {
protected override float DistanceLeeway => 10f; protected override float DistanceLeeway => 10f;
protected override bool UseInterpolation => true; protected override bool UseInterpolation => true;
protected override bool AllowDisabledAttachedObject => true;
protected override bool IsPlayerObject => true; protected override bool IsPlayerObject => true;
public static PlayerProbeSync LocalInstance { get; private set; } public static PlayerProbeSync LocalInstance { get; private set; }
@ -63,37 +62,6 @@ namespace QSB.Tools.ProbeTool.TransformSync
return body; return body;
} }
protected override void GetFromAttached()
{
if (AttachedTransform.gameObject.activeInHierarchy)
{
base.GetFromAttached();
return;
}
var probeOWRigidbody = Locator.GetProbe().GetOWRigidbody();
if (probeOWRigidbody == null)
{
DebugLog.ToConsole($"Warning - Could not find OWRigidbody of local probe.", MessageType.Warning);
}
var probeLauncher = Player.LocalProbeLauncher;
// TODO : make this sync to the *active* probe launcher's _launcherTransform
var launcherTransform = probeLauncher._launcherTransform;
probeOWRigidbody.SetPosition(launcherTransform.position);
probeOWRigidbody.SetRotation(launcherTransform.rotation);
base.GetFromAttached();
var currentReferenceSector = ReferenceSector;
var playerReferenceSector = Player.TransformSync.ReferenceSector;
if (currentReferenceSector != playerReferenceSector)
{
SetReferenceSector(playerReferenceSector);
}
}
protected override bool IsReady => AttachedTransform != null || Locator.GetProbe() != null; protected override bool IsReady => AttachedTransform != null || Locator.GetProbe() != null;
} }
} }

View File

@ -31,16 +31,15 @@ namespace QSB.Utility
private void DamageShipElectricalSystem() => ShipManager.Instance.ShipElectricalComponent.SetDamaged(true); private void DamageShipElectricalSystem() => ShipManager.Instance.ShipElectricalComponent.SetDamaged(true);
private void Awake() private void Awake() => enabled = QSBCore.DebugMode;
{
if (!QSBCore.DebugMode)
{
Destroy(this);
}
}
public void Update() public void Update()
{ {
if (!Keyboard.current[Key.Q].isPressed)
{
return;
}
/* /*
* 1 - Warp to first non local player * 1 - Warp to first non local player
* 2 - Set time flowing * 2 - Set time flowing
@ -51,7 +50,7 @@ namespace QSB.Utility
* 7 - Warp to vessel * 7 - Warp to vessel
* 8 - Place warp core into vessel * 8 - Place warp core into vessel
* 9 - Load eye scene * 9 - Load eye scene
* 0 - * 0 - Die
*/ */
if (Keyboard.current[Key.Numpad1].wasPressedThisFrame) if (Keyboard.current[Key.Numpad1].wasPressedThisFrame)
@ -115,6 +114,11 @@ namespace QSB.Utility
LoadManager.LoadSceneAsync(OWScene.EyeOfTheUniverse, true, LoadManager.FadeType.ToWhite); LoadManager.LoadSceneAsync(OWScene.EyeOfTheUniverse, true, LoadManager.FadeType.ToWhite);
} }
} }
if (Keyboard.current[Key.Numpad0].wasPressedThisFrame)
{
Locator.GetDeathManager().KillPlayer(DeathType.Default);
}
} }
} }
} }

View File

@ -4,16 +4,29 @@ namespace QSB.Utility
{ {
internal class DebugCameraSettings : MonoBehaviour internal class DebugCameraSettings : MonoBehaviour
{ {
void Start() public static void UpdateFromDebugSetting()
{ {
if (QSBCore.GreySkybox) if (QSBCore.GreySkybox)
{ {
QSBSceneManager.OnSceneLoaded += OnSceneLoaded; QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
Camera.main.backgroundColor = Color.gray; Camera.main.backgroundColor = Color.gray;
} }
else
{
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
Camera.main.backgroundColor = _origColor;
}
} }
private void OnSceneLoaded(OWScene arg1, OWScene arg2, bool arg3) private static Color _origColor;
private void Start()
{
_origColor = Camera.main.backgroundColor;
UpdateFromDebugSetting();
}
private static void OnSceneLoaded(OWScene arg1, OWScene arg2, bool arg3)
=> Camera.main.backgroundColor = Color.gray; => Camera.main.backgroundColor = Color.gray;
} }
} }

View File

@ -32,11 +32,7 @@ namespace QSB.Utility
private void Awake() private void Awake()
{ {
if (!QSBCore.DebugMode) enabled = QSBCore.DebugMode;
{
Destroy(this);
return;
}
guiGUIStyle.fontSize = 9; guiGUIStyle.fontSize = 9;
} }

View File

@ -12,20 +12,19 @@ namespace QSB.Utility
public sealed override bool OnSerialize(NetworkWriter writer, bool initialState) public sealed override bool OnSerialize(NetworkWriter writer, bool initialState)
{ {
var changed = base.OnSerialize(writer, initialState); if (initialState)
if (initialState && isServer)
{ {
Serialize(writer, true); Serialize(writer, true);
UpdatePrevData(); UpdatePrevData();
return true;
} }
return changed; return false;
} }
public sealed override void OnDeserialize(NetworkReader reader, bool initialState) public sealed override void OnDeserialize(NetworkReader reader, bool initialState)
{ {
base.OnDeserialize(reader, initialState); if (initialState)
if (initialState && !isServer)
{ {
UpdatePrevData(); UpdatePrevData();
Deserialize(reader, true); Deserialize(reader, true);

View File

@ -26,8 +26,6 @@ namespace QSB.WorldSync
public static void BuildWorldObjects(OWScene scene) public static void BuildWorldObjects(OWScene scene)
{ {
GameInit();
if (PlayerTransformSync.LocalInstance == null) if (PlayerTransformSync.LocalInstance == null)
{ {
DebugLog.ToConsole($"Warning - Tried to build WorldObjects when LocalPlayer is not ready! Building when ready...", MessageType.Warning); DebugLog.ToConsole($"Warning - Tried to build WorldObjects when LocalPlayer is not ready! Building when ready...", MessageType.Warning);
@ -35,6 +33,8 @@ namespace QSB.WorldSync
return; return;
} }
GameInit();
DoBuild(scene); DoBuild(scene);
} }
@ -57,7 +57,7 @@ namespace QSB.WorldSync
} }
catch (Exception ex) catch (Exception ex)
{ {
DebugLog.ToConsole($"Exception - Exception when trying to build WorldObjects of manager {manager.GetType().Name} : {ex.Message} Stacktrace :\r\n{ex.StackTrace}", MessageType.Error); DebugLog.ToConsole($"Exception - Exception when trying to build WorldObjects of manager {manager.GetType().Name} : {ex}", MessageType.Error);
} }
} }
@ -78,6 +78,11 @@ namespace QSB.WorldSync
public static void RemoveWorldObjects() public static void RemoveWorldObjects()
{ {
if (!AllObjectsReady)
{
return;
}
GameReset(); GameReset();
AllObjectsAdded = false; AllObjectsAdded = false;
@ -91,7 +96,7 @@ namespace QSB.WorldSync
} }
catch (Exception e) catch (Exception e)
{ {
DebugLog.ToConsole($"Error - Exception in OnRemoval() for {item.GetType()}. Message : {e.Message}, Stack trace : {e.StackTrace}", MessageType.Error); DebugLog.ToConsole($"Error - Exception in OnRemoval() for {item.GetType()}. {e}", MessageType.Error);
} }
} }

View File

@ -1,5 +1,4 @@
using QSB.Player; using UnityEngine;
using UnityEngine;
namespace QSB.WorldSync namespace QSB.WorldSync
{ {
@ -9,7 +8,7 @@ namespace QSB.WorldSync
public int ObjectId { get; init; } public int ObjectId { get; init; }
public T AttachedObject { get; init; } public T AttachedObject { get; init; }
public string Name => AttachedObject == null ? "<NullObject!>" : AttachedObject.name; public string Name => AttachedObject == null ? "<NullObject!>" : AttachedObject.name;
public string LogName => $"{QSBPlayerManager.LocalPlayerId}.{ObjectId}:{GetType().Name} ({Name})"; public string LogName => $"{ObjectId}:{GetType().Name} ({Name})";
public virtual void Init() { } public virtual void Init() { }
public virtual void OnRemoval() { } public virtual void OnRemoval() { }

View File

@ -1,8 +1,8 @@
{ {
"debugMode": true, "debugMode": false,
"drawLines": true, "drawLines": false,
"showQuantumVisibilityObjects": true, "showQuantumVisibilityObjects": false,
"showDebugLabels": true, "showDebugLabels": false,
"avoidTimeSync": false, "avoidTimeSync": false,
"skipTitleScreen": true, "skipTitleScreen": true,
"greySkybox": true "greySkybox": true