diff --git a/QSB/Utility/VariableSync/BaseVariableSyncer.cs b/QSB/Utility/VariableSync/BaseVariableSyncer.cs index c2e884b1..1bc15024 100644 --- a/QSB/Utility/VariableSync/BaseVariableSyncer.cs +++ b/QSB/Utility/VariableSync/BaseVariableSyncer.cs @@ -17,6 +17,8 @@ namespace QSB.Utility.VariableSync public abstract void WriteData(QNetworkWriter writer); public abstract void ReadData(QNetworkReader writer); + public bool Ready => _ready; + public virtual void Awake() { QNetworkServer.instance.m_SimpleServerSimple.RegisterHandlerSafe(short.MaxValue, HandleVariable); diff --git a/QSB/Utility/VariableSync/BoolVariableSyncer.cs b/QSB/Utility/VariableSync/BoolVariableSyncer.cs index 58040b6b..874fadca 100644 --- a/QSB/Utility/VariableSync/BoolVariableSyncer.cs +++ b/QSB/Utility/VariableSync/BoolVariableSyncer.cs @@ -5,10 +5,11 @@ namespace QSB.Utility.VariableSync { public class BoolVariableSyncer : BaseVariableSyncer { - public VariableReference ValueToSync { get; private set; } = new(); + public VariableReference ValueToSync { get; private set; } public void Init(Func getter, Action setter) { + ValueToSync = new(this); ValueToSync.Getter = getter; ValueToSync.Setter = setter; _ready = true; @@ -18,9 +19,27 @@ namespace QSB.Utility.VariableSync => _ready = false; public override void WriteData(QNetworkWriter writer) - => writer.Write(ValueToSync.Value); + { + if (Ready) + { + writer.Write(ValueToSync.Value); + } + else + { + writer.Write(default(bool)); + } + } - public override void ReadData(QNetworkReader writer) - => ValueToSync.Value = writer.ReadBoolean(); + public override void ReadData(QNetworkReader reader) + { + if (Ready) + { + ValueToSync.Value = reader.ReadBoolean(); + } + else + { + reader.ReadBoolean(); + } + } } } diff --git a/QSB/Utility/VariableSync/FloatVariableSyncer.cs b/QSB/Utility/VariableSync/FloatVariableSyncer.cs index 37cbe735..5a49bf5d 100644 --- a/QSB/Utility/VariableSync/FloatVariableSyncer.cs +++ b/QSB/Utility/VariableSync/FloatVariableSyncer.cs @@ -5,10 +5,11 @@ namespace QSB.Utility.VariableSync { public class FloatVariableSyncer : BaseVariableSyncer { - public VariableReference ValueToSync { get; private set; } = new(); + public VariableReference ValueToSync { get; private set; } public void Init(Func getter, Action setter) { + ValueToSync = new(this); ValueToSync.Getter = getter; ValueToSync.Setter = setter; _ready = true; @@ -18,9 +19,27 @@ namespace QSB.Utility.VariableSync => _ready = false; public override void WriteData(QNetworkWriter writer) - => writer.Write(ValueToSync.Value); + { + if (Ready) + { + writer.Write(ValueToSync.Value); + } + else + { + writer.Write(default(float)); + } + } - public override void ReadData(QNetworkReader writer) - => ValueToSync.Value = writer.ReadSingle(); + public override void ReadData(QNetworkReader reader) + { + if (Ready) + { + ValueToSync.Value = reader.ReadSingle(); + } + else + { + reader.ReadSingle(); + } + } } } diff --git a/QSB/Utility/VariableSync/VariableReference.cs b/QSB/Utility/VariableSync/VariableReference.cs index cf2f6006..f2343bb5 100644 --- a/QSB/Utility/VariableSync/VariableReference.cs +++ b/QSB/Utility/VariableSync/VariableReference.cs @@ -1,14 +1,17 @@ -using QSB.Player; -using QSB.Player.TransformSync; -using System; +using System; namespace QSB.Utility.VariableSync { public class VariableReference { + private BaseVariableSyncer _owner; + public Func Getter; public Action Setter; + public VariableReference(BaseVariableSyncer owner) + => _owner = owner; + public T Value { get @@ -19,7 +22,7 @@ namespace QSB.Utility.VariableSync } else { - if (PlayerTransformSync.LocalInstance != null && QSBPlayerManager.LocalPlayer.IsReady) + if (_owner.Ready) { DebugLog.ToConsole($"Warning - Getter is null!", OWML.Common.MessageType.Warning); } @@ -35,7 +38,7 @@ namespace QSB.Utility.VariableSync } else { - if (PlayerTransformSync.LocalInstance != null && QSBPlayerManager.LocalPlayer.IsReady) + if (_owner.Ready) { DebugLog.ToConsole($"Warning - Setter is null!", OWML.Common.MessageType.Warning); } diff --git a/QSB/Utility/VariableSync/Vector3VariableSyncer.cs b/QSB/Utility/VariableSync/Vector3VariableSyncer.cs index bc91b37b..4c8ad761 100644 --- a/QSB/Utility/VariableSync/Vector3VariableSyncer.cs +++ b/QSB/Utility/VariableSync/Vector3VariableSyncer.cs @@ -6,10 +6,11 @@ namespace QSB.Utility.VariableSync { public class Vector3VariableSyncer : BaseVariableSyncer { - public VariableReference ValueToSync { get; private set; } = new(); + public VariableReference ValueToSync { get; private set; } public void Init(Func getter, Action setter) { + ValueToSync = new(this); ValueToSync.Getter = getter; ValueToSync.Setter = setter; _ready = true; @@ -19,9 +20,27 @@ namespace QSB.Utility.VariableSync => _ready = false; public override void WriteData(QNetworkWriter writer) - => writer.Write(ValueToSync.Value); + { + if (Ready) + { + writer.Write(ValueToSync.Value); + } + else + { + writer.Write(default(Vector3)); + } + } - public override void ReadData(QNetworkReader writer) - => ValueToSync.Value = writer.ReadVector3(); + public override void ReadData(QNetworkReader reader) + { + if (Ready) + { + ValueToSync.Value = reader.ReadVector3(); + } + else + { + reader.ReadVector3(); + } + } } }