mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-01-09 03:40:46 +00:00
111 lines
2.4 KiB
C#
111 lines
2.4 KiB
C#
using QSB.SectorSync;
|
|
using QSB.SectorSync.WorldObjects;
|
|
using QSB.WorldSync;
|
|
using QuantumUNET.Transport;
|
|
using System.Collections.Generic;
|
|
|
|
namespace QSB.Syncs.TransformSync
|
|
{
|
|
public abstract class SectoredTransformSync : BaseTransformSync
|
|
{
|
|
public QSBSector ReferenceSector { get; set; }
|
|
public SectorSync.SectorSync SectorSync { get; private set; }
|
|
public static List<SectoredTransformSync> SectoredNetworkTransformList = new List<SectoredTransformSync>();
|
|
|
|
public override void Start()
|
|
{
|
|
SectorSync = gameObject.AddComponent<SectorSync.SectorSync>();
|
|
SectoredNetworkTransformList.Add(this);
|
|
base.Start();
|
|
}
|
|
|
|
protected override void OnDestroy()
|
|
{
|
|
base.OnDestroy();
|
|
SectoredNetworkTransformList.Remove(this);
|
|
if (SectorSync != null)
|
|
{
|
|
Destroy(SectorSync);
|
|
}
|
|
}
|
|
|
|
protected override void Init()
|
|
{
|
|
base.Init();
|
|
if (!QSBSectorManager.Instance.IsReady)
|
|
{
|
|
return;
|
|
}
|
|
var closestSector = SectorSync.GetClosestSector(AttachedObject.transform);
|
|
if (closestSector != null)
|
|
{
|
|
SetReferenceTransform(closestSector.Transform);
|
|
}
|
|
}
|
|
|
|
public override void SerializeTransform(QNetworkWriter writer)
|
|
{
|
|
if (_intermediaryTransform == null)
|
|
{
|
|
_intermediaryTransform = new IntermediaryTransform(transform);
|
|
}
|
|
if (ReferenceSector != null)
|
|
{
|
|
writer.Write(ReferenceSector.ObjectId);
|
|
}
|
|
else
|
|
{
|
|
writer.Write(-1);
|
|
}
|
|
base.SerializeTransform(writer);
|
|
}
|
|
|
|
public override void DeserializeTransform(QNetworkReader reader)
|
|
{
|
|
if (!QSBCore.WorldObjectsReady)
|
|
{
|
|
reader.ReadInt32();
|
|
reader.ReadVector3();
|
|
DeserializeRotation(reader);
|
|
return;
|
|
}
|
|
|
|
var sectorId = reader.ReadInt32();
|
|
var sector = sectorId == -1
|
|
? null
|
|
: QSBWorldSync.GetWorldFromId<QSBSector>(sectorId);
|
|
|
|
if (sector != ReferenceSector)
|
|
{
|
|
SetReferenceSector(sector);
|
|
}
|
|
|
|
base.DeserializeTransform(reader);
|
|
}
|
|
|
|
protected override void UpdateTransform()
|
|
{
|
|
if ((ReferenceTransform == null || ReferenceSector == null) && QSBSectorManager.Instance.IsReady)
|
|
{
|
|
var closestSector = SectorSync.GetClosestSector(AttachedObject.transform);
|
|
if (closestSector != null)
|
|
{
|
|
SetReferenceTransform(closestSector.Transform);
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
base.UpdateTransform();
|
|
}
|
|
|
|
public void SetReferenceSector(QSBSector sector)
|
|
{
|
|
ReferenceSector = sector;
|
|
SetReferenceTransform(sector.Transform);
|
|
}
|
|
}
|
|
}
|