From 108fe3da04a5dbecaedca022f32c12c1e12b9144 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Sun, 26 Dec 2021 20:10:38 -0800 Subject: [PATCH] greatly simplified nomai text object/message --- QSB/MeteorSync/MeteorManager.cs | 2 +- .../Messages/RequestStateResyncMessage.cs | 19 ++------ .../Messages/SetAsTranslatedMessage.cs | 25 +++-------- .../TranslationSync/Patches/SpiralPatches.cs | 44 ++++--------------- .../TranslationSync/SpiralManager.cs | 10 +++-- .../WorldObjects/QSBComputer.cs | 40 ----------------- .../WorldObjects/QSBNomaiText.cs | 16 +++++++ .../WorldObjects/QSBVesselComputer.cs | 28 ------------ .../WorldObjects/QSBWallText.cs | 25 ----------- 9 files changed, 41 insertions(+), 168 deletions(-) delete mode 100644 QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBComputer.cs create mode 100644 QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBNomaiText.cs delete mode 100644 QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBVesselComputer.cs delete mode 100644 QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBWallText.cs diff --git a/QSB/MeteorSync/MeteorManager.cs b/QSB/MeteorSync/MeteorManager.cs index 7ddfbc9d..53c914a1 100644 --- a/QSB/MeteorSync/MeteorManager.cs +++ b/QSB/MeteorSync/MeteorManager.cs @@ -14,7 +14,7 @@ namespace QSB.MeteorSync { // wait for all late initializers (which includes meteor launchers) to finish StartDelayedReady(); - QSBCore.UnityEvents.RunWhen(() => LateInitializerManager.s_lateInitializers.Count == 0, () => + QSBCore.UnityEvents.RunWhen(() => LateInitializerManager.isDoneInitializing, () => { FinishDelayedReady(); WhiteHoleVolume = QSBWorldSync.GetUnityObjects().First(); diff --git a/QSB/Player/Messages/RequestStateResyncMessage.cs b/QSB/Player/Messages/RequestStateResyncMessage.cs index 3a71bd7a..8c927f12 100644 --- a/QSB/Player/Messages/RequestStateResyncMessage.cs +++ b/QSB/Player/Messages/RequestStateResyncMessage.cs @@ -1,5 +1,4 @@ using OWML.Common; -using OWML.Utils; using QSB.CampfireSync.Messages; using QSB.CampfireSync.WorldObjects; using QSB.ClientServerStateSync; @@ -92,22 +91,10 @@ namespace QSB.Player.Messages QSBWorldSync.ShipLogFacts.ForEach(fact => new RevealFactMessage(fact.Id, fact.SaveGame, false) { To = From }.Send()); - foreach (var wallText in QSBWorldSync.GetWorldObjects().Where(x => x.AttachedObject.GetValue("_initialized") && x.AttachedObject.GetNumTextBlocks() > 0)) + foreach (var text in QSBWorldSync.GetWorldObjects()) { - wallText.GetTranslatedIds().ForEach(id - => wallText.SendMessage(new WallTextTranslatedMessage(id) { To = From })); - } - - foreach (var computer in QSBWorldSync.GetWorldObjects().Where(x => x.AttachedObject.GetValue("_initialized") && x.AttachedObject.GetNumTextBlocks() > 0)) - { - computer.GetTranslatedIds().ForEach(id - => computer.SendMessage(new ComputerTranslatedMessage(id) { To = From })); - } - - foreach (var vesselComputer in QSBWorldSync.GetWorldObjects().Where(x => x.AttachedObject.GetValue("_initialized") && x.AttachedObject.GetNumTextBlocks() > 0)) - { - vesselComputer.GetTranslatedIds().ForEach(id - => vesselComputer.SendMessage(new VesselComputerTranslatedMessage(id) { To = From })); + text.GetTranslatedIds().ForEach(id => + text.SendMessage(new SetAsTranslatedMessage(id) { To = From })); } QSBWorldSync.GetWorldObjects().ForEach(x => diff --git a/QSB/Tools/TranslatorTool/TranslationSync/Messages/SetAsTranslatedMessage.cs b/QSB/Tools/TranslatorTool/TranslationSync/Messages/SetAsTranslatedMessage.cs index dad36588..c79dfa4a 100644 --- a/QSB/Tools/TranslatorTool/TranslationSync/Messages/SetAsTranslatedMessage.cs +++ b/QSB/Tools/TranslatorTool/TranslationSync/Messages/SetAsTranslatedMessage.cs @@ -1,13 +1,14 @@ using QSB.Messaging; using QSB.Tools.TranslatorTool.TranslationSync.WorldObjects; -using QSB.WorldSync; using QuantumUNET.Transport; namespace QSB.Tools.TranslatorTool.TranslationSync.Messages { - internal abstract class SetAsTranslatedMessage : QSBWorldObjectMessage where T : IWorldObject + internal class SetAsTranslatedMessage : QSBWorldObjectMessage { - protected int TextId; + private int TextId; + + public SetAsTranslatedMessage(int textId) => TextId = textId; public override void Serialize(QNetworkWriter writer) { @@ -20,23 +21,7 @@ namespace QSB.Tools.TranslatorTool.TranslationSync.Messages base.Deserialize(reader); TextId = reader.ReadInt32(); } - } - internal class WallTextTranslatedMessage : SetAsTranslatedMessage - { - public WallTextTranslatedMessage(int textId) => TextId = textId; - public override void OnReceiveRemote() => WorldObject.HandleSetAsTranslated(TextId); - } - - internal class ComputerTranslatedMessage : SetAsTranslatedMessage - { - public ComputerTranslatedMessage(int textId) => TextId = textId; - public override void OnReceiveRemote() => WorldObject.HandleSetAsTranslated(TextId); - } - - internal class VesselComputerTranslatedMessage : SetAsTranslatedMessage - { - public VesselComputerTranslatedMessage(int textId) => TextId = textId; - public override void OnReceiveRemote() => WorldObject.HandleSetAsTranslated(TextId); + public override void OnReceiveRemote() => WorldObject.SetAsTranslated(TextId); } } \ No newline at end of file diff --git a/QSB/Tools/TranslatorTool/TranslationSync/Patches/SpiralPatches.cs b/QSB/Tools/TranslatorTool/TranslationSync/Patches/SpiralPatches.cs index d17a1f6e..122d4cb2 100644 --- a/QSB/Tools/TranslatorTool/TranslationSync/Patches/SpiralPatches.cs +++ b/QSB/Tools/TranslatorTool/TranslationSync/Patches/SpiralPatches.cs @@ -7,51 +7,25 @@ using QSB.WorldSync; namespace QSB.Tools.TranslatorTool.TranslationSync.Patches { - [HarmonyPatch] internal class SpiralPatches : QSBPatch { public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect; [HarmonyPrefix] - [HarmonyPatch(typeof(NomaiWallText), nameof(NomaiWallText.SetAsTranslated))] - public static bool NomaiWallText_SetAsTranslated(NomaiWallText __instance, int id) + [HarmonyPatch(typeof(NomaiText), nameof(NomaiText.SetAsTranslated))] + public static void SetAsTranslated(NomaiText __instance, int id) { + if (__instance is GhostWallText) + { + return; + } if (__instance.IsTranslated(id)) { - return true; + return; } - __instance.GetWorldObject() - .SendMessage(new WallTextTranslatedMessage(id)); - return true; - } - - [HarmonyPrefix] - [HarmonyPatch(typeof(NomaiComputer), nameof(NomaiWallText.SetAsTranslated))] - public static bool NomaiComputer_SetAsTranslated(NomaiComputer __instance, int id) - { - if (__instance.IsTranslated(id)) - { - return true; - } - - __instance.GetWorldObject() - .SendMessage(new ComputerTranslatedMessage(id)); - return true; - } - - [HarmonyPrefix] - [HarmonyPatch(typeof(NomaiVesselComputer), nameof(NomaiWallText.SetAsTranslated))] - public static bool NomaiVesselComputer_SetAsTranslated(NomaiVesselComputer __instance, int id) - { - if (__instance.IsTranslated(id)) - { - return true; - } - - __instance.GetWorldObject() - .SendMessage(new VesselComputerTranslatedMessage(id)); - return true; + __instance.GetWorldObject() + .SendMessage(new SetAsTranslatedMessage(id)); } } } diff --git a/QSB/Tools/TranslatorTool/TranslationSync/SpiralManager.cs b/QSB/Tools/TranslatorTool/TranslationSync/SpiralManager.cs index 9d3b6bad..bdd13508 100644 --- a/QSB/Tools/TranslatorTool/TranslationSync/SpiralManager.cs +++ b/QSB/Tools/TranslatorTool/TranslationSync/SpiralManager.cs @@ -9,9 +9,13 @@ namespace QSB.Tools.TranslatorTool.TranslationSync protected override void RebuildWorldObjects(OWScene scene) { - QSBWorldSync.Init(); - QSBWorldSync.Init(); - QSBWorldSync.Init(); + // wait for all late initializers (which includes nomai text) to finish + StartDelayedReady(); + QSBCore.UnityEvents.RunWhen(() => LateInitializerManager.isDoneInitializing, () => + { + FinishDelayedReady(); + QSBWorldSync.Init(typeof(GhostWallText)); + }); } } } diff --git a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBComputer.cs b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBComputer.cs deleted file mode 100644 index 7e6cd03d..00000000 --- a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBComputer.cs +++ /dev/null @@ -1,40 +0,0 @@ -using OWML.Utils; -using QSB.WorldSync; -using System.Collections.Generic; - -namespace QSB.Tools.TranslatorTool.TranslationSync.WorldObjects -{ - internal class QSBComputer : WorldObject - { - public void HandleSetAsTranslated(int id) - { - if (AttachedObject.IsTranslated(id)) - { - return; - } - - AttachedObject.SetAsTranslated(id); - } - - public IEnumerable GetTranslatedIds() - { - var activeList = AttachedObject.GetValue>("_activeRingList"); - foreach (var item in activeList) - { - if (AttachedObject.IsTranslated(item.GetEntryID())) - { - yield return item.GetEntryID(); - } - } - - var inactiveList = AttachedObject.GetValue>("_inactiveRingList"); - foreach (var item in inactiveList) - { - if (AttachedObject.IsTranslated(item.GetEntryID())) - { - yield return item.GetEntryID(); - } - } - } - } -} diff --git a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBNomaiText.cs b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBNomaiText.cs new file mode 100644 index 00000000..58938788 --- /dev/null +++ b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBNomaiText.cs @@ -0,0 +1,16 @@ +using QSB.WorldSync; +using System.Collections.Generic; +using System.Linq; + +namespace QSB.Tools.TranslatorTool.TranslationSync.WorldObjects +{ + internal class QSBNomaiText : WorldObject + { + public void SetAsTranslated(int id) => AttachedObject.SetAsTranslated(id); + + public IEnumerable GetTranslatedIds() => + AttachedObject._dictNomaiTextData + .Where(x => x.Value.IsTranslated) + .Select(x => x.Key); + } +} diff --git a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBVesselComputer.cs b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBVesselComputer.cs deleted file mode 100644 index f993e914..00000000 --- a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBVesselComputer.cs +++ /dev/null @@ -1,28 +0,0 @@ -using OWML.Utils; -using QSB.WorldSync; -using System.Collections.Generic; -using System.Linq; - -namespace QSB.Tools.TranslatorTool.TranslationSync.WorldObjects -{ - internal class QSBVesselComputer : WorldObject - { - public void HandleSetAsTranslated(int id) - { - if (AttachedObject.IsTranslated(id)) - { - return; - } - - AttachedObject.SetAsTranslated(id); - } - - public IEnumerable GetTranslatedIds() - { - var rings = AttachedObject.GetValue("_computerRings"); - return rings - .Where(ring => AttachedObject.IsTranslated(ring.GetEntryID())) - .Select(ring => ring.GetEntryID()); - } - } -} \ No newline at end of file diff --git a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBWallText.cs b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBWallText.cs deleted file mode 100644 index 2102f50d..00000000 --- a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBWallText.cs +++ /dev/null @@ -1,25 +0,0 @@ -using QSB.WorldSync; -using System.Collections.Generic; -using System.Linq; - -namespace QSB.Tools.TranslatorTool.TranslationSync.WorldObjects -{ - internal class QSBWallText : WorldObject - { - public void HandleSetAsTranslated(int id) - { - if (AttachedObject.IsTranslated(id)) - { - return; - } - - AttachedObject.SetAsTranslated(id); - } - - public IEnumerable GetTranslatedIds() - { - var dict = AttachedObject._idToNodeDict; - return dict.Keys.Where(key => AttachedObject.IsTranslated(key)); - } - } -}