Merge pull request #356 from misternebula/more-fixes

Remove player state, add launch code event, not-ready-player checks
This commit is contained in:
_nebula 2021-11-21 15:46:40 +00:00 committed by GitHub
commit a4ed259d5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 373 additions and 163 deletions

View File

@ -80,7 +80,6 @@ namespace QSB.Animation.NPC.Patches
case NomaiConversationManager.State.WatchingSky: case NomaiConversationManager.State.WatchingSky:
if (__instance._playerInWatchVolume) if (__instance._playerInWatchVolume)
{ {
DebugLog.DebugWrite($"{__instance._state} => WACHING PLAYER");
__instance._state = NomaiConversationManager.State.WatchingPlayer; __instance._state = NomaiConversationManager.State.WatchingPlayer;
__instance._solanumAnimController.StartWatchingPlayer(); __instance._solanumAnimController.StartWatchingPlayer();
} }
@ -92,7 +91,6 @@ namespace QSB.Animation.NPC.Patches
// player left watch zone // player left watch zone
if (!__instance._playerInWatchVolume) if (!__instance._playerInWatchVolume)
{ {
DebugLog.DebugWrite($"{__instance._state} => WATCHING SKY");
__instance._state = NomaiConversationManager.State.WatchingSky; __instance._state = NomaiConversationManager.State.WatchingSky;
__instance._solanumAnimController.StopWatchingPlayer(); __instance._solanumAnimController.StopWatchingPlayer();
} }
@ -104,7 +102,6 @@ namespace QSB.Animation.NPC.Patches
__instance._stoneCreationTimer -= Time.deltaTime; __instance._stoneCreationTimer -= Time.deltaTime;
if (__instance._stoneCreationTimer <= 0f) if (__instance._stoneCreationTimer <= 0f)
{ {
DebugLog.DebugWrite($"{__instance._state} => CREATING STONES");
__instance._state = NomaiConversationManager.State.CreatingStones; __instance._state = NomaiConversationManager.State.CreatingStones;
__instance._solanumAnimController.PlayCreateWordStones(); __instance._solanumAnimController.PlayCreateWordStones();
} }
@ -123,7 +120,6 @@ namespace QSB.Animation.NPC.Patches
// raise cairns // raise cairns
else if (__instance._solanumAnimController.IsPlayerLooking()) else if (__instance._solanumAnimController.IsPlayerLooking())
{ {
DebugLog.DebugWrite($"{__instance._state} => RAISING CAIRNS");
__instance._state = NomaiConversationManager.State.RaisingCairns; __instance._state = NomaiConversationManager.State.RaisingCairns;
__instance._solanumAnimController.PlayRaiseCairns(); __instance._solanumAnimController.PlayRaiseCairns();
__instance._cairnAnimator.SetTrigger("Raise"); __instance._cairnAnimator.SetTrigger("Raise");
@ -132,7 +128,6 @@ namespace QSB.Animation.NPC.Patches
} }
else if (__instance._activeResponseText == null && __instance._hasValidSocketedStonePair) else if (__instance._activeResponseText == null && __instance._hasValidSocketedStonePair)
{ {
DebugLog.DebugWrite($"{__instance._state} => WRITING RESPONSE");
__instance._activeResponseText = __instance._pendingResponseText; __instance._activeResponseText = __instance._pendingResponseText;
__instance._pendingResponseText = null; __instance._pendingResponseText = null;
__instance._state = NomaiConversationManager.State.WritingResponse; __instance._state = NomaiConversationManager.State.WritingResponse;
@ -140,7 +135,6 @@ namespace QSB.Animation.NPC.Patches
} }
else if (__instance._activeResponseText != null && (!__instance._hasValidSocketedStonePair || __instance._pendingResponseText != null)) else if (__instance._activeResponseText != null && (!__instance._hasValidSocketedStonePair || __instance._pendingResponseText != null))
{ {
DebugLog.DebugWrite($"{__instance._state} => ERASING RESPONSE");
__instance._state = NomaiConversationManager.State.ErasingResponse; __instance._state = NomaiConversationManager.State.ErasingResponse;
__instance._solanumAnimController.StartWritingMessage(); __instance._solanumAnimController.StartWritingMessage();
} }
@ -177,7 +171,6 @@ namespace QSB.Animation.NPC.Patches
case NomaiConversationManager.State.CreatingStones: case NomaiConversationManager.State.CreatingStones:
if (!__instance._solanumAnimController.isPerformingAction) if (!__instance._solanumAnimController.isPerformingAction)
{ {
DebugLog.DebugWrite($"{__instance._state} => WATCHING PLAYER");
__instance._state = NomaiConversationManager.State.WatchingPlayer; __instance._state = NomaiConversationManager.State.WatchingPlayer;
__instance._conversationStonesCreated = true; __instance._conversationStonesCreated = true;
} }
@ -186,7 +179,6 @@ namespace QSB.Animation.NPC.Patches
case NomaiConversationManager.State.RaisingCairns: case NomaiConversationManager.State.RaisingCairns:
if (!__instance._solanumAnimController.isPerformingAction) if (!__instance._solanumAnimController.isPerformingAction)
{ {
DebugLog.DebugWrite($"{__instance._state} => WATCHING PLAYER");
__instance._state = NomaiConversationManager.State.WatchingPlayer; __instance._state = NomaiConversationManager.State.WatchingPlayer;
__instance._cairnRaised = true; __instance._cairnRaised = true;
__instance._stoneSocketATrigger.SetActivation(true); __instance._stoneSocketATrigger.SetActivation(true);
@ -200,13 +192,11 @@ namespace QSB.Animation.NPC.Patches
__instance._activeResponseText = null; __instance._activeResponseText = null;
if (__instance._pendingResponseText == null) if (__instance._pendingResponseText == null)
{ {
DebugLog.DebugWrite($"{__instance._state} => WATCHING PLAYER");
__instance._state = NomaiConversationManager.State.WatchingPlayer; __instance._state = NomaiConversationManager.State.WatchingPlayer;
__instance._solanumAnimController.StopWritingMessage(false); __instance._solanumAnimController.StopWritingMessage(false);
} }
else else
{ {
DebugLog.DebugWrite($"{__instance._state} => WATCHING WRITING RESPONSE");
__instance._activeResponseText = __instance._pendingResponseText; __instance._activeResponseText = __instance._pendingResponseText;
__instance._pendingResponseText = null; __instance._pendingResponseText = null;
__instance._state = NomaiConversationManager.State.WritingResponse; __instance._state = NomaiConversationManager.State.WritingResponse;
@ -218,7 +208,6 @@ namespace QSB.Animation.NPC.Patches
case NomaiConversationManager.State.WritingResponse: case NomaiConversationManager.State.WritingResponse:
if (!__instance._solanumAnimController.isStartingWrite && !__instance._activeResponseText.IsAnimationPlaying()) if (!__instance._solanumAnimController.isStartingWrite && !__instance._activeResponseText.IsAnimationPlaying())
{ {
DebugLog.DebugWrite($"{__instance._state} => WATCHING PLAYER");
__instance._state = NomaiConversationManager.State.WatchingPlayer; __instance._state = NomaiConversationManager.State.WatchingPlayer;
__instance._solanumAnimController.StopWritingMessage(true); __instance._solanumAnimController.StopWritingMessage(true);
} }

View File

@ -155,7 +155,7 @@ namespace QSB.Animation.Player
public void SetSuitState(bool state) public void SetSuitState(bool state)
{ {
if (!Player.PlayerStates.IsReady) if (!Player.IsReady)
{ {
return; return;
} }

View File

@ -22,7 +22,7 @@ namespace QSB.Animation.Player.Events
public override void OnReceiveRemote(bool server, EnumMessage<AnimationType> message) public override void OnReceiveRemote(bool server, EnumMessage<AnimationType> message)
{ {
if (!QSBCore.WorldObjectsReady || !QSBPlayerManager.GetPlayer(message.AboutId).PlayerStates.IsReady) if (!QSBCore.WorldObjectsReady || !QSBPlayerManager.GetPlayer(message.AboutId).IsReady)
{ {
return; return;
} }

View File

@ -32,9 +32,9 @@ namespace QSB.Animation.Player.Events
public override void OnReceiveRemote(bool server, ToggleMessage message) public override void OnReceiveRemote(bool server, ToggleMessage message)
{ {
var player = QSBPlayerManager.GetPlayer(message.AboutId); var player = QSBPlayerManager.GetPlayer(message.AboutId);
player.PlayerStates.SuitedUp = message.ToggleValue; player.SuitedUp = message.ToggleValue;
if (!QSBCore.WorldObjectsReady || !player.PlayerStates.IsReady) if (!QSBCore.WorldObjectsReady || !player.IsReady)
{ {
return; return;
} }
@ -46,7 +46,7 @@ namespace QSB.Animation.Player.Events
public override void OnReceiveLocal(bool server, ToggleMessage message) public override void OnReceiveLocal(bool server, ToggleMessage message)
{ {
QSBPlayerManager.LocalPlayer.PlayerStates.SuitedUp = message.ToggleValue; QSBPlayerManager.LocalPlayer.SuitedUp = message.ToggleValue;
var animator = QSBPlayerManager.LocalPlayer.AnimationSync; var animator = QSBPlayerManager.LocalPlayer.AnimationSync;
var type = message.ToggleValue ? AnimationType.PlayerSuited : AnimationType.PlayerUnsuited; var type = message.ToggleValue ? AnimationType.PlayerSuited : AnimationType.PlayerUnsuited;
animator.CurrentType = type; animator.CurrentType = type;

View File

@ -29,7 +29,6 @@ namespace QSB.ClientServerStateSync
return; return;
} }
DebugLog.DebugWrite($"CHANGE CLIENT STATE FROM {QSBPlayerManager.LocalPlayer.State} to {newState}");
QSBPlayerManager.LocalPlayer.State = newState; QSBPlayerManager.LocalPlayer.State = newState;
OnChangeState?.Invoke(newState); OnChangeState?.Invoke(newState);
} }
@ -46,29 +45,24 @@ namespace QSB.ClientServerStateSync
switch (newScene) switch (newScene)
{ {
case OWScene.TitleScreen: case OWScene.TitleScreen:
DebugLog.DebugWrite($"SERVER LOAD TITLESCREEN");
newState = ClientState.InTitleScreen; newState = ClientState.InTitleScreen;
break; break;
case OWScene.Credits_Fast: case OWScene.Credits_Fast:
DebugLog.DebugWrite($"SERVER LOAD SHORT CREDITS");
newState = ClientState.WatchingShortCredits; newState = ClientState.WatchingShortCredits;
break; break;
case OWScene.Credits_Final: case OWScene.Credits_Final:
case OWScene.PostCreditsScene: case OWScene.PostCreditsScene:
DebugLog.DebugWrite($"SERVER LOAD LONG CREDITS");
newState = ClientState.WatchingLongCredits; newState = ClientState.WatchingLongCredits;
break; break;
case OWScene.SolarSystem: case OWScene.SolarSystem:
if (oldScene == OWScene.SolarSystem) if (oldScene == OWScene.SolarSystem)
{ {
// reloading scene // reloading scene
DebugLog.DebugWrite($"SERVER RELOAD SOLARSYSTEM");
newState = ClientState.WaitingForOthersToReadyInSolarSystem; newState = ClientState.WaitingForOthersToReadyInSolarSystem;
} }
else else
{ {
// loading in from title screen // loading in from title screen
DebugLog.DebugWrite($"SERVER LOAD SOLARSYSTEM");
newState = ClientState.AliveInSolarSystem; newState = ClientState.AliveInSolarSystem;
} }
break; break;
@ -85,22 +79,18 @@ namespace QSB.ClientServerStateSync
switch (newScene) switch (newScene)
{ {
case OWScene.TitleScreen: case OWScene.TitleScreen:
DebugLog.DebugWrite($"CLIENT LOAD TITLESCREEN");
newState = ClientState.InTitleScreen; newState = ClientState.InTitleScreen;
break; break;
case OWScene.Credits_Fast: case OWScene.Credits_Fast:
DebugLog.DebugWrite($"CLIENT LOAD SHORT CREDITS");
newState = ClientState.WatchingShortCredits; newState = ClientState.WatchingShortCredits;
break; break;
case OWScene.Credits_Final: case OWScene.Credits_Final:
case OWScene.PostCreditsScene: case OWScene.PostCreditsScene:
DebugLog.DebugWrite($"CLIENT LOAD LONG CREDITS");
newState = ClientState.WatchingLongCredits; newState = ClientState.WatchingLongCredits;
break; break;
case OWScene.SolarSystem: case OWScene.SolarSystem:
if (serverState == ServerState.WaitingForAllPlayersToDie) if (serverState == ServerState.WaitingForAllPlayersToDie)
{ {
DebugLog.DebugWrite($"SEVER IN DEATH PHASE - WAIT");
newState = ClientState.WaitingForOthersToReadyInSolarSystem; newState = ClientState.WaitingForOthersToReadyInSolarSystem;
break; break;
} }
@ -108,13 +98,11 @@ namespace QSB.ClientServerStateSync
if (oldScene == OWScene.SolarSystem) if (oldScene == OWScene.SolarSystem)
{ {
// reloading scene // reloading scene
DebugLog.DebugWrite($"CLIENT RELOAD SOLARSYSTEM");
newState = ClientState.WaitingForOthersToReadyInSolarSystem; newState = ClientState.WaitingForOthersToReadyInSolarSystem;
} }
else else
{ {
// loading in from title screen // loading in from title screen
DebugLog.DebugWrite($"CLIENT LOAD SOLARSYSTEM");
if (serverState == ServerState.WaitingForAllPlayersToReady) if (serverState == ServerState.WaitingForAllPlayersToReady)
{ {
newState = ClientState.WaitingForOthersToReadyInSolarSystem; newState = ClientState.WaitingForOthersToReadyInSolarSystem;
@ -171,32 +159,17 @@ namespace QSB.ClientServerStateSync
private ClientState ForceGetCurrentState() private ClientState ForceGetCurrentState()
{ {
DebugLog.DebugWrite($"ForceGetCurrentState");
var currentScene = LoadManager.GetCurrentScene(); var currentScene = LoadManager.GetCurrentScene();
var lastScene = LoadManager.GetPreviousScene();
switch (currentScene) return currentScene switch
{ {
case OWScene.TitleScreen: OWScene.TitleScreen => ClientState.InTitleScreen,
DebugLog.DebugWrite($"- TitleScreen"); OWScene.Credits_Fast => ClientState.WatchingShortCredits,
return ClientState.InTitleScreen; OWScene.Credits_Final or OWScene.PostCreditsScene => ClientState.WatchingLongCredits,
case OWScene.Credits_Fast: OWScene.SolarSystem => ClientState.AliveInSolarSystem,
DebugLog.DebugWrite($"- Short Credits"); OWScene.EyeOfTheUniverse => ClientState.AliveInEye,
return ClientState.WatchingShortCredits; _ => ClientState.NotLoaded,
case OWScene.Credits_Final: };
case OWScene.PostCreditsScene:
DebugLog.DebugWrite($"- Long Credits");
return ClientState.WatchingLongCredits;
case OWScene.SolarSystem:
DebugLog.DebugWrite($"- SolarSystem");
return ClientState.AliveInSolarSystem;
case OWScene.EyeOfTheUniverse:
DebugLog.DebugWrite($"- Eye");
return ClientState.AliveInEye;
default:
DebugLog.DebugWrite($"- Not Loaded");
return ClientState.NotLoaded;
}
} }
} }
} }

View File

@ -54,17 +54,14 @@ namespace QSB.ClientServerStateSync
case OWScene.Credits_Fast: case OWScene.Credits_Fast:
case OWScene.Credits_Final: case OWScene.Credits_Final:
case OWScene.PostCreditsScene: case OWScene.PostCreditsScene:
DebugLog.DebugWrite($"SERVER LOAD CREDITS");
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.Credits); QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.Credits);
break; break;
case OWScene.TitleScreen: case OWScene.TitleScreen:
DebugLog.DebugWrite($"SERVER LOAD TITLE SCREEN");
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.NotLoaded); QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.NotLoaded);
break; break;
case OWScene.SolarSystem: case OWScene.SolarSystem:
DebugLog.DebugWrite($"SERVER LOAD SOLARSYSTEM");
if (oldScene == OWScene.SolarSystem) if (oldScene == OWScene.SolarSystem)
{ {
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.WaitingForAllPlayersToReady); QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.WaitingForAllPlayersToReady);
@ -77,7 +74,6 @@ namespace QSB.ClientServerStateSync
break; break;
case OWScene.EyeOfTheUniverse: case OWScene.EyeOfTheUniverse:
DebugLog.DebugWrite($"EYE");
QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.WaitingForAllPlayersToReady); QSBEventManager.FireEvent(EventNames.QSBServerState, ServerState.WaitingForAllPlayersToReady);
break; break;
@ -98,21 +94,15 @@ namespace QSB.ClientServerStateSync
private ServerState ForceGetCurrentState() private ServerState ForceGetCurrentState()
{ {
DebugLog.DebugWrite($"ForceGetCurrentState");
var currentScene = LoadManager.GetCurrentScene(); var currentScene = LoadManager.GetCurrentScene();
var lastScene = LoadManager.GetPreviousScene();
switch (currentScene) switch (currentScene)
{ {
case OWScene.SolarSystem: case OWScene.SolarSystem:
DebugLog.DebugWrite($"- SolarSystem");
return ServerState.InSolarSystem; return ServerState.InSolarSystem;
case OWScene.EyeOfTheUniverse: case OWScene.EyeOfTheUniverse:
DebugLog.DebugWrite($"- Eye");
return ServerState.InEye; return ServerState.InEye;
default: default:
DebugLog.DebugWrite($"- Not Loaded");
return ServerState.NotLoaded; return ServerState.NotLoaded;
} }
} }

View File

@ -98,5 +98,6 @@
public static string QSBMeteorSpecialImpact = "QSBMeteorSpecialImpact"; public static string QSBMeteorSpecialImpact = "QSBMeteorSpecialImpact";
public static string QSBFragmentDamage = "QSBFragmentDamage"; public static string QSBFragmentDamage = "QSBFragmentDamage";
public static string QSBFragmentResync = "QSBFragmentResync"; public static string QSBFragmentResync = "QSBFragmentResync";
public static string QSBLearnLaunchCodes = "QSBLearnLaunchCodes";
} }
} }

View File

@ -8,6 +8,7 @@
DebugEvent, DebugEvent,
SatelliteProjector, SatelliteProjector,
SatelliteProjectorSnapshot, SatelliteProjectorSnapshot,
LaunchCodes,
/* /*
* SERVER EVENTS * SERVER EVENTS

View File

@ -2,6 +2,8 @@
{ {
public interface IQSBEvent public interface IQSBEvent
{ {
EventType Type { get; }
void SetupListener(); void SetupListener();
void CloseListener(); void CloseListener();
} }

View File

@ -1,6 +1,8 @@
using OWML.Common; using OWML.Common;
using QSB.ClientServerStateSync;
using QSB.Messaging; using QSB.Messaging;
using QSB.Player; using QSB.Player;
using QSB.Player.Events;
using QSB.Player.TransformSync; using QSB.Player.TransformSync;
using QSB.Utility; using QSB.Utility;
using QuantumUNET.Components; using QuantumUNET.Components;
@ -75,10 +77,24 @@ namespace QSB.Events
if (PlayerTransformSync.LocalInstance == null || PlayerTransformSync.LocalInstance.GetComponent<QNetworkIdentity>() == null) if (PlayerTransformSync.LocalInstance == null || PlayerTransformSync.LocalInstance.GetComponent<QNetworkIdentity>() == null)
{ {
DebugLog.ToConsole($"Warning - Tried to handle message of type <{message.GetType().Name}> before localplayer was established.", MessageType.Warning); DebugLog.ToConsole($"Warning - Tried to handle message of type <{GetType().Name}> before localplayer was established.", MessageType.Warning);
return; return;
} }
if (QSBPlayerManager.PlayerExists(message.FromId))
{
var player = QSBPlayerManager.GetPlayer(message.FromId);
if (!player.IsReady
&& player.PlayerId != LocalPlayerId
&& (player.State is ClientState.AliveInSolarSystem or ClientState.AliveInEye or ClientState.DeadInSolarSystem)
&& (message is not PlayerInformationEvent or PlayerReadyEvent))
{
DebugLog.ToConsole($"Warning - Got message from player {message.FromId}, but they were not ready. Asking for state resync, just in case.", MessageType.Warning);
QSBEventManager.FireEvent(EventNames.QSBRequestStateResync);
}
}
try try
{ {
if (message.FromId == QSBPlayerManager.LocalPlayerId || if (message.FromId == QSBPlayerManager.LocalPlayerId ||
@ -92,7 +108,7 @@ namespace QSB.Events
} }
catch (Exception ex) catch (Exception ex)
{ {
DebugLog.ToConsole($"Error - Exception handling message {message.GetType().Name} : {ex}", MessageType.Error); DebugLog.ToConsole($"Error - Exception handling message {GetType().Name} : {ex}", MessageType.Error);
} }
} }
} }

View File

@ -32,6 +32,9 @@ using QSB.Utility.Events;
using System.Collections.Generic; using System.Collections.Generic;
using QSB.MeteorSync.Events; using QSB.MeteorSync.Events;
using QSB.RespawnSync.Events; using QSB.RespawnSync.Events;
using System.Linq;
using HarmonyLib;
using System.Text;
namespace QSB.Events namespace QSB.Events
{ {
@ -77,6 +80,7 @@ namespace QSB.Events
new DebugEvent(), new DebugEvent(),
new SatelliteProjectorEvent(), new SatelliteProjectorEvent(),
new SatelliteProjectorSnapshotEvent(), new SatelliteProjectorSnapshotEvent(),
new LaunchCodesEvent(),
// World Objects // World Objects
new ElevatorEvent(), new ElevatorEvent(),
new GeyserEvent(), new GeyserEvent(),
@ -129,6 +133,26 @@ namespace QSB.Events
_eventList.ForEach(ev => ev.SetupListener()); _eventList.ForEach(ev => ev.SetupListener());
var duplicates = _eventList
.GroupBy(qsbEvent => qsbEvent.Type)
.Where(group => group.Count() > 1);
if (duplicates.Count() != 0)
{
var totalSb = new StringBuilder();
foreach (var group in duplicates)
{
totalSb.Append($"{group.Key}\r\n");
foreach (var qsbEvent in group)
{
totalSb.Append($"- {qsbEvent.GetType().Name}\r\n");
}
}
DebugLog.ToConsole($"Error - These QSBEvents handle the same EventType!\r\n{totalSb}", MessageType.Error);
return;
}
Ready = true; Ready = true;
DebugLog.DebugWrite("Event Manager ready.", MessageType.Success); DebugLog.DebugWrite("Event Manager ready.", MessageType.Success);

View File

@ -0,0 +1,41 @@
using QSB.Events;
using QSB.Messaging;
using QSB.Utility;
namespace QSB.Player.Events
{
internal class LaunchCodesEvent : QSBEvent<PlayerMessage>
{
public override EventType Type => EventType.LaunchCodes;
public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBLearnLaunchCodes, Handler);
public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBLearnLaunchCodes, Handler);
private void Handler() => SendEvent(CreateMessage());
private PlayerMessage CreateMessage() => new()
{
AboutId = LocalPlayerId
};
public override void OnReceiveRemote(bool isHost, PlayerMessage message)
{
var flag = false;
if (!PlayerData._currentGameSave.PersistentConditionExists("LAUNCH_CODES_GIVEN"))
{
flag = true;
}
else if (PlayerData._currentGameSave.GetPersistentCondition("LAUNCH_CODES_GIVEN"))
{
flag = true;
}
if (flag)
{
DialogueConditionManager.SharedInstance.SetConditionState("SCIENTIST_3", true);
PlayerData._currentGameSave.SetPersistentCondition("LAUNCH_CODES_GIVEN", true);
GlobalMessenger.FireEvent("LearnLaunchCodes");
}
}
}
}

View File

@ -17,7 +17,13 @@ namespace QSB.Player.Events
{ {
AboutId = player.PlayerId, AboutId = player.PlayerId,
PlayerName = player.Name, PlayerName = player.Name,
PlayerState = player.PlayerStates, IsReady = player.IsReady,
FlashlightActive = player.FlashlightActive,
SuitedUp = player.SuitedUp,
ProbeLauncherEquipped = player.ProbeLauncherEquipped,
SignalscopeEquipped = player.SignalscopeEquipped,
TranslatorEquipped = player.TranslatorEquipped,
ProbeActive = player.ProbeActive,
ClientState = player.State ClientState = player.State
}; };

View File

@ -7,23 +7,26 @@ namespace QSB.Player.Events
public class PlayerInformationMessage : PlayerMessage public class PlayerInformationMessage : PlayerMessage
{ {
public string PlayerName { get; set; } public string PlayerName { get; set; }
public PlayerState PlayerState { get; set; } public bool IsReady { get; set; }
public bool FlashlightActive { get; set; }
public bool SuitedUp { get; set; }
public bool ProbeLauncherEquipped { get; set; }
public bool SignalscopeEquipped { get; set; }
public bool TranslatorEquipped { get; set; }
public bool ProbeActive { get; set; }
public ClientState ClientState { get; set; } public ClientState ClientState { get; set; }
public override void Deserialize(QNetworkReader reader) public override void Deserialize(QNetworkReader reader)
{ {
base.Deserialize(reader); base.Deserialize(reader);
PlayerName = reader.ReadString(); PlayerName = reader.ReadString();
PlayerState = new PlayerState IsReady = reader.ReadBoolean();
{ FlashlightActive = reader.ReadBoolean();
IsReady = reader.ReadBoolean(), SuitedUp = reader.ReadBoolean();
FlashlightActive = reader.ReadBoolean(), ProbeLauncherEquipped = reader.ReadBoolean();
SuitedUp = reader.ReadBoolean(), SignalscopeEquipped = reader.ReadBoolean();
ProbeLauncherEquipped = reader.ReadBoolean(), TranslatorEquipped = reader.ReadBoolean();
SignalscopeEquipped = reader.ReadBoolean(), ProbeActive = reader.ReadBoolean();
TranslatorEquipped = reader.ReadBoolean(),
ProbeActive = reader.ReadBoolean()
};
ClientState = (ClientState)reader.ReadInt32(); ClientState = (ClientState)reader.ReadInt32();
} }
@ -31,13 +34,13 @@ namespace QSB.Player.Events
{ {
base.Serialize(writer); base.Serialize(writer);
writer.Write(PlayerName); writer.Write(PlayerName);
writer.Write(PlayerState.IsReady); writer.Write(IsReady);
writer.Write(PlayerState.FlashlightActive); writer.Write(FlashlightActive);
writer.Write(PlayerState.SuitedUp); writer.Write(SuitedUp);
writer.Write(PlayerState.ProbeLauncherEquipped); writer.Write(ProbeLauncherEquipped);
writer.Write(PlayerState.SignalscopeEquipped); writer.Write(SignalscopeEquipped);
writer.Write(PlayerState.TranslatorEquipped); writer.Write(TranslatorEquipped);
writer.Write(PlayerState.ProbeActive); writer.Write(ProbeActive);
writer.Write((int)ClientState); writer.Write((int)ClientState);
} }
} }

View File

@ -70,7 +70,7 @@ namespace QSB.Player.Events
if (QSBSceneManager.IsInUniverse) if (QSBSceneManager.IsInUniverse)
{ {
QSBPlayerManager.LocalPlayer.PlayerStates.IsReady = true; QSBPlayerManager.LocalPlayer.IsReady = true;
QSBEventManager.FireEvent(EventNames.QSBPlayerReady, true); QSBEventManager.FireEvent(EventNames.QSBPlayerReady, true);
} }
} }

View File

@ -35,7 +35,7 @@ namespace QSB.Player.Events
private static void HandleServer(ToggleMessage message) private static void HandleServer(ToggleMessage message)
{ {
DebugLog.DebugWrite($"[SERVER] Get ready event from {message.FromId}", MessageType.Success); DebugLog.DebugWrite($"[SERVER] Get ready event from {message.FromId}", MessageType.Success);
QSBPlayerManager.GetPlayer(message.AboutId).PlayerStates.IsReady = message.ToggleValue; QSBPlayerManager.GetPlayer(message.AboutId).IsReady = message.ToggleValue;
QSBEventManager.FireEvent(EventNames.QSBPlayerInformation); QSBEventManager.FireEvent(EventNames.QSBPlayerInformation);
} }

View File

@ -1,4 +1,5 @@
using HarmonyLib; using HarmonyLib;
using QSB.Events;
using QSB.Patches; using QSB.Patches;
namespace QSB.Player.Patches namespace QSB.Player.Patches
@ -21,6 +22,32 @@ namespace QSB.Player.Patches
[HarmonyPrefix] [HarmonyPrefix]
[HarmonyPatch(typeof(PauseMenuManager), nameof(PauseMenuManager.OnExitToMainMenu))] [HarmonyPatch(typeof(PauseMenuManager), nameof(PauseMenuManager.OnExitToMainMenu))]
public static void PauseMenuManager_OnExitToMainMenu() public static void PauseMenuManager_OnExitToMainMenu()
=> QSBPlayerManager.LocalPlayer.PlayerStates.IsReady = false; => QSBPlayerManager.LocalPlayer.IsReady = false;
[HarmonyPrefix]
[HarmonyPatch(typeof(PlayerData), nameof(PlayerData.LearnLaunchCodes))]
public static bool LearnLaunchCodes()
{
var flag = false;
if (!PlayerData._currentGameSave.PersistentConditionExists("LAUNCH_CODES_GIVEN"))
{
flag = true;
}
else if (PlayerData._currentGameSave.GetPersistentCondition("LAUNCH_CODES_GIVEN"))
{
flag = true;
}
if (flag)
{
DialogueConditionManager.SharedInstance.SetConditionState("SCIENTIST_3", true);
PlayerData._currentGameSave.SetPersistentCondition("LAUNCH_CODES_GIVEN", true);
GlobalMessenger.FireEvent("LearnLaunchCodes");
QSBEventManager.FireEvent(EventNames.QSBLearnLaunchCodes);
}
return false;
}
} }
} }

View File

@ -34,7 +34,7 @@ namespace QSB.Player
Initialize(); Initialize();
} }
if (!_isReady || !_player.PlayerStates.IsReady) if (!_isReady || !_player.IsReady)
{ {
return; return;
} }

View File

@ -3,6 +3,7 @@ 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;
using QSB.Events;
using QSB.ItemSync.WorldObjects.Items; using QSB.ItemSync.WorldObjects.Items;
using QSB.Player.TransformSync; using QSB.Player.TransformSync;
using QSB.QuantumSync; using QSB.QuantumSync;
@ -22,7 +23,6 @@ namespace QSB.Player
public uint PlayerId { get; } public uint PlayerId { get; }
public string Name { get; set; } public string Name { get; set; }
public PlayerHUDMarker HudMarker { get; set; } public PlayerHUDMarker HudMarker { get; set; }
public PlayerState PlayerStates { get; set; } = new PlayerState();
public PlayerTransformSync TransformSync { get; set; } public PlayerTransformSync TransformSync { get; set; }
// Body Objects // Body Objects
@ -30,10 +30,11 @@ namespace QSB.Player
{ {
get get
{ {
if (_camera == null && PlayerStates.IsReady) if (_camera == null && IsReady)
{ {
DebugLog.ToConsole($"Warning - {PlayerId}.Camera is null!", MessageType.Warning); DebugLog.ToConsole($"Warning - {PlayerId}.Camera is null!", MessageType.Warning);
} }
return _camera; return _camera;
} }
set set
@ -42,6 +43,7 @@ namespace QSB.Player
{ {
DebugLog.ToConsole($"Warning - Setting {PlayerId}.Camera to null.", MessageType.Warning); DebugLog.ToConsole($"Warning - Setting {PlayerId}.Camera to null.", MessageType.Warning);
} }
_camera = value; _camera = value;
} }
} }
@ -52,7 +54,7 @@ namespace QSB.Player
{ {
get get
{ {
if (_body == null && PlayerStates.IsReady) if (_body == null && IsReady)
{ {
DebugLog.ToConsole($"Warning - {PlayerId}.Body is null!", MessageType.Warning); DebugLog.ToConsole($"Warning - {PlayerId}.Body is null!", MessageType.Warning);
} }
@ -77,7 +79,18 @@ namespace QSB.Player
// Tools // Tools
public GameObject ProbeBody { get; set; } public GameObject ProbeBody { get; set; }
public QSBProbe Probe { get; set; } public QSBProbe Probe { get; set; }
public QSBFlashlight FlashLight => CameraBody?.GetComponentInChildren<QSBFlashlight>(); public QSBFlashlight FlashLight
{
get
{
if (CameraBody == null)
{
return null;
}
return CameraBody.GetComponentInChildren<QSBFlashlight>();
}
}
public QSBTool Signalscope => GetToolByType(ToolType.Signalscope); public QSBTool Signalscope => GetToolByType(ToolType.Signalscope);
public QSBTool Translator => GetToolByType(ToolType.Translator); public QSBTool Translator => GetToolByType(ToolType.Translator);
public QSBProbeLauncherTool ProbeLauncher => (QSBProbeLauncherTool)GetToolByType(ToolType.ProbeLauncher); public QSBProbeLauncherTool ProbeLauncher => (QSBProbeLauncherTool)GetToolByType(ToolType.ProbeLauncher);
@ -105,11 +118,18 @@ namespace QSB.Player
public JetpackAccelerationSync JetpackAcceleration { get; set; } public JetpackAccelerationSync JetpackAcceleration { get; set; }
// Misc // Misc
public bool IsReady { get; set; }
public bool IsInMoon; // MOVE : move into PlayerStates? public bool IsInMoon; // MOVE : move into PlayerStates?
public bool IsInShrine; // MOVE : move into PlayerStates? public bool IsInShrine; // MOVE : move into PlayerStates?
public IQSBQuantumObject EntangledObject; public IQSBQuantumObject EntangledObject;
public bool IsDead { get; set; } public bool IsDead { get; set; }
public ClientState State { get; set; } public ClientState State { get; set; }
public bool FlashlightActive { get; set; }
public bool SuitedUp { get; set; }
public bool ProbeLauncherEquipped { get; set; }
public bool SignalscopeEquipped { get; set; }
public bool TranslatorEquipped { get; set; }
public bool ProbeActive { get; set; }
// Local only // Local only
public PlayerProbeLauncher LocalProbeLauncher public PlayerProbeLauncher LocalProbeLauncher
@ -174,19 +194,35 @@ namespace QSB.Player
CurrentCharacterDialogueTreeId = -1; CurrentCharacterDialogueTreeId = -1;
} }
public void UpdateStateObjects() public void UpdateObjectsFromStates()
{ {
if (OWInput.GetInputMode() == InputMode.None) if (OWInput.GetInputMode() == InputMode.None)
{ {
return; return;
} }
FlashLight?.UpdateState(PlayerStates.FlashlightActive); FlashLight?.UpdateState(FlashlightActive);
Translator?.ChangeEquipState(PlayerStates.TranslatorEquipped); Translator?.ChangeEquipState(TranslatorEquipped);
ProbeLauncher?.ChangeEquipState(PlayerStates.ProbeLauncherEquipped); ProbeLauncher?.ChangeEquipState(ProbeLauncherEquipped);
Signalscope?.ChangeEquipState(PlayerStates.SignalscopeEquipped); Signalscope?.ChangeEquipState(SignalscopeEquipped);
QSBCore.UnityEvents.RunWhen(() => QSBPlayerManager.GetSyncObject<AnimationSync>(PlayerId) != null, QSBCore.UnityEvents.RunWhen(() => QSBPlayerManager.GetSyncObject<AnimationSync>(PlayerId) != null,
() => QSBPlayerManager.GetSyncObject<AnimationSync>(PlayerId).SetSuitState(PlayerStates.SuitedUp)); () => QSBPlayerManager.GetSyncObject<AnimationSync>(PlayerId).SetSuitState(SuitedUp));
}
public void UpdateStatesFromObjects()
{
if (Locator.GetFlashlight() == null || Locator.GetPlayerBody() == null)
{
FlashlightActive = false;
SuitedUp = false;
}
else
{
FlashlightActive = Locator.GetFlashlight()._flashlightOn;
SuitedUp = Locator.GetPlayerBody().GetComponent<PlayerSpacesuit>().IsWearingSuit(true);
}
QSBEventManager.FireEvent(EventNames.QSBPlayerInformation);
} }
private QSBTool GetToolByType(ToolType type) => CameraBody?.GetComponentsInChildren<QSBTool>() private QSBTool GetToolByType(ToolType type) => CameraBody?.GetComponentsInChildren<QSBTool>()

View File

@ -1,14 +0,0 @@
namespace QSB.Player
{
public class PlayerState
{
public bool IsReady { get; set; }
public bool FlashlightActive { get; set; }
public bool SuitedUp { get; set; }
public bool ProbeLauncherEquipped { get; set; }
public bool SignalscopeEquipped { get; set; }
public bool TranslatorEquipped { get; set; }
public bool ProbeActive { get; set; }
}
}

View File

@ -82,10 +82,16 @@ namespace QSB.Player
{ {
var player = GetPlayer(message.AboutId); var player = GetPlayer(message.AboutId);
player.Name = message.PlayerName; player.Name = message.PlayerName;
player.PlayerStates = message.PlayerState; player.IsReady = message.IsReady;
if (LocalPlayer.PlayerStates.IsReady) player.FlashlightActive = message.FlashlightActive;
player.SuitedUp = message.SuitedUp;
player.ProbeLauncherEquipped = message.ProbeLauncherEquipped;
player.SignalscopeEquipped = message.SignalscopeEquipped;
player.TranslatorEquipped = message.TranslatorEquipped;
player.ProbeActive = message.ProbeActive;
if (LocalPlayer.IsReady)
{ {
player.UpdateStateObjects(); player.UpdateObjectsFromStates();
} }
player.State = message.ClientState; player.State = message.ClientState;
@ -172,7 +178,7 @@ namespace QSB.Player
return null; return null;
} }
return playerList.Where(x => x.PlayerStates.IsReady).OrderBy(x => Vector3.Distance(x.Body.transform.position, worldPoint)).FirstOrDefault(); return playerList.Where(x => x.IsReady).OrderBy(x => Vector3.Distance(x.Body.transform.position, worldPoint)).FirstOrDefault();
} }
public static IEnumerable<Tuple<PlayerInfo, IQSBOWItem>> GetPlayerCarryItems() public static IEnumerable<Tuple<PlayerInfo, IQSBOWItem>> GetPlayerCarryItems()

View File

@ -60,12 +60,12 @@ namespace QSB.Player.TransformSync
if (isInUniverse) if (isInUniverse)
{ {
Player.PlayerStates.IsReady = true; Player.IsReady = true;
QSBEventManager.FireEvent(EventNames.QSBPlayerReady, true); QSBEventManager.FireEvent(EventNames.QSBPlayerReady, true);
} }
else else
{ {
Player.PlayerStates.IsReady = false; Player.IsReady = false;
QSBEventManager.FireEvent(EventNames.QSBPlayerReady, false); QSBEventManager.FireEvent(EventNames.QSBPlayerReady, false);
} }

View File

@ -91,7 +91,7 @@
<Compile Include="ConversationSync\ConversationManager.cs" /> <Compile Include="ConversationSync\ConversationManager.cs" />
<Compile Include="DeathSync\EndLoopReason.cs" /> <Compile Include="DeathSync\EndLoopReason.cs" />
<Compile Include="DeathSync\Events\EndLoopEvent.cs" /> <Compile Include="DeathSync\Events\EndLoopEvent.cs" />
<Compile Include="Player\PlayerState.cs" /> <Compile Include="Player\Events\LaunchCodesEvent.cs" />
<Compile Include="RespawnSync\Events\PlayerRespawnEvent.cs" /> <Compile Include="RespawnSync\Events\PlayerRespawnEvent.cs" />
<Compile Include="DeathSync\Events\StartLoopEvent.cs" /> <Compile Include="DeathSync\Events\StartLoopEvent.cs" />
<Compile Include="DeathSync\Patches\MapPatches.cs" /> <Compile Include="DeathSync\Patches\MapPatches.cs" />

View File

@ -49,6 +49,7 @@ namespace QSB.RespawnSync
private void Init(OWScene newScene, bool inUniverse) private void Init(OWScene newScene, bool inUniverse)
{ {
QSBPlayerManager.ShowAllPlayers(); QSBPlayerManager.ShowAllPlayers();
QSBPlayerManager.LocalPlayer.UpdateStatesFromObjects();
QSBPlayerManager.PlayerList.ForEach(x => x.IsDead = false); QSBPlayerManager.PlayerList.ForEach(x => x.IsDead = false);
_playersPendingRespawn.Clear(); _playersPendingRespawn.Clear();
@ -99,7 +100,6 @@ namespace QSB.RespawnSync
public void TriggerRespawnMap() public void TriggerRespawnMap()
{ {
DebugLog.DebugWrite($"TRIGGER RESPAWN MAP");
QSBPatchManager.DoPatchType(QSBPatchTypes.RespawnTime); QSBPatchManager.DoPatchType(QSBPatchTypes.RespawnTime);
QSBCore.UnityEvents.FireOnNextUpdate(() => GlobalMessenger.FireEvent("TriggerObservatoryMap")); QSBCore.UnityEvents.FireOnNextUpdate(() => GlobalMessenger.FireEvent("TriggerObservatoryMap"));
} }

View File

@ -1,5 +1,6 @@
using QSB.ClientServerStateSync; using QSB.ClientServerStateSync;
using QSB.Events; using QSB.Events;
using QSB.Utility;
using UnityEngine; using UnityEngine;
namespace QSB.StatueSync.Events namespace QSB.StatueSync.Events
@ -27,6 +28,8 @@ namespace QSB.StatueSync.Events
public override void OnReceiveLocal(bool server, StartStatueMessage message) public override void OnReceiveLocal(bool server, StartStatueMessage message)
{ {
DebugLog.DebugWrite($"OnReceiveLocal StartStatueEvent");
if (!QSBCore.IsHost) if (!QSBCore.IsHost)
{ {
return; return;
@ -36,6 +39,9 @@ namespace QSB.StatueSync.Events
} }
public override void OnReceiveRemote(bool server, StartStatueMessage message) public override void OnReceiveRemote(bool server, StartStatueMessage message)
=> StatueManager.Instance.BeginSequence(message.PlayerPosition, message.PlayerRotation, message.CameraDegrees); {
DebugLog.DebugWrite($"OnReceiveRemote StartStatueEvent");
StatueManager.Instance.BeginSequence(message.PlayerPosition, message.PlayerRotation, message.CameraDegrees);
}
} }
} }

View File

@ -1,4 +1,5 @@
using QSB.Player; using QSB.Player;
using QSB.Utility;
using System.Collections; using System.Collections;
using UnityEngine; using UnityEngine;
@ -12,14 +13,22 @@ namespace QSB.StatueSync
private void Awake() private void Awake()
{ {
Instance = this; Instance = this;
QSBSceneManager.OnUniverseSceneLoaded += (OWScene oldScene, OWScene newScene) => QSBPlayerManager.ShowAllPlayers(); QSBSceneManager.OnUniverseSceneLoaded += OnUniverseSceneLoaded;
} }
private void OnDestroy() private void OnDestroy()
=> QSBSceneManager.OnUniverseSceneLoaded -= (OWScene oldScene, OWScene newScene) => QSBPlayerManager.ShowAllPlayers(); => QSBSceneManager.OnUniverseSceneLoaded -= OnUniverseSceneLoaded;
private void OnUniverseSceneLoaded(OWScene oldScene, OWScene newScene)
{
QSBPlayerManager.ShowAllPlayers();
QSBPlayerManager.LocalPlayer.UpdateStatesFromObjects();
}
public void BeginSequence(Vector3 position, Quaternion rotation, float cameraDegrees) public void BeginSequence(Vector3 position, Quaternion rotation, float cameraDegrees)
=> StartCoroutine(BeginRemoteUplinkSequence(position, rotation, cameraDegrees)); {
StartCoroutine(BeginRemoteUplinkSequence(position, rotation, cameraDegrees));
}
private IEnumerator BeginRemoteUplinkSequence(Vector3 position, Quaternion rotation, float cameraDegrees) private IEnumerator BeginRemoteUplinkSequence(Vector3 position, Quaternion rotation, float cameraDegrees)
{ {

View File

@ -1,4 +1,6 @@
using OWML.Common; using OWML.Common;
using QSB.ClientServerStateSync;
using QSB.Player;
using QSB.Utility; using QSB.Utility;
using UnityEngine; using UnityEngine;
@ -57,7 +59,11 @@ namespace QSB.Syncs
{ {
if (_referenceTransform == null) if (_referenceTransform == null)
{ {
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error); if (QSBPlayerManager.LocalPlayer.State is ClientState.AliveInEye or ClientState.AliveInSolarSystem or ClientState.DeadInSolarSystem)
{
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error);
}
return; return;
} }
@ -72,7 +78,11 @@ namespace QSB.Syncs
{ {
if (_referenceTransform == null) if (_referenceTransform == null)
{ {
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error); if (QSBPlayerManager.LocalPlayer.State is ClientState.AliveInEye or ClientState.AliveInSolarSystem or ClientState.DeadInSolarSystem)
{
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error);
}
return; return;
} }
@ -98,7 +108,11 @@ namespace QSB.Syncs
{ {
if (_referenceTransform == null) if (_referenceTransform == null)
{ {
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error); if (QSBPlayerManager.LocalPlayer.State is ClientState.AliveInEye or ClientState.AliveInSolarSystem or ClientState.DeadInSolarSystem)
{
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error);
}
return Vector3.zero; return Vector3.zero;
} }
@ -112,7 +126,11 @@ namespace QSB.Syncs
{ {
if (_referenceTransform == null) if (_referenceTransform == null)
{ {
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error); if (QSBPlayerManager.LocalPlayer.State is ClientState.AliveInEye or ClientState.AliveInSolarSystem or ClientState.DeadInSolarSystem)
{
DebugLog.ToConsole($"Error - _referenceTransform has not been set for {_attachedTransform.name}", MessageType.Error);
}
return Quaternion.identity; return Quaternion.identity;
} }

View File

@ -121,7 +121,7 @@ namespace QSB.Syncs.Sectored
{ {
writer.Write(-1); writer.Write(-1);
} }
else if (!Player.PlayerStates.IsReady) else if (!Player.IsReady)
{ {
writer.Write(-1); writer.Write(-1);
} }

View File

@ -73,7 +73,7 @@ namespace QSB.Syncs
public PlayerInfo Player => QSBPlayerManager.GetPlayer(PlayerId); public PlayerInfo Player => QSBPlayerManager.GetPlayer(PlayerId);
private bool _baseIsReady => QSBPlayerManager.PlayerExists(PlayerId) private bool _baseIsReady => QSBPlayerManager.PlayerExists(PlayerId)
&& Player != null && Player != null
&& Player.PlayerStates.IsReady && Player.IsReady
&& NetId.Value != uint.MaxValue && NetId.Value != uint.MaxValue
&& NetId.Value != 0U && NetId.Value != 0U
&& WorldObjectManager.AllReady; && WorldObjectManager.AllReady;

View File

@ -1,5 +1,6 @@
using HarmonyLib; using HarmonyLib;
using QSB.Patches; using QSB.Patches;
using QSB.Utility;
namespace QSB.TimeSync.Patches namespace QSB.TimeSync.Patches
{ {
@ -11,8 +12,10 @@ namespace QSB.TimeSync.Patches
[HarmonyPrefix] [HarmonyPrefix]
[HarmonyPatch(typeof(PlayerCameraEffectController), nameof(PlayerCameraEffectController.OnStartOfTimeLoop))] [HarmonyPatch(typeof(PlayerCameraEffectController), nameof(PlayerCameraEffectController.OnStartOfTimeLoop))]
public static bool PlayerCameraEffectController_OnStartOfTimeLoop() public static bool PlayerCameraEffectController_OnStartOfTimeLoop()
=> false; {
DebugLog.DebugWrite($"OnStartOfTimeLoop");
return false;
}
[HarmonyPrefix] [HarmonyPrefix]
[HarmonyPatch(typeof(OWTime), nameof(OWTime.Pause))] [HarmonyPatch(typeof(OWTime), nameof(OWTime.Pause))]
public static bool StopPausing() public static bool StopPausing()

View File

@ -32,11 +32,11 @@ namespace QSB.Tools.FlashlightTool.Events
public override void OnReceiveRemote(bool server, ToggleMessage message) public override void OnReceiveRemote(bool server, ToggleMessage message)
{ {
var player = QSBPlayerManager.GetPlayer(message.AboutId); var player = QSBPlayerManager.GetPlayer(message.AboutId);
player.PlayerStates.FlashlightActive = message.ToggleValue; player.FlashlightActive = message.ToggleValue;
player.FlashLight?.UpdateState(message.ToggleValue); player.FlashLight?.UpdateState(message.ToggleValue);
} }
public override void OnReceiveLocal(bool server, ToggleMessage message) => public override void OnReceiveLocal(bool server, ToggleMessage message) =>
QSBPlayerManager.LocalPlayer.PlayerStates.FlashlightActive = message.ToggleValue; QSBPlayerManager.LocalPlayer.FlashlightActive = message.ToggleValue;
} }
} }

View File

@ -66,11 +66,11 @@ namespace QSB.Tools.ProbeLauncherTool.Events
public override void OnReceiveRemote(bool server, ToggleMessage message) public override void OnReceiveRemote(bool server, ToggleMessage message)
{ {
var player = QSBPlayerManager.GetPlayer(message.AboutId); var player = QSBPlayerManager.GetPlayer(message.AboutId);
player.PlayerStates.ProbeLauncherEquipped = message.ToggleValue; player.ProbeLauncherEquipped = message.ToggleValue;
player.ProbeLauncher?.ChangeEquipState(message.ToggleValue); player.ProbeLauncher?.ChangeEquipState(message.ToggleValue);
} }
public override void OnReceiveLocal(bool server, ToggleMessage message) => public override void OnReceiveLocal(bool server, ToggleMessage message) =>
QSBPlayerManager.LocalPlayer.PlayerStates.ProbeLauncherEquipped = message.ToggleValue; QSBPlayerManager.LocalPlayer.ProbeLauncherEquipped = message.ToggleValue;
} }
} }

View File

@ -25,7 +25,7 @@ namespace QSB.Tools.ProbeTool.Events
public override void OnReceiveRemote(bool server, EnumMessage<ProbeEvent> message) public override void OnReceiveRemote(bool server, EnumMessage<ProbeEvent> message)
{ {
var player = QSBPlayerManager.GetPlayer(message.AboutId); var player = QSBPlayerManager.GetPlayer(message.AboutId);
if (!player.PlayerStates.IsReady || player.Probe == null) if (!player.IsReady || player.Probe == null)
{ {
return; return;
} }

View File

@ -25,7 +25,7 @@ namespace QSB.Tools.ProbeTool.Events
public override void OnReceiveRemote(bool server, FloatMessage message) public override void OnReceiveRemote(bool server, FloatMessage message)
{ {
var player = QSBPlayerManager.GetPlayer(message.AboutId); var player = QSBPlayerManager.GetPlayer(message.AboutId);
if (!player.PlayerStates.IsReady || player.Probe == null) if (!player.IsReady || player.Probe == null)
{ {
return; return;
} }

View File

@ -32,11 +32,11 @@ namespace QSB.Tools.SignalscopeTool.Events
public override void OnReceiveRemote(bool server, ToggleMessage message) public override void OnReceiveRemote(bool server, ToggleMessage message)
{ {
var player = QSBPlayerManager.GetPlayer(message.AboutId); var player = QSBPlayerManager.GetPlayer(message.AboutId);
player.PlayerStates.SignalscopeEquipped = message.ToggleValue; player.SignalscopeEquipped = message.ToggleValue;
player.Signalscope?.ChangeEquipState(message.ToggleValue); player.Signalscope?.ChangeEquipState(message.ToggleValue);
} }
public override void OnReceiveLocal(bool server, ToggleMessage message) => public override void OnReceiveLocal(bool server, ToggleMessage message) =>
QSBPlayerManager.LocalPlayer.PlayerStates.SignalscopeEquipped = message.ToggleValue; QSBPlayerManager.LocalPlayer.SignalscopeEquipped = message.ToggleValue;
} }
} }

View File

@ -32,11 +32,11 @@ namespace QSB.Tools.TranslatorTool.Events
public override void OnReceiveRemote(bool server, ToggleMessage message) public override void OnReceiveRemote(bool server, ToggleMessage message)
{ {
var player = QSBPlayerManager.GetPlayer(message.AboutId); var player = QSBPlayerManager.GetPlayer(message.AboutId);
player.PlayerStates.TranslatorEquipped = message.ToggleValue; player.TranslatorEquipped = message.ToggleValue;
player.Translator?.ChangeEquipState(message.ToggleValue); player.Translator?.ChangeEquipState(message.ToggleValue);
} }
public override void OnReceiveLocal(bool server, ToggleMessage message) => public override void OnReceiveLocal(bool server, ToggleMessage message) =>
QSBPlayerManager.LocalPlayer.PlayerStates.TranslatorEquipped = message.ToggleValue; QSBPlayerManager.LocalPlayer.TranslatorEquipped = message.ToggleValue;
} }
} }

View File

@ -3,10 +3,16 @@ using QSB.ClientServerStateSync;
using QSB.OrbSync.TransformSync; using QSB.OrbSync.TransformSync;
using QSB.Player; using QSB.Player;
using QSB.QuantumSync; using QSB.QuantumSync;
using QSB.ShipSync;
using QSB.ShipSync.TransformSync;
using QSB.ShipSync.WorldObjects;
using QSB.Syncs; using QSB.Syncs;
using QSB.TimeSync; using QSB.TimeSync;
using QSB.WorldSync; using QSB.WorldSync;
using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using UnityEngine; using UnityEngine;
namespace QSB.Utility namespace QSB.Utility
@ -60,6 +66,13 @@ namespace QSB.Utility
GUI.Label(new Rect(x, currentOffset, FixedWidth, 20f), text, guiStyle); GUI.Label(new Rect(x, currentOffset, FixedWidth, 20f), text, guiStyle);
} }
private void WriteLine(int collumnID, string text, Color color)
{
guiStyle.normal.textColor = color;
WriteLine(collumnID, text);
guiStyle.normal.textColor = Color.white;
}
public void OnGUI() public void OnGUI()
{ {
if (!QSBCore.DebugMode) if (!QSBCore.DebugMode)
@ -94,10 +107,13 @@ namespace QSB.Utility
} }
else if (currentState != WakeUpSync.State.Loaded && currentState != WakeUpSync.State.NotLoaded && reason == null) else if (currentState != WakeUpSync.State.Loaded && currentState != WakeUpSync.State.NotLoaded && reason == null)
{ {
WriteLine(1, $"Reason : NULL"); WriteLine(1, $"Reason : NULL", Color.red);
} }
WriteLine(1, $"Time Difference : {WakeUpSync.LocalInstance.GetTimeDifference()}"); WriteLine(1, $"Time Difference : {WakeUpSync.LocalInstance.GetTimeDifference()}");
WriteLine(1, $"Timescale : {OWTime.GetTimeScale()}"); WriteLine(1, $"Timescale : {OWTime.GetTimeScale()}");
WriteLine(1, $"Time Remaining : {Mathf.Floor(TimeLoop.GetSecondsRemaining() / 60f)}:{Mathf.Round(TimeLoop.GetSecondsRemaining() % 60f * 100f / 100f)}");
WriteLine(1, $"Loop Count : {TimeLoop.GetLoopCount()}");
} }
#endregion #endregion
@ -106,41 +122,91 @@ namespace QSB.Utility
WriteLine(2, $"Player data :"); WriteLine(2, $"Player data :");
foreach (var player in QSBPlayerManager.PlayerList) foreach (var player in QSBPlayerManager.PlayerList)
{ {
if (player == null)
{
WriteLine(2, $"NULL PLAYER", Color.red);
continue;
}
WriteLine(2, $"{player.PlayerId}.{player.Name}"); WriteLine(2, $"{player.PlayerId}.{player.Name}");
WriteLine(2, $"State : {player.State}"); WriteLine(2, $"State : {player.State}");
WriteLine(2, $"Dead : {player.IsDead}"); WriteLine(2, $"Dead : {player.IsDead}");
WriteLine(2, $"Visible : {player.Visible}"); WriteLine(2, $"Visible : {player.Visible}");
WriteLine(2, $"Ready : {player.IsReady}");
WriteLine(2, $"Suited Up : {player.SuitedUp}");
if (player.PlayerStates.IsReady && QSBCore.WorldObjectsReady) if (player.IsReady && QSBCore.WorldObjectsReady)
{ {
var networkTransform = player.TransformSync; var networkTransform = player.TransformSync;
var referenceSector = networkTransform.ReferenceSector; var referenceSector = networkTransform.ReferenceSector;
var referenceTransform = networkTransform.ReferenceTransform; var referenceTransform = networkTransform.ReferenceTransform;
var parent = networkTransform.AttachedObject?.transform.parent; var parent = networkTransform.AttachedObject?.transform.parent;
var intermediary = networkTransform.GetValue<IntermediaryTransform>("_intermediaryTransform");
var interTransform = intermediary.GetReferenceTransform();
WriteLine(2, $" - L.Pos : {networkTransform.transform.localPosition}"); WriteLine(2, $" - Ref. Sector : {(referenceSector == null ? "NULL" : referenceSector.Name)}", referenceSector == null ? Color.red : Color.white);
WriteLine(2, $" - Ref. Sector : {(referenceSector == null ? "NULL" : referenceSector.Name)}"); WriteLine(2, $" - Ref. Transform : {(referenceTransform == null ? "NULL" : referenceTransform.name)}", referenceTransform == null ? Color.red : Color.white);
WriteLine(2, $" - Ref. Transform : {(referenceTransform == null ? "NULL" : referenceTransform.name)}"); WriteLine(2, $" - Parent : {(parent == null ? "NULL" : parent.name)}", parent == null ? Color.red : Color.white);
WriteLine(2, $" - Inter. Ref. Transform : {(interTransform == null ? "NULL" : interTransform.name)}");
WriteLine(2, $" - Parent : {(parent == null ? "NULL" : parent.name)}");
/*
var probeSync = SyncBase.GetPlayers<PlayerProbeSync>(player);
if (probeSync != default)
{
var probeSector = probeSync.ReferenceSector;
GUI.Label(new Rect(420, offset2, 400f, 20f), $" - Probe Sector : {(probeSector == null ? "NULL" : probeSector.Name)}", guiStyle);
offset2 += _debugLineSpacing;
}
*/
} }
} }
#endregion #endregion
#region Column3 - Ship data
WriteLine(3, $"Current Flyer : {ShipManager.Instance.CurrentFlyer}");
if (ShipTransformSync.LocalInstance != null)
{
var instance = ShipTransformSync.LocalInstance;
if (QSBCore.IsHost)
{
WriteLine(3, $"Current Owner : {instance.NetIdentity.ClientAuthorityOwner.GetPlayerId()}");
}
var sector = instance.ReferenceSector;
WriteLine(3, $"Ref. Sector : {(sector != null ? sector.Name : "NULL")}", sector == null ? Color.red : Color.white);
var transform = instance.ReferenceTransform;
WriteLine(3, $"Ref. Transform : {(transform != null ? transform.name : "NULL")}", transform == null ? Color.red : Color.white);
}
else
{
WriteLine(3, $"ShipTransformSync.LocalInstance is null.", Color.red);
}
WriteLine(3, $"QSBShipComponent");
foreach (var component in QSBWorldSync.GetWorldObjects<QSBShipComponent>())
{
var attachedObject = component.AttachedObject;
if (attachedObject == null)
{
WriteLine(3, $"- {component.ObjectId} NULL ATTACHEDOBJECT", Color.red);
}
else
{
WriteLine(3, $"- {component.AttachedObject.name} RepairFraction:{component.AttachedObject._repairFraction}");
}
}
WriteLine(3, $"QSBShipHull");
foreach (var hull in QSBWorldSync.GetWorldObjects<QSBShipHull>())
{
var attachedObject = hull.AttachedObject;
if (attachedObject == null)
{
WriteLine(3, $"- {hull.ObjectId} NULL ATTACHEDOBJECT", Color.red);
}
else
{
WriteLine(3, $"- {hull.AttachedObject.name}, Integrity:{hull.AttachedObject.integrity}");
}
}
#endregion
#region Column4 - Quantum Object Possesion
foreach (var player in QSBPlayerManager.PlayerList) foreach (var player in QSBPlayerManager.PlayerList)
{ {
if (player == null)
{
WriteLine(4, $"- NULL PLAYER", Color.red);
continue;
}
WriteLine(4, $"- {player.PlayerId}.{player.Name}"); WriteLine(4, $"- {player.PlayerId}.{player.Name}");
var allQuantumObjects = QSBWorldSync.GetWorldObjects<IQSBQuantumObject>(); var allQuantumObjects = QSBWorldSync.GetWorldObjects<IQSBQuantumObject>();
var ownedQuantumObjects = allQuantumObjects.Where(x => x.ControllingPlayer == player.PlayerId); var ownedQuantumObjects = allQuantumObjects.Where(x => x.ControllingPlayer == player.PlayerId);
@ -148,9 +214,17 @@ namespace QSB.Utility
foreach (var quantumObject in ownedQuantumObjects) foreach (var quantumObject in ownedQuantumObjects)
{ {
var qsbObj = quantumObject as IWorldObject; var qsbObj = quantumObject as IWorldObject;
WriteLine(4, $"{qsbObj.Name} ({qsbObj.ObjectId})"); if (qsbObj == null)
{
WriteLine(4, $"NULL QSBOBJ", Color.red);
}
else
{
WriteLine(4, $"{qsbObj.Name} ({qsbObj.ObjectId})");
}
} }
} }
#endregion
} }
} }
} }

View File

@ -87,7 +87,6 @@ namespace Popcron
//instance = new GameObject(typeof(GizmosInstance).FullName).AddComponent<GizmosInstance>(); //instance = new GameObject(typeof(GizmosInstance).FullName).AddComponent<GizmosInstance>();
//instance.gameObject.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector; //instance.gameObject.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector;
instance = Locator.GetPlayerCamera().gameObject.AddComponent<GizmosInstance>(); instance = Locator.GetPlayerCamera().gameObject.AddComponent<GizmosInstance>();
DebugLog.DebugWrite("CREATE GIZMOS INSTANCE!");
} }
} }

View File

@ -44,13 +44,13 @@ namespace QSB.WorldSync
return; return;
} }
if (QSBPlayerManager.LocalPlayer.PlayerStates.IsReady) if (QSBPlayerManager.LocalPlayer.IsReady)
{ {
DoRebuild(scene); DoRebuild(scene);
return; return;
} }
QSBCore.UnityEvents.RunWhen(() => QSBPlayerManager.LocalPlayer.PlayerStates.IsReady, () => DoRebuild(scene)); QSBCore.UnityEvents.RunWhen(() => QSBPlayerManager.LocalPlayer.IsReady, () => DoRebuild(scene));
} }
private static void DoRebuild(OWScene scene) private static void DoRebuild(OWScene scene)