mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-03-03 13:13:54 +00:00
major simplify BaseSectoredSync
This commit is contained in:
parent
6d130b89eb
commit
5b8f51afdd
@ -17,36 +17,31 @@ namespace QSB.SectorSync
|
||||
public bool IsReady { get; private set; }
|
||||
public readonly List<QSBSector> FakeSectors = new();
|
||||
|
||||
public readonly List<BaseSectoredSync> SectoredSyncs = new();
|
||||
public readonly List<BaseSectoredSync> TransformSyncs = new();
|
||||
|
||||
#region repeating timer
|
||||
|
||||
private const float TimeInterval = 0.4f;
|
||||
private float _checkTimer = TimeInterval;
|
||||
private const float UpdateInterval = 0.4f;
|
||||
private float _timer = UpdateInterval;
|
||||
|
||||
private void Update()
|
||||
{
|
||||
_checkTimer += Time.unscaledDeltaTime;
|
||||
if (_checkTimer < TimeInterval)
|
||||
_timer += Time.unscaledDeltaTime;
|
||||
if (_timer < UpdateInterval)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Invoke();
|
||||
|
||||
_checkTimer = 0;
|
||||
_timer = 0;
|
||||
UpdateReferenceSectors();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public void Invoke()
|
||||
public void UpdateReferenceSectors()
|
||||
{
|
||||
if (!Instance.IsReady || !AllObjectsReady)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var sync in SectoredSyncs)
|
||||
foreach (var sync in TransformSyncs)
|
||||
{
|
||||
if (sync.AttachedTransform == null)
|
||||
{
|
||||
@ -55,10 +50,10 @@ namespace QSB.SectorSync
|
||||
|
||||
if (sync.hasAuthority
|
||||
&& sync.AttachedTransform.gameObject.activeInHierarchy
|
||||
&& sync.IsReady
|
||||
&& sync.IsInitialized
|
||||
&& sync.SectorSync.IsReady)
|
||||
{
|
||||
CheckTransformSyncSector(sync);
|
||||
UpdateReferenceSector(sync);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -93,15 +88,10 @@ namespace QSB.SectorSync
|
||||
IsReady = QSBWorldSync.GetWorldObjects<QSBSector>().Any();
|
||||
}
|
||||
|
||||
private void CheckTransformSyncSector(BaseSectoredSync transformSync)
|
||||
private static void UpdateReferenceSector(BaseSectoredSync transformSync)
|
||||
{
|
||||
var closestSector = transformSync.SectorSync.GetClosestSector();
|
||||
if (closestSector == default(QSBSector))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (closestSector == transformSync.ReferenceSector)
|
||||
if (closestSector == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ namespace QSB.SectorSync
|
||||
|
||||
if (goodSectors.Count == 0)
|
||||
{
|
||||
return default;
|
||||
return null;
|
||||
}
|
||||
|
||||
var closest = goodSectors
|
||||
|
@ -46,11 +46,6 @@ namespace QSB.ShipSync.TransformSync
|
||||
|
||||
protected override bool UpdateTransform()
|
||||
{
|
||||
if (!UpdateSectors())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Dont do base... this is a replacement!
|
||||
|
||||
if (hasAuthority)
|
||||
|
@ -12,22 +12,20 @@ namespace QSB.Syncs.Sectored
|
||||
public override bool AllowDisabledAttachedObject => false;
|
||||
public override bool AllowNullReferenceTransform => true;
|
||||
|
||||
public QSBSector ReferenceSector { get; set; }
|
||||
public QSBSector ReferenceSector { get; private set; }
|
||||
public SectorSync.SectorSync SectorSync { get; private set; }
|
||||
|
||||
private int _sectorIdWaitingSlot = int.MinValue;
|
||||
|
||||
public override void Start()
|
||||
{
|
||||
SectorSync = gameObject.AddComponent<SectorSync.SectorSync>();
|
||||
QSBSectorManager.Instance.SectoredSyncs.Add(this);
|
||||
QSBSectorManager.Instance.TransformSyncs.Add(this);
|
||||
base.Start();
|
||||
}
|
||||
|
||||
protected override void OnDestroy()
|
||||
{
|
||||
base.OnDestroy();
|
||||
QSBSectorManager.Instance.SectoredSyncs.Remove(this);
|
||||
QSBSectorManager.Instance.TransformSyncs.Remove(this);
|
||||
if (SectorSync != null)
|
||||
{
|
||||
Destroy(SectorSync);
|
||||
@ -40,73 +38,15 @@ namespace QSB.Syncs.Sectored
|
||||
SetReferenceSector(null);
|
||||
}
|
||||
|
||||
protected override void Init()
|
||||
{
|
||||
base.Init();
|
||||
if (!QSBSectorManager.Instance.IsReady)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasAuthority)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
QSBCore.UnityEvents.RunWhen(() => SectorSync.IsReady, InitSector);
|
||||
}
|
||||
|
||||
private void InitSector()
|
||||
{
|
||||
var closestSector = SectorSync.GetClosestSector();
|
||||
if (closestSector != null)
|
||||
{
|
||||
SetReferenceSector(closestSector);
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugLog.ToConsole($"Warning - {LogName}'s initial sector was null.", MessageType.Warning);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
if (_sectorIdWaitingSlot == int.MinValue)
|
||||
if (ReferenceSector != null && ReferenceSector.Transform != ReferenceTransform)
|
||||
{
|
||||
if (ReferenceSector != null && ReferenceSector.Transform != ReferenceTransform)
|
||||
{
|
||||
DebugLog.ToConsole($"Warning - {LogName} : ReferenceSector.Transform was different to ReferenceTransform. Correcting...", MessageType.Warning);
|
||||
SetReferenceTransform(ReferenceSector.Transform);
|
||||
}
|
||||
|
||||
base.Update();
|
||||
return;
|
||||
DebugLog.ToConsole($"Warning - {LogName} : ReferenceSector.Transform was different to ReferenceTransform. Correcting...", MessageType.Warning);
|
||||
SetReferenceTransform(ReferenceSector.Transform);
|
||||
}
|
||||
|
||||
if (!WorldObjectManager.AllObjectsReady)
|
||||
{
|
||||
base.Update();
|
||||
return;
|
||||
}
|
||||
|
||||
var sector = _sectorIdWaitingSlot == -1
|
||||
? null
|
||||
: _sectorIdWaitingSlot.GetWorldObject<QSBSector>();
|
||||
|
||||
if (sector != ReferenceSector)
|
||||
{
|
||||
if (sector == null)
|
||||
{
|
||||
DebugLog.ToConsole($"Error - {LogName} got sector of ID -1. (From waiting slot.)", MessageType.Error);
|
||||
base.Update();
|
||||
return;
|
||||
}
|
||||
|
||||
SetReferenceSector(sector);
|
||||
}
|
||||
|
||||
_sectorIdWaitingSlot = int.MinValue;
|
||||
|
||||
// todo all the check in base
|
||||
base.Update();
|
||||
}
|
||||
|
||||
@ -114,123 +54,38 @@ namespace QSB.Syncs.Sectored
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
if (IsPlayerObject)
|
||||
if (ReferenceSector == null)
|
||||
{
|
||||
if (Player == null)
|
||||
{
|
||||
// happens once right when you start hosting
|
||||
writer.Write(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Player.IsReady)
|
||||
{
|
||||
writer.Write(-1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (ReferenceSector != null)
|
||||
{
|
||||
writer.Write(ReferenceSector.ObjectId);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsInitialized)
|
||||
{
|
||||
DebugLog.ToConsole($"Warning - ReferenceSector of {LogName} is null.", MessageType.Warning);
|
||||
}
|
||||
|
||||
DebugLog.ToConsole($"Warning - ReferenceSector of {LogName} is null.", MessageType.Warning);
|
||||
writer.Write(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
writer.Write(ReferenceSector.ObjectId);
|
||||
}
|
||||
|
||||
protected override void Deserialize(NetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int sectorId;
|
||||
if (!WorldObjectManager.AllObjectsReady)
|
||||
var sectorId = reader.ReadInt();
|
||||
if (sectorId == -1)
|
||||
{
|
||||
sectorId = reader.ReadInt();
|
||||
if (sectorId != -1)
|
||||
{
|
||||
_sectorIdWaitingSlot = sectorId;
|
||||
}
|
||||
|
||||
DebugLog.ToConsole($"Error - {LogName} got sector of ID -1. (From deserializing transform.)", MessageType.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
sectorId = reader.ReadInt();
|
||||
var sector = sectorId == -1
|
||||
? null
|
||||
: sectorId.GetWorldObject<QSBSector>();
|
||||
|
||||
if (sector != ReferenceSector)
|
||||
{
|
||||
if (sector == null)
|
||||
{
|
||||
DebugLog.ToConsole($"Error - {LogName} got sector of ID -1. (From deserializing transform.)", MessageType.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
SetReferenceSector(sector);
|
||||
}
|
||||
var sector = sectorId.GetWorldObject<QSBSector>();
|
||||
SetReferenceSector(sector);
|
||||
}
|
||||
|
||||
protected bool UpdateSectors()
|
||||
{
|
||||
var referenceNull = ReferenceTransform == null || ReferenceSector == null;
|
||||
var sectorManagerReady = QSBSectorManager.Instance.IsReady;
|
||||
|
||||
if (!sectorManagerReady)
|
||||
{
|
||||
if (referenceNull && hasAuthority)
|
||||
{
|
||||
DebugLog.ToConsole($"Warning - Reference was null, but sector manager wasn't ready. " +
|
||||
$"Transform:{ReferenceTransform == null}, Sector:{ReferenceSector == null}",
|
||||
MessageType.Warning);
|
||||
}
|
||||
|
||||
DebugLog.DebugWrite($"{LogName} : Sector Manager not ready.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!hasAuthority)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (referenceNull)
|
||||
{
|
||||
if (SectorSync.IsReady)
|
||||
{
|
||||
var closestSector = SectorSync.GetClosestSector();
|
||||
if (closestSector != null)
|
||||
{
|
||||
SetReferenceSector(closestSector);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugLog.ToConsole($"Error - No closest sector found to {LogName}!", MessageType.Error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override bool UpdateTransform()
|
||||
=> UpdateSectors();
|
||||
|
||||
public void SetReferenceSector(QSBSector sector)
|
||||
{
|
||||
if (ReferenceSector == sector)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ReferenceSector = sector;
|
||||
SetReferenceTransform(sector?.Transform);
|
||||
}
|
||||
|
@ -19,20 +19,7 @@ namespace QSB.Syncs.Sectored.Rigidbodies
|
||||
protected Vector3 _prevVelocity;
|
||||
protected Vector3 _prevAngularVelocity;
|
||||
|
||||
/// <summary>
|
||||
/// The previous position of the VISIBLE object, as if parented to the reference.
|
||||
/// </summary>
|
||||
protected Vector3 _localPrevPosition;
|
||||
|
||||
/// <summary>
|
||||
/// The previous rotation of the VISIBLE object, as if parented to the reference.
|
||||
/// </summary>
|
||||
protected Quaternion _localPrevRotation;
|
||||
|
||||
protected Vector3 _localPrevVelocity;
|
||||
protected Vector3 _localPrevAngularVelocity;
|
||||
|
||||
public OWRigidbody AttachedRigidbody { get; set; }
|
||||
public OWRigidbody AttachedRigidbody { get; private set; }
|
||||
|
||||
protected abstract OWRigidbody InitAttachedRigidbody();
|
||||
|
||||
@ -88,11 +75,6 @@ namespace QSB.Syncs.Sectored.Rigidbodies
|
||||
|
||||
protected override bool UpdateTransform()
|
||||
{
|
||||
if (!base.UpdateTransform())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hasAuthority)
|
||||
{
|
||||
SetValuesToSync();
|
||||
@ -116,26 +98,6 @@ namespace QSB.Syncs.Sectored.Rigidbodies
|
||||
rotationToSet = ReferenceTransform.FromRelRot(SmoothRotation);
|
||||
}
|
||||
|
||||
var hasMoved = CustomHasMoved(
|
||||
transform.position,
|
||||
_localPrevPosition,
|
||||
transform.rotation,
|
||||
_localPrevRotation,
|
||||
_relativeVelocity,
|
||||
_localPrevVelocity,
|
||||
_relativeAngularVelocity,
|
||||
_localPrevAngularVelocity);
|
||||
|
||||
_localPrevPosition = transform.position;
|
||||
_localPrevRotation = transform.rotation;
|
||||
_localPrevVelocity = _relativeVelocity;
|
||||
_localPrevAngularVelocity = _relativeAngularVelocity;
|
||||
|
||||
if (!hasMoved)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
AttachedRigidbody.MoveToPosition(positionToSet);
|
||||
AttachedRigidbody.MoveToRotation(rotationToSet);
|
||||
|
||||
|
@ -28,11 +28,6 @@ namespace QSB.Syncs.Sectored.Transforms
|
||||
|
||||
protected override bool UpdateTransform()
|
||||
{
|
||||
if (!base.UpdateTransform())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hasAuthority)
|
||||
{
|
||||
if (ReferenceTransform != null)
|
||||
|
@ -53,8 +53,8 @@ namespace QSB.Syncs
|
||||
public abstract bool DestroyAttachedObject { get; }
|
||||
public abstract bool IsPlayerObject { get; }
|
||||
|
||||
public Transform AttachedTransform { get; set; }
|
||||
public Transform ReferenceTransform { get; set; }
|
||||
public Transform AttachedTransform { get; private set; }
|
||||
public Transform ReferenceTransform { get; private set; }
|
||||
|
||||
public string LogName => (IsPlayerObject ? $"{Player.PlayerId}." : string.Empty) + $"{netId}:{GetType().Name}";
|
||||
protected virtual float DistanceLeeway => 5f;
|
||||
@ -64,7 +64,7 @@ namespace QSB.Syncs
|
||||
protected const float SmoothTime = 0.1f;
|
||||
private Vector3 _positionSmoothVelocity;
|
||||
private Quaternion _rotationSmoothVelocity;
|
||||
protected bool IsInitialized;
|
||||
public bool IsInitialized { get; private set; }
|
||||
protected Vector3 SmoothPosition;
|
||||
protected Quaternion SmoothRotation;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user