86 lines
1.8 KiB
C#
Raw Normal View History

2021-11-13 16:57:06 -08:00
using System.Collections.Generic;
using QSB.MeteorSync.WorldObjects;
using QSB.Syncs.Unsectored.Rigidbodies;
using QSB.WorldSync;
using QuantumUNET.Transport;
2021-11-13 16:57:06 -08:00
namespace QSB.MeteorSync.TransformSync
{
public class MeteorTransformSync : UnsectoredRigidbodySync
{
public override bool IsReady => MeteorManager.Ready;
2021-11-13 16:57:06 -08:00
public override bool UseInterpolation => false;
private QSBMeteor _qsbMeteor;
private static readonly List<MeteorTransformSync> _instances = new List<MeteorTransformSync>();
protected override OWRigidbody GetRigidbody()
=> _qsbMeteor.AttachedObject.owRigidbody;
public override void Start()
{
_instances.Add(this);
base.Start();
}
protected override void OnDestroy()
{
_instances.Remove(this);
base.OnDestroy();
}
public override float GetNetworkSendInterval()
=> 5f;
protected override void Init()
{
_qsbMeteor = QSBWorldSync.GetWorldFromId<QSBMeteor>(_instances.IndexOf(this));
_qsbMeteor.TransformSync = this;
base.Init();
SetReferenceTransform(Locator._brittleHollow.transform);
}
2021-11-13 16:57:06 -08:00
private bool _shouldUpdate;
public override void DeserializeTransform(QNetworkReader reader, bool initialState)
{
base.DeserializeTransform(reader, initialState);
_shouldUpdate = true;
2021-11-13 16:57:06 -08:00
}
protected override bool UpdateTransform()
{
if (HasAuthority)
2021-11-13 16:57:06 -08:00
{
return base.UpdateTransform();
}
if (!_shouldUpdate)
{
return false;
}
_shouldUpdate = false;
return base.UpdateTransform();
2021-11-13 16:57:06 -08:00
}
protected override void OnRenderObject()
{
if (!MeteorManager.Ready
2021-11-13 16:57:06 -08:00
|| !QSBCore.DebugMode
|| !QSBCore.ShowLinesInDebug
|| !IsReady
|| ReferenceTransform == null
|| _intermediaryTransform.GetReferenceTransform() == null
|| _qsbMeteor.AttachedObject.isSuspended)
{
return;
}
base.OnRenderObject();
}
}
}