mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-03-17 04:21:02 +00:00
Merge branch 'dev' into tornadoes
This commit is contained in:
commit
8b177653d6
@ -1,8 +1,6 @@
|
||||
using QSB.Utility;
|
||||
using QSB.Utility.VariableSync;
|
||||
using QSB.Utility.VariableSync;
|
||||
using QuantumUNET;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Animation.Player
|
||||
{
|
||||
@ -46,7 +44,7 @@ namespace QSB.Animation.Player
|
||||
}
|
||||
|
||||
var jumpChargeFraction = _playerController.GetJumpCrouchFraction();
|
||||
CrouchVariableSyncer.ValueToSync.Value = jumpChargeFraction;
|
||||
CrouchValue = jumpChargeFraction;
|
||||
}
|
||||
|
||||
private void SyncRemoteCrouch()
|
||||
|
@ -8,19 +8,17 @@ namespace QSB.Animation.Player.Thrusters
|
||||
{
|
||||
public Vector3VariableSyncer AccelerationVariableSyncer;
|
||||
public BoolVariableSyncer ThrustingVariableSyncer;
|
||||
public Vector3 LocalAcceleration => AccelerationVariableSyncer.ValueToSync.Value;
|
||||
public bool IsThrusting => ThrustingVariableSyncer.ValueToSync.Value;
|
||||
public Vector3 LocalAcceleration { get; private set; }
|
||||
public bool IsThrusting { get; private set; }
|
||||
|
||||
private Vector3 _localAcceleration;
|
||||
private bool _isThrusting;
|
||||
private ThrusterModel _thrusterModel;
|
||||
|
||||
public void Init(ThrusterModel model)
|
||||
{
|
||||
_thrusterModel = model;
|
||||
|
||||
AccelerationVariableSyncer.Init(() => _localAcceleration, val => _localAcceleration = val);
|
||||
ThrustingVariableSyncer.Init(() => _isThrusting, val => _isThrusting = val);
|
||||
AccelerationVariableSyncer.Init(() => LocalAcceleration, val => LocalAcceleration = val);
|
||||
ThrustingVariableSyncer.Init(() => IsThrusting, val => IsThrusting = val);
|
||||
}
|
||||
|
||||
public void Update()
|
||||
@ -35,8 +33,8 @@ namespace QSB.Animation.Player.Thrusters
|
||||
{
|
||||
if (_thrusterModel != null)
|
||||
{
|
||||
AccelerationVariableSyncer.ValueToSync.Value = _thrusterModel.GetLocalAcceleration();
|
||||
ThrustingVariableSyncer.ValueToSync.Value = _thrusterModel.IsTranslationalThrusterFiring();
|
||||
LocalAcceleration = _thrusterModel.GetLocalAcceleration();
|
||||
IsThrusting = _thrusterModel.IsTranslationalThrusterFiring();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
using QuantumUNET;
|
||||
using QuantumUNET.Messages;
|
||||
using QuantumUNET.Transport;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.Utility.VariableSync
|
||||
@ -11,16 +10,15 @@ namespace QSB.Utility.VariableSync
|
||||
private float _lastClientSendTime;
|
||||
private QNetworkWriter _writer;
|
||||
private int _index;
|
||||
protected bool _ready;
|
||||
public bool Ready { get; protected set; }
|
||||
|
||||
public abstract void WriteData(QNetworkWriter writer);
|
||||
public abstract void ReadData(QNetworkReader writer);
|
||||
|
||||
public bool Ready => _ready;
|
||||
public abstract bool HasChanged();
|
||||
|
||||
public virtual void Awake()
|
||||
{
|
||||
QNetworkServer.instance.m_SimpleServerSimple.RegisterHandlerSafe(short.MaxValue, HandleVariable);
|
||||
QNetworkServer.RegisterHandlerSafe(short.MaxValue, HandleVariable);
|
||||
|
||||
if (LocalPlayerAuthority)
|
||||
{
|
||||
@ -29,7 +27,10 @@ namespace QSB.Utility.VariableSync
|
||||
}
|
||||
|
||||
public virtual void Start()
|
||||
=> _index = GetComponents<BaseVariableSyncer>().ToList().IndexOf(this);
|
||||
=> _index = GetComponents<BaseVariableSyncer>().IndexOfReference(this);
|
||||
|
||||
public void OnDestroy()
|
||||
=> Ready = false;
|
||||
|
||||
public override bool OnSerialize(QNetworkWriter writer, bool initialState)
|
||||
{
|
||||
@ -63,12 +64,12 @@ namespace QSB.Utility.VariableSync
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (!IsServer || SyncVarDirtyBits != 0U || !QNetworkServer.active || !_ready)
|
||||
if (!IsServer || SyncVarDirtyBits != 0U || !QNetworkServer.active || !Ready)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetNetworkSendInterval() != 0f)
|
||||
if (GetNetworkSendInterval() != 0f && HasChanged())
|
||||
{
|
||||
SetDirtyBit(1U);
|
||||
}
|
||||
@ -76,7 +77,7 @@ namespace QSB.Utility.VariableSync
|
||||
|
||||
public virtual void Update()
|
||||
{
|
||||
if (!HasAuthority || !LocalPlayerAuthority || QNetworkServer.active || !_ready)
|
||||
if (!HasAuthority || !LocalPlayerAuthority || QNetworkServer.active || !Ready)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -90,8 +91,7 @@ namespace QSB.Utility.VariableSync
|
||||
|
||||
private void SendVariable()
|
||||
{
|
||||
// TODO - this sends a message, even when the value hasnt changed! this is really bad!
|
||||
if (QClientScene.readyConnection != null)
|
||||
if (HasChanged() && QClientScene.readyConnection != null)
|
||||
{
|
||||
_writer.StartMessage(short.MaxValue);
|
||||
_writer.Write(NetId);
|
||||
|
@ -5,24 +5,21 @@ namespace QSB.Utility.VariableSync
|
||||
{
|
||||
public class BoolVariableSyncer : BaseVariableSyncer
|
||||
{
|
||||
public VariableReference<bool> ValueToSync { get; private set; }
|
||||
private VariableReference<bool> _ref;
|
||||
private bool _prevValue;
|
||||
|
||||
public void Init(Func<bool> getter, Action<bool> setter)
|
||||
{
|
||||
ValueToSync = new(this);
|
||||
ValueToSync.Getter = getter;
|
||||
ValueToSync.Setter = setter;
|
||||
_ready = true;
|
||||
_ref = new VariableReference<bool>(this, getter, setter);
|
||||
Ready = true;
|
||||
}
|
||||
|
||||
public void OnDestroy()
|
||||
=> _ready = false;
|
||||
|
||||
public override void WriteData(QNetworkWriter writer)
|
||||
{
|
||||
if (Ready)
|
||||
{
|
||||
writer.Write(ValueToSync.Value);
|
||||
writer.Write(_ref.Value);
|
||||
_prevValue = _ref.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -34,12 +31,14 @@ namespace QSB.Utility.VariableSync
|
||||
{
|
||||
if (Ready)
|
||||
{
|
||||
ValueToSync.Value = reader.ReadBoolean();
|
||||
_ref.Value = reader.ReadBoolean();
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.ReadBoolean();
|
||||
}
|
||||
}
|
||||
|
||||
public override bool HasChanged() => _ref.Value != _prevValue;
|
||||
}
|
||||
}
|
||||
|
@ -5,24 +5,21 @@ namespace QSB.Utility.VariableSync
|
||||
{
|
||||
public class FloatVariableSyncer : BaseVariableSyncer
|
||||
{
|
||||
public VariableReference<float> ValueToSync { get; private set; }
|
||||
private VariableReference<float> _ref;
|
||||
private float _prevValue;
|
||||
|
||||
public void Init(Func<float> getter, Action<float> setter)
|
||||
{
|
||||
ValueToSync = new(this);
|
||||
ValueToSync.Getter = getter;
|
||||
ValueToSync.Setter = setter;
|
||||
_ready = true;
|
||||
_ref = new VariableReference<float>(this, getter, setter);
|
||||
Ready = true;
|
||||
}
|
||||
|
||||
public void OnDestroy()
|
||||
=> _ready = false;
|
||||
|
||||
public override void WriteData(QNetworkWriter writer)
|
||||
{
|
||||
if (Ready)
|
||||
{
|
||||
writer.Write(ValueToSync.Value);
|
||||
writer.Write(_ref.Value);
|
||||
_prevValue = _ref.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -34,12 +31,14 @@ namespace QSB.Utility.VariableSync
|
||||
{
|
||||
if (Ready)
|
||||
{
|
||||
ValueToSync.Value = reader.ReadSingle();
|
||||
_ref.Value = reader.ReadSingle();
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.ReadSingle();
|
||||
}
|
||||
}
|
||||
|
||||
public override bool HasChanged() => _ref.Value != _prevValue;
|
||||
}
|
||||
}
|
||||
|
@ -2,23 +2,26 @@
|
||||
|
||||
namespace QSB.Utility.VariableSync
|
||||
{
|
||||
public class VariableReference<T>
|
||||
public readonly struct VariableReference<T>
|
||||
{
|
||||
private BaseVariableSyncer _owner;
|
||||
private readonly BaseVariableSyncer _owner;
|
||||
private readonly Func<T> _getter;
|
||||
private readonly Action<T> _setter;
|
||||
|
||||
public Func<T> Getter;
|
||||
public Action<T> Setter;
|
||||
|
||||
public VariableReference(BaseVariableSyncer owner)
|
||||
=> _owner = owner;
|
||||
public VariableReference(BaseVariableSyncer owner, Func<T> getter, Action<T> setter)
|
||||
{
|
||||
_owner = owner;
|
||||
_getter = getter;
|
||||
_setter = setter;
|
||||
}
|
||||
|
||||
public T Value
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Getter != null)
|
||||
if (_getter != null)
|
||||
{
|
||||
return Getter();
|
||||
return _getter();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -26,15 +29,15 @@ namespace QSB.Utility.VariableSync
|
||||
{
|
||||
DebugLog.ToConsole($"Warning - Getter is null!", OWML.Common.MessageType.Warning);
|
||||
}
|
||||
|
||||
|
||||
return default;
|
||||
}
|
||||
}
|
||||
set
|
||||
{
|
||||
if (Setter != null)
|
||||
if (_setter != null)
|
||||
{
|
||||
Setter(value);
|
||||
_setter(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -6,24 +6,21 @@ namespace QSB.Utility.VariableSync
|
||||
{
|
||||
public class Vector3VariableSyncer : BaseVariableSyncer
|
||||
{
|
||||
public VariableReference<Vector3> ValueToSync { get; private set; }
|
||||
private VariableReference<Vector3> _ref;
|
||||
private Vector3 _prevValue;
|
||||
|
||||
public void Init(Func<Vector3> getter, Action<Vector3> setter)
|
||||
{
|
||||
ValueToSync = new(this);
|
||||
ValueToSync.Getter = getter;
|
||||
ValueToSync.Setter = setter;
|
||||
_ready = true;
|
||||
_ref = new VariableReference<Vector3>(this, getter, setter);
|
||||
Ready = true;
|
||||
}
|
||||
|
||||
public void OnDestroy()
|
||||
=> _ready = false;
|
||||
|
||||
public override void WriteData(QNetworkWriter writer)
|
||||
{
|
||||
if (Ready)
|
||||
{
|
||||
writer.Write(ValueToSync.Value);
|
||||
writer.Write(_ref.Value);
|
||||
_prevValue = _ref.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -35,12 +32,14 @@ namespace QSB.Utility.VariableSync
|
||||
{
|
||||
if (Ready)
|
||||
{
|
||||
ValueToSync.Value = reader.ReadVector3();
|
||||
_ref.Value = reader.ReadVector3();
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.ReadVector3();
|
||||
}
|
||||
}
|
||||
|
||||
public override bool HasChanged() => _ref.Value != _prevValue;
|
||||
}
|
||||
}
|
||||
|
@ -615,6 +615,8 @@ namespace QuantumUNET
|
||||
|
||||
public static void RegisterHandler(short msgType, QNetworkMessageDelegate handler) => instance.m_SimpleServerSimple.RegisterHandler(msgType, handler);
|
||||
|
||||
public static void RegisterHandlerSafe(short msgType, QNetworkMessageDelegate handler) => instance.m_SimpleServerSimple.RegisterHandlerSafe(msgType, handler);
|
||||
|
||||
public static void UnregisterHandler(short msgType) => instance.m_SimpleServerSimple.UnregisterHandler(msgType);
|
||||
|
||||
public static void ClearHandlers() => instance.m_SimpleServerSimple.ClearHandlers();
|
||||
@ -1348,7 +1350,7 @@ namespace QuantumUNET
|
||||
|
||||
private readonly HashSet<int> m_ExternalConnections;
|
||||
|
||||
public readonly ServerSimpleWrapper m_SimpleServerSimple;
|
||||
private readonly ServerSimpleWrapper m_SimpleServerSimple;
|
||||
|
||||
private float m_MaxDelay = 0.1f;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user