Merge pull request #323 from misternebula/0.12.0-finalizations

0.12.0 finalizations
This commit is contained in:
_nebula 2021-10-25 16:55:02 +01:00 committed by GitHub
commit 65b4cc2677
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 350 additions and 82 deletions

Binary file not shown.

View File

@ -1,9 +1,9 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
CRC: 3009665417 CRC: 3095198160
Hashes: Hashes:
AssetFileHash: AssetFileHash:
serializedVersion: 2 serializedVersion: 2
Hash: dbc913ca95e649d2e00d188ff573830e Hash: aeeeeba83ed0a32973e863d3787067c0
TypeTreeHash: TypeTreeHash:
serializedVersion: 2 serializedVersion: 2
Hash: b2ece8ae09df261ff59d764d08696641 Hash: b2ece8ae09df261ff59d764d08696641

View File

@ -30,7 +30,7 @@ namespace QSB.ClientServerStateSync.Events
{ {
if (message.AboutId == uint.MaxValue) if (message.AboutId == uint.MaxValue)
{ {
DebugLog.DebugWrite($"Error - ID is uint.MaxValue!", OWML.Common.MessageType.Error); DebugLog.ToConsole($"Error - ID is uint.MaxValue!", OWML.Common.MessageType.Error);
return; return;
} }

View File

@ -15,6 +15,7 @@ namespace QSB.ClientServerStateSync
public delegate void ChangeStateEvent(ServerState newState); public delegate void ChangeStateEvent(ServerState newState);
private ServerState _currentState; private ServerState _currentState;
private bool _blockNextCheck;
private void Awake() private void Awake()
=> Instance = this; => Instance = this;
@ -123,13 +124,21 @@ namespace QSB.ClientServerStateSync
return; return;
} }
if (_blockNextCheck)
{
_blockNextCheck = false;
return;
}
if (_currentState == ServerState.WaitingForAllPlayersToReady) if (_currentState == ServerState.WaitingForAllPlayersToReady)
{ {
if (QSBPlayerManager.PlayerList.All(x => x.State == ClientState.WaitingForOthersToReadyInSolarSystem)) if (QSBPlayerManager.PlayerList.All(x => x.State == ClientState.WaitingForOthersToReadyInSolarSystem)
|| QSBPlayerManager.PlayerList.All(x => x.State == ClientState.AliveInSolarSystem))
{ {
DebugLog.DebugWrite($"All ready!!"); DebugLog.DebugWrite($"All ready!!");
QSBEventManager.FireEvent(EventNames.QSBStartLoop); QSBEventManager.FireEvent(EventNames.QSBStartLoop);
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.InSolarSystem); QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.InSolarSystem);
_blockNextCheck = true;
} }
} }
} }

View File

@ -26,6 +26,7 @@ namespace QSB.DeathSync
private void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool inUniverse) private void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool inUniverse)
{ {
QSBPlayerManager.ShowAllPlayers();
QSBPlayerManager.PlayerList.ForEach(x => x.IsDead = false); QSBPlayerManager.PlayerList.ForEach(x => x.IsDead = false);
_playersPendingRespawn.Clear(); _playersPendingRespawn.Clear();
} }

View File

@ -86,5 +86,6 @@
public static string QSBStartLoop = "QSBStartLoop"; public static string QSBStartLoop = "QSBStartLoop";
public static string QSBServerState = "QSBServerState"; public static string QSBServerState = "QSBServerState";
public static string QSBClientState = "QSBClientState"; public static string QSBClientState = "QSBClientState";
public static string QSBDebugEvent = "QSBDebugEvent";
} }
} }

View File

@ -2,6 +2,11 @@
{ {
public enum EventType public enum EventType
{ {
/*
* MISC.
*/
DebugEvent,
/* /*
* SERVER EVENTS * SERVER EVENTS
*/ */

View File

@ -24,6 +24,7 @@ using QSB.Tools.Events;
using QSB.Tools.ProbeLauncherTool.Events; using QSB.Tools.ProbeLauncherTool.Events;
using QSB.TranslationSync.Events; using QSB.TranslationSync.Events;
using QSB.Utility; using QSB.Utility;
using QSB.Utility.Events;
using System.Collections.Generic; using System.Collections.Generic;
namespace QSB.Events namespace QSB.Events
@ -67,6 +68,7 @@ namespace QSB.Events
new StartLoopEvent(), new StartLoopEvent(),
new ServerStateEvent(), new ServerStateEvent(),
new ClientStateEvent(), new ClientStateEvent(),
new DebugEvent(),
// World Objects // World Objects
new ElevatorEvent(), new ElevatorEvent(),
new GeyserEvent(), new GeyserEvent(),

View File

@ -183,6 +183,9 @@ namespace QSB.Menus
case KickReason.GameVersionNotMatching: case KickReason.GameVersionNotMatching:
text = "Server refused connection as Outer Wilds version does not match."; text = "Server refused connection as Outer Wilds version does not match.";
break; break;
case KickReason.GamePlatformNotMatching:
text = "Server refused connection as Outer Wilds platform does not match. (Steam/Epic)";
break;
case KickReason.None: case KickReason.None:
text = "Kicked from server. No reason given."; text = "Kicked from server. No reason given.";
break; break;

View File

@ -4,6 +4,7 @@ using QSB.OrbSync.WorldObjects;
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using QuantumUNET; using QuantumUNET;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
@ -11,6 +12,8 @@ namespace QSB.OrbSync
{ {
public class OrbManager : WorldObjectManager public class OrbManager : WorldObjectManager
{ {
private List<GameObject> _orbs = new List<GameObject>();
protected override void RebuildWorldObjects(OWScene scene) protected override void RebuildWorldObjects(OWScene scene)
{ {
QSBWorldSync.Init<QSBOrbSlot, NomaiInterfaceSlot>(); QSBWorldSync.Init<QSBOrbSlot, NomaiInterfaceSlot>();
@ -21,14 +24,17 @@ namespace QSB.OrbSync
private void BuildOrbs() private void BuildOrbs()
{ {
QSBWorldSync.OldOrbList.Clear(); QSBWorldSync.OldOrbList.Clear();
NomaiOrbTransformSync.OrbTransformSyncs.Clear();
QSBWorldSync.OldOrbList = Resources.FindObjectsOfTypeAll<NomaiInterfaceOrb>().ToList(); QSBWorldSync.OldOrbList = Resources.FindObjectsOfTypeAll<NomaiInterfaceOrb>().ToList();
if (QSBCore.IsHost) if (QSBCore.IsHost)
{ {
NomaiOrbTransformSync.OrbTransformSyncs.ForEach(x => QNetworkServer.Destroy(x.gameObject)); _orbs.ForEach(x => QNetworkServer.Destroy(x));
NomaiOrbTransformSync.OrbTransformSyncs.Clear(); _orbs.Clear();
foreach (var orb in QSBWorldSync.OldOrbList) foreach (var orb in QSBWorldSync.OldOrbList)
{ {
Instantiate(QSBNetworkManager.Instance.OrbPrefab).SpawnWithServerAuthority(); var newOrb = Instantiate(QSBNetworkManager.Instance.OrbPrefab);
newOrb.SpawnWithServerAuthority();
_orbs.Add(newOrb);
} }
} }

View File

@ -1,4 +1,5 @@
using QSB.Syncs.Unsectored.Transforms; using OWML.Common;
using QSB.Syncs.Unsectored.Transforms;
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using System.Collections.Generic; using System.Collections.Generic;
@ -22,12 +23,25 @@ namespace QSB.OrbSync.TransformSync
protected override void Init() protected override void Init()
{ {
if (!OrbTransformSyncs.Contains(this))
{
OrbTransformSyncs.Add(this);
}
base.Init(); base.Init();
if (AttachedObject == null)
{
DebugLog.ToConsole($"Error - Trying to init orb with null AttachedObject.", MessageType.Error);
return;
}
var originalParent = AttachedObject.GetAttachedOWRigidbody().GetOrigParent(); var originalParent = AttachedObject.GetAttachedOWRigidbody().GetOrigParent();
if (originalParent == Locator.GetRootTransform()) if (originalParent == Locator.GetRootTransform())
{ {
DebugLog.DebugWrite($"{_logName} with AttachedObject {AttachedObject.name} had it's original parent as SolarSystemRoot - Destroying..."); DebugLog.DebugWrite($"{_logName} with AttachedObject {AttachedObject.name} had it's original parent as SolarSystemRoot - Disabling...");
Destroy(this); enabled = false;
OrbTransformSyncs[_index] = null;
} }
SetReferenceTransform(originalParent); SetReferenceTransform(originalParent);
@ -37,19 +51,19 @@ namespace QSB.OrbSync.TransformSync
{ {
if (_index == -1) if (_index == -1)
{ {
DebugLog.ToConsole($"Error - Index cannot be found.", OWML.Common.MessageType.Error); DebugLog.ToConsole($"Error - Index cannot be found. OrbTransformSyncs count : {OrbTransformSyncs.Count}", MessageType.Error);
return null; return null;
} }
if (QSBWorldSync.OldOrbList == null || QSBWorldSync.OldOrbList.Count <= _index) if (QSBWorldSync.OldOrbList == null || QSBWorldSync.OldOrbList.Count <= _index)
{ {
DebugLog.ToConsole($"Error - OldOrbList is null or does not contain index {_index}.", OWML.Common.MessageType.Error); DebugLog.ToConsole($"Error - OldOrbList is null or does not contain index {_index}.", MessageType.Error);
return null; return null;
} }
if (QSBWorldSync.OldOrbList[_index] == null) if (QSBWorldSync.OldOrbList[_index] == null)
{ {
DebugLog.ToConsole($"Error - OldOrbList index {_index} is null.", OWML.Common.MessageType.Error); DebugLog.ToConsole($"Error - OldOrbList index {_index} is null.", MessageType.Error);
return null; return null;
} }

View File

@ -94,7 +94,7 @@ namespace QSB.Patches
} }
catch (Exception ex) catch (Exception ex)
{ {
DebugLog.DebugWrite($"Error while patching {patch.GetType().Name} :\r\n{ex}", MessageType.Error); DebugLog.ToConsole($"Error while patching {patch.GetType().Name} :\r\n{ex}", MessageType.Error);
} }
} }
} }

View File

@ -18,7 +18,8 @@ namespace QSB.Player.Events
AboutId = LocalPlayerId, AboutId = LocalPlayerId,
PlayerName = name, PlayerName = name,
QSBVersion = QSBCore.QSBVersion, QSBVersion = QSBCore.QSBVersion,
GameVersion = QSBCore.GameVersion GameVersion = QSBCore.GameVersion,
Platform = QSBCore.Platform
}; };
public override void OnReceiveRemote(bool server, PlayerJoinMessage message) public override void OnReceiveRemote(bool server, PlayerJoinMessage message)
@ -45,10 +46,19 @@ namespace QSB.Player.Events
return; return;
} }
if (message.Platform != QSBCore.Platform)
{
if (server)
{
DebugLog.ToConsole($"Error - Client {message.PlayerName} connecting with wrong game platform. (Client:{message.Platform}, Server:{QSBCore.Platform})", MessageType.Error);
QSBEventManager.FireEvent(EventNames.QSBPlayerKick, message.AboutId, KickReason.GamePlatformNotMatching);
}
}
var player = QSBPlayerManager.GetPlayer(message.AboutId); var player = QSBPlayerManager.GetPlayer(message.AboutId);
player.Name = message.PlayerName; player.Name = message.PlayerName;
DebugLog.ToAll($"{player.Name} joined!", MessageType.Info); DebugLog.ToAll($"{player.Name} joined!", MessageType.Info);
DebugLog.DebugWrite($"{player.Name} joined. id:{player.PlayerId}, qsbVersion:{message.QSBVersion}, gameVersion:{message.GameVersion}", MessageType.Info); DebugLog.DebugWrite($"{player.Name} joined. id:{player.PlayerId}, qsbVersion:{message.QSBVersion}, gameVersion:{message.GameVersion}, platform:{message.Platform}", MessageType.Info);
} }
public override void OnReceiveLocal(bool server, PlayerJoinMessage message) public override void OnReceiveLocal(bool server, PlayerJoinMessage message)

View File

@ -8,6 +8,7 @@ namespace QSB.Player.Events
public string PlayerName { get; set; } public string PlayerName { get; set; }
public string QSBVersion { get; set; } public string QSBVersion { get; set; }
public string GameVersion { get; set; } public string GameVersion { get; set; }
public GamePlatform Platform { get; set; }
public override void Deserialize(QNetworkReader reader) public override void Deserialize(QNetworkReader reader)
{ {
@ -15,6 +16,7 @@ namespace QSB.Player.Events
PlayerName = reader.ReadString(); PlayerName = reader.ReadString();
QSBVersion = reader.ReadString(); QSBVersion = reader.ReadString();
GameVersion = reader.ReadString(); GameVersion = reader.ReadString();
Platform = (GamePlatform)reader.ReadInt32();
} }
public override void Serialize(QNetworkWriter writer) public override void Serialize(QNetworkWriter writer)
@ -23,6 +25,7 @@ namespace QSB.Player.Events
writer.Write(PlayerName); writer.Write(PlayerName);
writer.Write(QSBVersion); writer.Write(QSBVersion);
writer.Write(GameVersion); writer.Write(GameVersion);
writer.Write((int)Platform);
} }
} }
} }

View File

@ -0,0 +1,9 @@
namespace QSB.Player
{
public enum GamePlatform
{
None,
Steam,
Epic
}
}

View File

@ -4,6 +4,7 @@
{ {
None, None,
QSBVersionNotMatching, QSBVersionNotMatching,
GameVersionNotMatching GameVersionNotMatching,
GamePlatformNotMatching
} }
} }

View File

@ -50,7 +50,7 @@ namespace QSB.Player
} }
else else
{ {
DebugLog.DebugWrite($"Warning - _canvasMarker for {_player.PlayerId} is null!", OWML.Common.MessageType.Warning); DebugLog.ToConsole($"Warning - _canvasMarker for {_player.PlayerId} is null!", OWML.Common.MessageType.Warning);
} }
} }

View File

@ -1,4 +1,5 @@
using QSB.Animation.Player; using OWML.Common;
using QSB.Animation.Player;
using QSB.Animation.Player.Thrusters; using QSB.Animation.Player.Thrusters;
using QSB.CampfireSync.WorldObjects; using QSB.CampfireSync.WorldObjects;
using QSB.ClientServerStateSync; using QSB.ClientServerStateSync;
@ -23,9 +24,49 @@ namespace QSB.Player
public PlayerTransformSync TransformSync { get; set; } public PlayerTransformSync TransformSync { get; set; }
// Body Objects // Body Objects
public OWCamera Camera { get; set; } public OWCamera Camera
{
get
{
if (_camera == null && PlayerStates.IsReady)
{
DebugLog.ToConsole($"Warning - {PlayerId}.Camera is null!", MessageType.Warning);
}
return _camera;
}
set
{
if (value == null)
{
DebugLog.ToConsole($"Warning - Setting {PlayerId}.Camera to null.", MessageType.Warning);
}
_camera = value;
}
}
private OWCamera _camera;
public GameObject CameraBody { get; set; } public GameObject CameraBody { get; set; }
public GameObject Body { get; set; } public GameObject Body
{
get
{
if (_body == null && PlayerStates.IsReady)
{
DebugLog.ToConsole($"Warning - {PlayerId}.Body is null!", MessageType.Warning);
}
return _body;
}
set
{
if (value == null)
{
DebugLog.ToConsole($"Warning - Setting {PlayerId}.Body to null.", MessageType.Warning);
}
_body = value;
}
}
private GameObject _body;
public GameObject RoastingStick { get; set; } public GameObject RoastingStick { get; set; }
public bool Visible { get; set; } = true; public bool Visible { get; set; } = true;
@ -79,7 +120,7 @@ namespace QSB.Player
{ {
if (QSBPlayerManager.LocalPlayer != this) if (QSBPlayerManager.LocalPlayer != this)
{ {
DebugLog.ToConsole($"Warning - Tried to access local-only property LocalProbeLauncher in PlayerInfo for non local player!", OWML.Common.MessageType.Warning); DebugLog.ToConsole($"Warning - Tried to access local-only property LocalProbeLauncher in PlayerInfo for non local player!", MessageType.Warning);
return null; return null;
} }
@ -93,7 +134,7 @@ namespace QSB.Player
{ {
if (QSBPlayerManager.LocalPlayer != this) if (QSBPlayerManager.LocalPlayer != this)
{ {
DebugLog.ToConsole($"Warning - Tried to access local-only property LocalFlashlight in PlayerInfo for non local player!", OWML.Common.MessageType.Warning); DebugLog.ToConsole($"Warning - Tried to access local-only property LocalFlashlight in PlayerInfo for non local player!", MessageType.Warning);
return null; return null;
} }
@ -107,7 +148,7 @@ namespace QSB.Player
{ {
if (QSBPlayerManager.LocalPlayer != this) if (QSBPlayerManager.LocalPlayer != this)
{ {
DebugLog.ToConsole($"Warning - Tried to access local-only property LocalSignalscope in PlayerInfo for non local player!", OWML.Common.MessageType.Warning); DebugLog.ToConsole($"Warning - Tried to access local-only property LocalSignalscope in PlayerInfo for non local player!", MessageType.Warning);
return null; return null;
} }
@ -121,7 +162,7 @@ namespace QSB.Player
{ {
if (QSBPlayerManager.LocalPlayer != this) if (QSBPlayerManager.LocalPlayer != this)
{ {
DebugLog.ToConsole($"Warning - Tried to access local-only property LocalTranslator in PlayerInfo for non local player!", OWML.Common.MessageType.Warning); DebugLog.ToConsole($"Warning - Tried to access local-only property LocalTranslator in PlayerInfo for non local player!", MessageType.Warning);
return null; return null;
} }

View File

@ -120,7 +120,8 @@ namespace QSB.Player
return cameraList; return cameraList;
} }
DebugLog.DebugWrite($"Error - LocalPlayer.Camera is null.", MessageType.Error); DebugLog.ToConsole($"Error - LocalPlayer.Camera is null.", MessageType.Error);
LocalPlayer.Camera = Locator.GetPlayerCamera();
} }
return cameraList; return cameraList;
@ -158,6 +159,12 @@ namespace QSB.Player
public static PlayerInfo GetClosestPlayerToWorldPoint(List<PlayerInfo> playerList, Vector3 worldPoint) public static PlayerInfo GetClosestPlayerToWorldPoint(List<PlayerInfo> playerList, Vector3 worldPoint)
{ {
if (playerList == null)
{
DebugLog.ToConsole($"Error - Cannot get closest player from null player list.", MessageType.Error);
return null;
}
if (playerList.Count == 0) if (playerList.Count == 0)
{ {
DebugLog.ToConsole($"Error - Cannot get closest player from empty player list.", MessageType.Error); DebugLog.ToConsole($"Error - Cannot get closest player from empty player list.", MessageType.Error);

View File

@ -111,7 +111,7 @@ namespace QSB.ProbeSync
break; break;
case ProbeEvent.Invalid: case ProbeEvent.Invalid:
default: default:
DebugLog.DebugWrite($"Warning - Unknown/Invalid probe event.", OWML.Common.MessageType.Warning); DebugLog.ToConsole($"Warning - Unknown/Invalid probe event.", OWML.Common.MessageType.Warning);
break; break;
} }
} }

View File

@ -109,6 +109,7 @@
<Compile Include="Player\Events\PlayerInformationEvent.cs" /> <Compile Include="Player\Events\PlayerInformationEvent.cs" />
<Compile Include="Player\Events\PlayerInformationMessage.cs" /> <Compile Include="Player\Events\PlayerInformationMessage.cs" />
<Compile Include="Player\Events\RequestStateResyncEvent.cs" /> <Compile Include="Player\Events\RequestStateResyncEvent.cs" />
<Compile Include="Player\GamePlatform.cs" />
<Compile Include="Player\Patches\PlayerPatches.cs" /> <Compile Include="Player\Patches\PlayerPatches.cs" />
<Compile Include="Player\PlayerState.cs" /> <Compile Include="Player\PlayerState.cs" />
<Compile Include="PoolSync\CustomNomaiRemoteCameraPlatform.cs" /> <Compile Include="PoolSync\CustomNomaiRemoteCameraPlatform.cs" />
@ -275,6 +276,8 @@
<Compile Include="Utility\CustomCallbacks.cs" /> <Compile Include="Utility\CustomCallbacks.cs" />
<Compile Include="Utility\DebugBoxManager.cs" /> <Compile Include="Utility\DebugBoxManager.cs" />
<Compile Include="Utility\DebugGUI.cs" /> <Compile Include="Utility\DebugGUI.cs" />
<Compile Include="Utility\Events\DebugEvent.cs" />
<Compile Include="Utility\Events\DebugEventEnum.cs" />
<Compile Include="Utility\ZOverride.cs" /> <Compile Include="Utility\ZOverride.cs" />
<Compile Include="Utility\Extensions.cs" /> <Compile Include="Utility\Extensions.cs" />
<Compile Include="Utility\GlobalMessenger4Args.cs" /> <Compile Include="Utility\GlobalMessenger4Args.cs" />

View File

@ -26,6 +26,7 @@ using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using QuantumUNET; using QuantumUNET;
using QuantumUNET.Components; using QuantumUNET.Components;
using System.Linq;
using UnityEngine; using UnityEngine;
/* /*
@ -65,6 +66,9 @@ namespace QSB
public static bool IsInMultiplayer => QNetworkManager.singleton.isNetworkActive; public static bool IsInMultiplayer => QNetworkManager.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")
? GamePlatform.Epic
: GamePlatform.Steam;
public static IMenuAPI MenuApi { get; private set; } public static IMenuAPI MenuApi { get; private set; }
public void Awake() public void Awake()
@ -127,6 +131,10 @@ namespace QSB
if (type == QSBPatchTypes.OnClientConnect) if (type == QSBPatchTypes.OnClientConnect)
{ {
Application.runInBackground = true; Application.runInBackground = true;
if (Locator.GetSceneMenuManager() != null && Locator.GetSceneMenuManager().pauseMenu.IsOpen())
{
Locator.GetSceneMenuManager().pauseMenu._pauseMenu.EnableMenu(false);
}
} }
} }

View File

@ -87,11 +87,19 @@ namespace QSB
private string GetPlayerName() private string GetPlayerName()
{ {
var profileManager = StandaloneProfileManager.SharedInstance; try
profileManager.Initialize(); {
var profile = profileManager.GetValue<StandaloneProfileManager.ProfileData>("_currentProfile"); var profileManager = StandaloneProfileManager.SharedInstance;
var profileName = profile.profileName; profileManager.Initialize();
return profileName; var profile = profileManager._currentProfile;
var profileName = profile.profileName;
return profileName;
}
catch (Exception ex)
{
DebugLog.ToConsole($"Error - Exception when getting player name : {ex}", MessageType.Error);
return "Player";
}
} }
private void SetupNetworkId(GameObject go, int assetId) private void SetupNetworkId(GameObject go, int assetId)
@ -234,6 +242,11 @@ namespace QSB
foreach (var item in NomaiOrbTransformSync.OrbTransformSyncs) foreach (var item in NomaiOrbTransformSync.OrbTransformSyncs)
{ {
if (item is null)
{
continue;
}
var identity = item.GetComponent<QNetworkIdentity>(); var identity = item.GetComponent<QNetworkIdentity>();
if (identity.ClientAuthorityOwner == connection) if (identity.ClientAuthorityOwner == connection)
{ {

View File

@ -295,7 +295,7 @@ namespace QSB.QuantumSync.Patches
var owner = allMultiStates.FirstOrDefault(x => x.QuantumStates.Contains(stateObject)); var owner = allMultiStates.FirstOrDefault(x => x.QuantumStates.Contains(stateObject));
if (owner == default) if (owner == default)
{ {
DebugLog.DebugWrite($"Error - Could not find QSBMultiStateQuantumObject for state {__instance.name}", MessageType.Error); DebugLog.ToConsole($"Error - Could not find QSBMultiStateQuantumObject for state {__instance.name}", MessageType.Error);
return; return;
} }

View File

@ -64,29 +64,32 @@ namespace QSB.QuantumSync.WorldObjects
shape.OnShapeDeactivated += (Shape s) shape.OnShapeDeactivated += (Shape s)
=> QSBCore.UnityEvents.FireOnNextUpdate(() => OnDisable(s)); => QSBCore.UnityEvents.FireOnNextUpdate(() => OnDisable(s));
if (shape is BoxShape boxShape) if (QSBCore.DebugMode)
{ {
var newCube = UnityEngine.Object.Instantiate(cube); if (shape is BoxShape boxShape)
newCube.transform.parent = shape.transform; {
newCube.transform.localPosition = Vector3.zero; var newCube = UnityEngine.Object.Instantiate(cube);
newCube.transform.localRotation = Quaternion.Euler(0, 0, 0); newCube.transform.parent = shape.transform;
newCube.transform.localScale = boxShape.size; newCube.transform.localPosition = Vector3.zero;
} newCube.transform.localRotation = Quaternion.Euler(0, 0, 0);
else if (shape is SphereShape sphereShape) newCube.transform.localScale = boxShape.size;
{ }
var newSphere = UnityEngine.Object.Instantiate(sphere); else if (shape is SphereShape sphereShape)
newSphere.transform.parent = shape.transform; {
newSphere.transform.localPosition = Vector3.zero; var newSphere = UnityEngine.Object.Instantiate(sphere);
newSphere.transform.localRotation = Quaternion.Euler(0, 0, 0); newSphere.transform.parent = shape.transform;
newSphere.transform.localScale = Vector3.one * (sphereShape.radius * 2); newSphere.transform.localPosition = Vector3.zero;
} newSphere.transform.localRotation = Quaternion.Euler(0, 0, 0);
else if (shape is CapsuleShape capsuleShape) newSphere.transform.localScale = Vector3.one * (sphereShape.radius * 2);
{ }
var newCapsule = Object.Instantiate(capsule); else if (shape is CapsuleShape capsuleShape)
newCapsule.transform.parent = shape.transform; {
newCapsule.transform.localPosition = Vector3.zero; var newCapsule = Object.Instantiate(capsule);
newCapsule.transform.localRotation = Quaternion.Euler(0, 0, 0); newCapsule.transform.parent = shape.transform;
newCapsule.transform.localScale = new Vector3(capsuleShape.radius * 2, capsuleShape.height, capsuleShape.radius * 2); 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);
}
} }
} }

View File

@ -131,7 +131,18 @@ namespace QSB.SectorSync
return null; return null;
} }
var numSectorsCurrentlyIn = SectorList.Count(x => x.ShouldSyncTo(_targetType)); bool ShouldSyncTo(QSBSector sector, TargetType type)
{
if (sector == null)
{
DebugLog.ToConsole($"Warning - Tried to check if we should sync to null sector!", MessageType.Warning);
return false;
}
return sector.ShouldSyncTo(type);
}
var numSectorsCurrentlyIn = SectorList.Count(x => ShouldSyncTo(x, _targetType));
var listToCheck = numSectorsCurrentlyIn == 0 var listToCheck = numSectorsCurrentlyIn == 0
? QSBWorldSync.GetWorldObjects<QSBSector>().Where(x => !x.IsFakeSector && x.Type != Sector.Name.Unnamed) ? QSBWorldSync.GetWorldObjects<QSBSector>().Where(x => !x.IsFakeSector && x.Type != Sector.Name.Unnamed)

View File

@ -2,6 +2,7 @@
using OWML.Utils; using OWML.Utils;
using QSB.Utility; using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using System;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
@ -10,7 +11,19 @@ namespace QSB.SectorSync.WorldObjects
public class QSBSector : WorldObject<Sector> public class QSBSector : WorldObject<Sector>
{ {
public Sector.Name Type => AttachedObject.GetName(); public Sector.Name Type => AttachedObject.GetName();
public Transform Transform => AttachedObject.transform; public Transform Transform
{
get
{
if (AttachedObject == null)
{
DebugLog.ToConsole($"Error - Tried to get Transform from QSBSector {ObjectId} with null AttachedObject!\r\n{Environment.StackTrace}", MessageType.Error);
return null;
}
return AttachedObject.transform;
}
}
public Vector3 Position => Transform.position; public Vector3 Position => Transform.position;
public bool IsFakeSector => AttachedObject.GetType() == typeof(FakeSector); public bool IsFakeSector => AttachedObject.GetType() == typeof(FakeSector);

View File

@ -58,7 +58,7 @@ namespace QSB.Syncs
{ {
if (_referenceTransform == null) if (_referenceTransform == null)
{ {
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name} \r\n{Environment.StackTrace}", MessageType.Error); DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error);
return; return;
} }
@ -73,7 +73,7 @@ namespace QSB.Syncs
{ {
if (_referenceTransform == null) if (_referenceTransform == null)
{ {
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name} \r\n{Environment.StackTrace}", MessageType.Error); DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error);
return; return;
} }
@ -99,7 +99,7 @@ namespace QSB.Syncs
{ {
if (_referenceTransform == null) if (_referenceTransform == null)
{ {
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name} \r\n{Environment.StackTrace}", MessageType.Error); DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error);
return Vector3.zero; return Vector3.zero;
} }
@ -113,7 +113,7 @@ namespace QSB.Syncs
{ {
if (_referenceTransform == null) if (_referenceTransform == null)
{ {
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name} \r\n{Environment.StackTrace}", MessageType.Error); DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error);
return Quaternion.identity; return Quaternion.identity;
} }

View File

@ -34,6 +34,12 @@ namespace QSB.Syncs.Sectored
} }
} }
protected override void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool isInUniverse)
{
base.OnSceneLoaded(oldScene, newScene, isInUniverse);
SetReferenceSector(null);
}
protected override void Init() protected override void Init()
{ {
base.Init(); base.Init();
@ -67,6 +73,12 @@ namespace QSB.Syncs.Sectored
{ {
if (_sectorIdWaitingSlot == int.MinValue) if (_sectorIdWaitingSlot == int.MinValue)
{ {
if (ReferenceSector != null && ReferenceSector.Transform != ReferenceTransform)
{
DebugLog.ToConsole($"Warning - {_logName} : ReferenceSector.Transform was different to ReferenceTransform. Correcting...", OWML.Common.MessageType.Warning);
SetReferenceTransform(ReferenceSector.Transform);
}
base.Update(); base.Update();
return; return;
} }

View File

@ -86,7 +86,7 @@ namespace QSB.Syncs
public Component AttachedObject { get; set; } public Component AttachedObject { get; set; }
public Transform ReferenceTransform { get; set; } public Transform ReferenceTransform { get; set; }
protected string _logName => $"{PlayerId}.{GetType().Name}"; protected string _logName => $"{PlayerId}.{NetId.Value}:{GetType().Name}";
protected virtual float DistanceLeeway { get; } = 5f; protected virtual float DistanceLeeway { get; } = 5f;
private float _previousDistance; private float _previousDistance;
protected const float SmoothTime = 0.1f; protected const float SmoothTime = 0.1f;
@ -223,6 +223,14 @@ namespace QSB.Syncs
return; return;
} }
if (ShouldReparentAttachedObject
&& !HasAuthority
&& AttachedObject.transform.parent != ReferenceTransform)
{
DebugLog.ToConsole($"Warning : {_logName} : AttachedObject's parent is different to ReferenceTransform. Correcting...", MessageType.Warning);
ReparentAttachedObject(ReferenceTransform);
}
UpdateTransform(); UpdateTransform();
base.Update(); base.Update();

View File

@ -255,6 +255,16 @@ namespace QSB.TimeSync
} }
} }
if (serverState == ServerState.WaitingForAllPlayersToDie && clientState == ClientState.WaitingForOthersToReadyInSolarSystem)
{
if (CurrentState == State.Pausing && (PauseReason)CurrentReason == PauseReason.WaitingForAllPlayersToBeReady)
{
//?
DebugLog.ToConsole($"Warning - Server waiting for players to die, but players waiting for ready signal! Assume players correct.", MessageType.Warning);
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.WaitingForAllPlayersToReady);
}
}
if (CurrentState != State.Loaded) if (CurrentState != State.Loaded)
{ {
return; return;
@ -293,7 +303,7 @@ namespace QSB.TimeSync
if (CurrentState != State.Loaded && CurrentState != State.NotLoaded && CurrentReason == null) if (CurrentState != State.Loaded && CurrentState != State.NotLoaded && CurrentReason == null)
{ {
DebugLog.DebugWrite($"Warning - CurrentReason is null.", MessageType.Warning); DebugLog.ToConsole($"Warning - CurrentReason is null.", MessageType.Warning);
} }
// Checks to pause/fastforward // Checks to pause/fastforward

View File

@ -1,6 +1,9 @@
using OWML.Utils; using OWML.Utils;
using QSB.Events;
using QSB.ShipSync; using QSB.ShipSync;
using QSB.Utility.Events;
using UnityEngine; using UnityEngine;
using UnityEngine.InputSystem;
namespace QSB.Utility namespace QSB.Utility
{ {
@ -29,34 +32,32 @@ namespace QSB.Utility
public void Update() public void Update()
{ {
return;
if (!QSBCore.DebugMode) if (!QSBCore.DebugMode)
{ {
return; return;
} }
if (Input.GetKeyDown(KeyCode.Keypad5)) if (Keyboard.current[Key.Numpad4].wasPressedThisFrame)
{
Locator.GetDeathManager().KillPlayer(DeathType.Supernova);
}
if (Input.GetKeyDown(KeyCode.Keypad4))
{ {
DamageShipElectricalSystem(); DamageShipElectricalSystem();
} }
if (Input.GetKeyDown(KeyCode.Keypad7)) if (Keyboard.current[Key.Numpad5].wasPressedThisFrame)
{
QSBEventManager.FireEvent(EventNames.QSBDebugEvent, DebugEventEnum.TriggerSupernova);
}
if (Keyboard.current[Key.Numpad7].wasPressedThisFrame)
{ {
GoToVessel(); GoToVessel();
} }
if (Input.GetKeyDown(KeyCode.Keypad8)) if (Keyboard.current[Key.Numpad8].wasPressedThisFrame)
{ {
InsertWarpCore(); InsertWarpCore();
} }
if (Input.GetKeyDown(KeyCode.Keypad9)) if (Keyboard.current[Key.Numpad9].wasPressedThisFrame)
{ {
LoadManager.LoadSceneAsync(OWScene.EyeOfTheUniverse, true, LoadManager.FadeType.ToWhite); LoadManager.LoadSceneAsync(OWScene.EyeOfTheUniverse, true, LoadManager.FadeType.ToWhite);
} }

View File

@ -1,4 +1,6 @@
using QSB.ClientServerStateSync; using OWML.Utils;
using QSB.ClientServerStateSync;
using QSB.OrbSync.TransformSync;
using QSB.Player; using QSB.Player;
using QSB.ProbeSync.TransformSync; using QSB.ProbeSync.TransformSync;
using QSB.Syncs; using QSB.Syncs;
@ -63,6 +65,8 @@ namespace QSB.Utility
} }
var offset2 = 10f; var offset2 = 10f;
GUI.Label(new Rect(420, offset2, 200f, 20f), $"OrbList count : {NomaiOrbTransformSync.OrbTransformSyncs.Count}", guiStyle);
offset2 += _debugLineSpacing;
GUI.Label(new Rect(420, offset2, 200f, 20f), $"Player data :", guiStyle); GUI.Label(new Rect(420, offset2, 200f, 20f), $"Player data :", guiStyle);
offset2 += _debugLineSpacing; offset2 += _debugLineSpacing;
foreach (var player in QSBPlayerManager.PlayerList) foreach (var player in QSBPlayerManager.PlayerList)
@ -73,16 +77,30 @@ namespace QSB.Utility
offset2 += _debugLineSpacing; offset2 += _debugLineSpacing;
GUI.Label(new Rect(420, offset2, 400f, 20f), $"Dead : {player.IsDead}", guiStyle); GUI.Label(new Rect(420, offset2, 400f, 20f), $"Dead : {player.IsDead}", guiStyle);
offset2 += _debugLineSpacing; offset2 += _debugLineSpacing;
GUI.Label(new Rect(420, offset2, 400f, 20f), $"Visible : {player.Visible}", guiStyle);
offset2 += _debugLineSpacing;
if (player.PlayerStates.IsReady && QSBCore.WorldObjectsReady) if (player.PlayerStates.IsReady && QSBCore.WorldObjectsReady)
{ {
var networkTransform = player.TransformSync; var networkTransform = player.TransformSync;
var sector = networkTransform.ReferenceSector; var referenceSector = networkTransform.ReferenceSector;
var referenceTransform = networkTransform.ReferenceTransform;
var parent = networkTransform.AttachedObject?.transform.parent;
var intermediary = networkTransform.GetValue<IntermediaryTransform>("_intermediaryTransform");
var interTransform = intermediary.GetReferenceTransform();
GUI.Label(new Rect(420, offset2, 400f, 20f), $" - L.Pos : {networkTransform.transform.localPosition}", guiStyle); GUI.Label(new Rect(420, offset2, 400f, 20f), $" - L.Pos : {networkTransform.transform.localPosition}", guiStyle);
offset2 += _debugLineSpacing; offset2 += _debugLineSpacing;
GUI.Label(new Rect(420, offset2, 400f, 20f), $" - Sector : {(sector == null ? "NULL" : sector.Name)}", guiStyle); GUI.Label(new Rect(420, offset2, 400f, 20f), $" - Ref. Sector : {(referenceSector == null ? "NULL" : referenceSector.Name)}", guiStyle);
offset2 += _debugLineSpacing; offset2 += _debugLineSpacing;
GUI.Label(new Rect(420, offset2, 400f, 20f), $" - Ref. Transform : {(referenceTransform == null ? "NULL" : referenceTransform.name)}", guiStyle);
offset2 += _debugLineSpacing;
GUI.Label(new Rect(420, offset2, 400f, 20f), $" - Inter. Ref. Transform : {(interTransform == null ? "NULL" : interTransform.name)}", guiStyle);
offset2 += _debugLineSpacing;
GUI.Label(new Rect(420, offset2, 400f, 20f), $" - Parent : {(parent == null ? "NULL" : parent.name)}", guiStyle);
offset2 += _debugLineSpacing;
/*
var probeSync = SyncBase.GetPlayers<PlayerProbeSync>(player); var probeSync = SyncBase.GetPlayers<PlayerProbeSync>(player);
if (probeSync != default) if (probeSync != default)
{ {
@ -90,6 +108,7 @@ namespace QSB.Utility
GUI.Label(new Rect(420, offset2, 400f, 20f), $" - Probe Sector : {(probeSector == null ? "NULL" : probeSector.Name)}", guiStyle); GUI.Label(new Rect(420, offset2, 400f, 20f), $" - Probe Sector : {(probeSector == null ? "NULL" : probeSector.Name)}", guiStyle);
offset2 += _debugLineSpacing; offset2 += _debugLineSpacing;
} }
*/
} }
} }
} }

View File

@ -0,0 +1,36 @@
using QSB.Events;
using QSB.Messaging;
namespace QSB.Utility.Events
{
public class DebugEvent : QSBEvent<EnumMessage<DebugEventEnum>>
{
public override EventType Type => EventType.DebugEvent;
public override void SetupListener() => GlobalMessenger<DebugEventEnum>.AddListener(EventNames.QSBDebugEvent, Handler);
public override void CloseListener() => GlobalMessenger<DebugEventEnum>.RemoveListener(EventNames.QSBDebugEvent, Handler);
private void Handler(DebugEventEnum type) => SendEvent(CreateMessage(type));
private EnumMessage<DebugEventEnum> CreateMessage(DebugEventEnum type) => new EnumMessage<DebugEventEnum>
{
AboutId = LocalPlayerId,
EnumValue = type
};
public override void OnReceiveLocal(bool isHost, EnumMessage<DebugEventEnum> message)
{
OnReceiveRemote(isHost, message);
}
public override void OnReceiveRemote(bool isHost, EnumMessage<DebugEventEnum> message)
{
switch (message.EnumValue)
{
case DebugEventEnum.TriggerSupernova:
TimeLoop.SetSecondsRemaining(0f);
break;
}
}
}
}

View File

@ -0,0 +1,7 @@
namespace QSB.Utility.Events
{
public enum DebugEventEnum
{
TriggerSupernova
}
}

View File

@ -90,17 +90,29 @@ namespace QSB.WorldSync
public static void RemoveWorldObjects<TWorldObject>() public static void RemoveWorldObjects<TWorldObject>()
{ {
if (WorldObjects == null || WorldObjects.Count == 0)
{
DebugLog.ToConsole($"Warning - Trying to remove WorldObjects of type {typeof(TWorldObject).Name}, but there are no WorldObjects!");
}
var itemsToRemove = WorldObjects.Where(x => x is TWorldObject); var itemsToRemove = WorldObjects.Where(x => x is TWorldObject);
foreach (var item in itemsToRemove) foreach (var item in itemsToRemove)
{ {
WorldObjectsToUnityObjects.Remove(item.ReturnObject()); if (item is null)
{
DebugLog.ToConsole($"Error - Trying to remove a null WorldObject of type {typeof(TWorldObject).Name}.", MessageType.Error);
continue;
}
try try
{ {
WorldObjectsToUnityObjects.Remove(item.ReturnObject());
item.OnRemoval(); item.OnRemoval();
} }
catch (Exception e) catch (Exception e)
{ {
DebugLog.ToConsole($"Error - Exception in OnRemoval() for {item.GetType()}. Message : {e.InnerException.Message}, Stack trace : {e.InnerException.StackTrace}", MessageType.Error); DebugLog.ToConsole($"Error - Exception in OnRemoval() for {item.GetType()}. Message : {e.Message}, Stack trace : {e.StackTrace}", MessageType.Error);
} }
} }

View File

@ -3,7 +3,7 @@
"settings": { "settings": {
"defaultServerIP": "localhost", "defaultServerIP": "localhost",
"port": 7777, "port": 7777,
"debugMode": true, "debugMode": false,
"showLinesInDebug": false "showLinesInDebug": false
} }
} }

View File

@ -9,6 +9,6 @@
}, },
"uniqueName": "Raicuparta.QuantumSpaceBuddies", "uniqueName": "Raicuparta.QuantumSpaceBuddies",
"version": "0.12.0-pr4", "version": "0.12.0-pr4",
"owmlVersion": "2.0.0", "owmlVersion": "2.1.0",
"dependencies": [ "_nebula.MenuFramework" ] "dependencies": [ "_nebula.MenuFramework" ]
} }

View File

@ -73,5 +73,5 @@ Material:
- _UVSec: 0 - _UVSec: 0
- _ZWrite: 0 - _ZWrite: 0
m_Colors: m_Colors:
- _Color: {r: 1, g: 0.51526886, b: 0, a: 0.09803922} - _Color: {r: 1, g: 0.51526886, b: 0, a: 0.05882353}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}