mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-09 09:39:57 +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
|
||||
StartDelayedReady();
|
||||
QSBCore.UnityEvents.RunWhen(() => LateInitializerManager.s_lateInitializers.Count == 0, () =>
|
||||
QSBCore.UnityEvents.RunWhen(() => LateInitializerManager.isDoneInitializing, () =>
|
||||
{
|
||||
FinishDelayedReady();
|
||||
WhiteHoleVolume = QSBWorldSync.GetUnityObjects<WhiteHoleVolume>().First();
|
||||
|
@ -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<QSBWallText>().Where(x => x.AttachedObject.GetValue<bool>("_initialized") && x.AttachedObject.GetNumTextBlocks() > 0))
|
||||
foreach (var text in QSBWorldSync.GetWorldObjects<QSBNomaiText>())
|
||||
{
|
||||
wallText.GetTranslatedIds().ForEach(id
|
||||
=> wallText.SendMessage(new WallTextTranslatedMessage(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 }));
|
||||
text.GetTranslatedIds().ForEach(id =>
|
||||
text.SendMessage(new SetAsTranslatedMessage(id) { To = From }));
|
||||
}
|
||||
|
||||
QSBWorldSync.GetWorldObjects<IQSBQuantumObject>().ForEach(x =>
|
||||
|
@ -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<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)
|
||||
{
|
||||
@ -20,23 +21,7 @@ namespace QSB.Tools.TranslatorTool.TranslationSync.Messages
|
||||
base.Deserialize(reader);
|
||||
TextId = reader.ReadInt32();
|
||||
}
|
||||
}
|
||||
|
||||
internal class WallTextTranslatedMessage : SetAsTranslatedMessage<QSBWallText>
|
||||
{
|
||||
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);
|
||||
public override void OnReceiveRemote() => WorldObject.SetAsTranslated(TextId);
|
||||
}
|
||||
}
|
@ -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<QSBWallText>()
|
||||
.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<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;
|
||||
__instance.GetWorldObject<QSBNomaiText>()
|
||||
.SendMessage(new SetAsTranslatedMessage(id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,9 +9,13 @@ namespace QSB.Tools.TranslatorTool.TranslationSync
|
||||
|
||||
protected override void RebuildWorldObjects(OWScene scene)
|
||||
{
|
||||
QSBWorldSync.Init<QSBWallText, NomaiWallText>();
|
||||
QSBWorldSync.Init<QSBComputer, NomaiComputer>();
|
||||
QSBWorldSync.Init<QSBVesselComputer, NomaiVesselComputer>();
|
||||
// wait for all late initializers (which includes nomai text) to finish
|
||||
StartDelayedReady();
|
||||
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