mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-13 12:40:50 +00:00
greatly simplified nomai text object/message
This commit is contained in:
parent
942f28a65b
commit
108fe3da04
@ -14,7 +14,7 @@ namespace QSB.MeteorSync
|
|||||||
{
|
{
|
||||||
// wait for all late initializers (which includes meteor launchers) to finish
|
// wait for all late initializers (which includes meteor launchers) to finish
|
||||||
StartDelayedReady();
|
StartDelayedReady();
|
||||||
QSBCore.UnityEvents.RunWhen(() => LateInitializerManager.s_lateInitializers.Count == 0, () =>
|
QSBCore.UnityEvents.RunWhen(() => LateInitializerManager.isDoneInitializing, () =>
|
||||||
{
|
{
|
||||||
FinishDelayedReady();
|
FinishDelayedReady();
|
||||||
WhiteHoleVolume = QSBWorldSync.GetUnityObjects<WhiteHoleVolume>().First();
|
WhiteHoleVolume = QSBWorldSync.GetUnityObjects<WhiteHoleVolume>().First();
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using OWML.Utils;
|
|
||||||
using QSB.CampfireSync.Messages;
|
using QSB.CampfireSync.Messages;
|
||||||
using QSB.CampfireSync.WorldObjects;
|
using QSB.CampfireSync.WorldObjects;
|
||||||
using QSB.ClientServerStateSync;
|
using QSB.ClientServerStateSync;
|
||||||
@ -92,22 +91,10 @@ namespace QSB.Player.Messages
|
|||||||
QSBWorldSync.ShipLogFacts.ForEach(fact
|
QSBWorldSync.ShipLogFacts.ForEach(fact
|
||||||
=> new RevealFactMessage(fact.Id, fact.SaveGame, false) { To = From }.Send());
|
=> new RevealFactMessage(fact.Id, fact.SaveGame, false) { To = From }.Send());
|
||||||
|
|
||||||
foreach (var wallText in QSBWorldSync.GetWorldObjects<QSBWallText>().Where(x => x.AttachedObject.GetValue<bool>("_initialized") && x.AttachedObject.GetNumTextBlocks() > 0))
|
foreach (var text in QSBWorldSync.GetWorldObjects<QSBNomaiText>())
|
||||||
{
|
{
|
||||||
wallText.GetTranslatedIds().ForEach(id
|
text.GetTranslatedIds().ForEach(id =>
|
||||||
=> wallText.SendMessage(new WallTextTranslatedMessage(id) { To = From }));
|
text.SendMessage(new SetAsTranslatedMessage(id) { To = From }));
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var computer in QSBWorldSync.GetWorldObjects<QSBComputer>().Where(x => x.AttachedObject.GetValue<bool>("_initialized") && x.AttachedObject.GetNumTextBlocks() > 0))
|
|
||||||
{
|
|
||||||
computer.GetTranslatedIds().ForEach(id
|
|
||||||
=> computer.SendMessage(new ComputerTranslatedMessage(id) { To = From }));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var vesselComputer in QSBWorldSync.GetWorldObjects<QSBVesselComputer>().Where(x => x.AttachedObject.GetValue<bool>("_initialized") && x.AttachedObject.GetNumTextBlocks() > 0))
|
|
||||||
{
|
|
||||||
vesselComputer.GetTranslatedIds().ForEach(id
|
|
||||||
=> vesselComputer.SendMessage(new VesselComputerTranslatedMessage(id) { To = From }));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QSBWorldSync.GetWorldObjects<IQSBQuantumObject>().ForEach(x =>
|
QSBWorldSync.GetWorldObjects<IQSBQuantumObject>().ForEach(x =>
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
using QSB.Tools.TranslatorTool.TranslationSync.WorldObjects;
|
using QSB.Tools.TranslatorTool.TranslationSync.WorldObjects;
|
||||||
using QSB.WorldSync;
|
|
||||||
using QuantumUNET.Transport;
|
using QuantumUNET.Transport;
|
||||||
|
|
||||||
namespace QSB.Tools.TranslatorTool.TranslationSync.Messages
|
namespace QSB.Tools.TranslatorTool.TranslationSync.Messages
|
||||||
{
|
{
|
||||||
internal abstract class SetAsTranslatedMessage<T> : QSBWorldObjectMessage<T> where T : IWorldObject
|
internal class SetAsTranslatedMessage : QSBWorldObjectMessage<QSBNomaiText>
|
||||||
{
|
{
|
||||||
protected int TextId;
|
private int TextId;
|
||||||
|
|
||||||
|
public SetAsTranslatedMessage(int textId) => TextId = textId;
|
||||||
|
|
||||||
public override void Serialize(QNetworkWriter writer)
|
public override void Serialize(QNetworkWriter writer)
|
||||||
{
|
{
|
||||||
@ -20,23 +21,7 @@ namespace QSB.Tools.TranslatorTool.TranslationSync.Messages
|
|||||||
base.Deserialize(reader);
|
base.Deserialize(reader);
|
||||||
TextId = reader.ReadInt32();
|
TextId = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
internal class WallTextTranslatedMessage : SetAsTranslatedMessage<QSBWallText>
|
public override void OnReceiveRemote() => WorldObject.SetAsTranslated(TextId);
|
||||||
{
|
|
||||||
public WallTextTranslatedMessage(int textId) => TextId = textId;
|
|
||||||
public override void OnReceiveRemote() => WorldObject.HandleSetAsTranslated(TextId);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class ComputerTranslatedMessage : SetAsTranslatedMessage<QSBComputer>
|
|
||||||
{
|
|
||||||
public ComputerTranslatedMessage(int textId) => TextId = textId;
|
|
||||||
public override void OnReceiveRemote() => WorldObject.HandleSetAsTranslated(TextId);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class VesselComputerTranslatedMessage : SetAsTranslatedMessage<QSBVesselComputer>
|
|
||||||
{
|
|
||||||
public VesselComputerTranslatedMessage(int textId) => TextId = textId;
|
|
||||||
public override void OnReceiveRemote() => WorldObject.HandleSetAsTranslated(TextId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -7,51 +7,25 @@ using QSB.WorldSync;
|
|||||||
|
|
||||||
namespace QSB.Tools.TranslatorTool.TranslationSync.Patches
|
namespace QSB.Tools.TranslatorTool.TranslationSync.Patches
|
||||||
{
|
{
|
||||||
[HarmonyPatch]
|
|
||||||
internal class SpiralPatches : QSBPatch
|
internal class SpiralPatches : QSBPatch
|
||||||
{
|
{
|
||||||
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
||||||
|
|
||||||
[HarmonyPrefix]
|
[HarmonyPrefix]
|
||||||
[HarmonyPatch(typeof(NomaiWallText), nameof(NomaiWallText.SetAsTranslated))]
|
[HarmonyPatch(typeof(NomaiText), nameof(NomaiText.SetAsTranslated))]
|
||||||
public static bool NomaiWallText_SetAsTranslated(NomaiWallText __instance, int id)
|
public static void SetAsTranslated(NomaiText __instance, int id)
|
||||||
{
|
{
|
||||||
|
if (__instance is GhostWallText)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (__instance.IsTranslated(id))
|
if (__instance.IsTranslated(id))
|
||||||
{
|
{
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
__instance.GetWorldObject<QSBWallText>()
|
__instance.GetWorldObject<QSBNomaiText>()
|
||||||
.SendMessage(new WallTextTranslatedMessage(id));
|
.SendMessage(new SetAsTranslatedMessage(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<QSBComputer>()
|
|
||||||
.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<QSBVesselComputer>()
|
|
||||||
.SendMessage(new VesselComputerTranslatedMessage(id));
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,9 +9,13 @@ namespace QSB.Tools.TranslatorTool.TranslationSync
|
|||||||
|
|
||||||
protected override void RebuildWorldObjects(OWScene scene)
|
protected override void RebuildWorldObjects(OWScene scene)
|
||||||
{
|
{
|
||||||
QSBWorldSync.Init<QSBWallText, NomaiWallText>();
|
// wait for all late initializers (which includes nomai text) to finish
|
||||||
QSBWorldSync.Init<QSBComputer, NomaiComputer>();
|
StartDelayedReady();
|
||||||
QSBWorldSync.Init<QSBVesselComputer, NomaiVesselComputer>();
|
QSBCore.UnityEvents.RunWhen(() => LateInitializerManager.isDoneInitializing, () =>
|
||||||
|
{
|
||||||
|
FinishDelayedReady();
|
||||||
|
QSBWorldSync.Init<QSBNomaiText, NomaiText>(typeof(GhostWallText));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
using OWML.Utils;
|
|
||||||
using QSB.WorldSync;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace QSB.Tools.TranslatorTool.TranslationSync.WorldObjects
|
|
||||||
{
|
|
||||||
internal class QSBComputer : WorldObject<NomaiComputer>
|
|
||||||
{
|
|
||||||
public void HandleSetAsTranslated(int id)
|
|
||||||
{
|
|
||||||
if (AttachedObject.IsTranslated(id))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
AttachedObject.SetAsTranslated(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<int> GetTranslatedIds()
|
|
||||||
{
|
|
||||||
var activeList = AttachedObject.GetValue<List<NomaiComputerRing>>("_activeRingList");
|
|
||||||
foreach (var item in activeList)
|
|
||||||
{
|
|
||||||
if (AttachedObject.IsTranslated(item.GetEntryID()))
|
|
||||||
{
|
|
||||||
yield return item.GetEntryID();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var inactiveList = AttachedObject.GetValue<List<NomaiComputerRing>>("_inactiveRingList");
|
|
||||||
foreach (var item in inactiveList)
|
|
||||||
{
|
|
||||||
if (AttachedObject.IsTranslated(item.GetEntryID()))
|
|
||||||
{
|
|
||||||
yield return item.GetEntryID();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,16 @@
|
|||||||
|
using QSB.WorldSync;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace QSB.Tools.TranslatorTool.TranslationSync.WorldObjects
|
||||||
|
{
|
||||||
|
internal class QSBNomaiText : WorldObject<NomaiText>
|
||||||
|
{
|
||||||
|
public void SetAsTranslated(int id) => AttachedObject.SetAsTranslated(id);
|
||||||
|
|
||||||
|
public IEnumerable<int> GetTranslatedIds() =>
|
||||||
|
AttachedObject._dictNomaiTextData
|
||||||
|
.Where(x => x.Value.IsTranslated)
|
||||||
|
.Select(x => x.Key);
|
||||||
|
}
|
||||||
|
}
|
@ -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<NomaiVesselComputer>
|
|
||||||
{
|
|
||||||
public void HandleSetAsTranslated(int id)
|
|
||||||
{
|
|
||||||
if (AttachedObject.IsTranslated(id))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
AttachedObject.SetAsTranslated(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<int> GetTranslatedIds()
|
|
||||||
{
|
|
||||||
var rings = AttachedObject.GetValue<NomaiVesselComputerRing[]>("_computerRings");
|
|
||||||
return rings
|
|
||||||
.Where(ring => AttachedObject.IsTranslated(ring.GetEntryID()))
|
|
||||||
.Select(ring => ring.GetEntryID());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
using QSB.WorldSync;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace QSB.Tools.TranslatorTool.TranslationSync.WorldObjects
|
|
||||||
{
|
|
||||||
internal class QSBWallText : WorldObject<NomaiWallText>
|
|
||||||
{
|
|
||||||
public void HandleSetAsTranslated(int id)
|
|
||||||
{
|
|
||||||
if (AttachedObject.IsTranslated(id))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
AttachedObject.SetAsTranslated(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<int> GetTranslatedIds()
|
|
||||||
{
|
|
||||||
var dict = AttachedObject._idToNodeDict;
|
|
||||||
return dict.Keys.Where(key => AttachedObject.IsTranslated(key));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user