make syncbase generic

This commit is contained in:
JohnCorby 2021-12-13 12:42:27 -08:00
parent 1c050e07db
commit b5f12796af
11 changed files with 43 additions and 31 deletions

View File

@ -72,8 +72,8 @@ namespace QSB.OrbSync.TransformSync
return QSBWorldSync.OldOrbList[_index].transform;
}
protected override Component InitLocalTransform() => GetTransform();
protected override Component InitRemoteTransform() => GetTransform();
protected override Transform InitLocalTransform() => GetTransform();
protected override Transform InitRemoteTransform() => GetTransform();
protected override float DistanceLeeway => 1f;
public override bool IsReady => WorldObjectManager.AllObjectsReady;

View File

@ -96,7 +96,7 @@ namespace QSB.Player.TransformSync
}
}
protected override Component InitLocalTransform()
protected override Transform InitLocalTransform()
{
QSBCore.UnityEvents.RunWhen(() => WorldObjectManager.AllObjectsReady, () => SectorSync.Init(Locator.GetPlayerSectorDetector(), TargetType.Player));
@ -127,7 +127,7 @@ namespace QSB.Player.TransformSync
return player;
}
protected override Component InitRemoteTransform()
protected override Transform InitRemoteTransform()
{
/*
* CREATE PLAYER STRUCTURE

View File

@ -18,7 +18,7 @@ namespace QSB.SectorSync
private void OnEnable() => RepeatingManager.Repeatings.Add(this);
private void OnDisable() => RepeatingManager.Repeatings.Remove(this);
public List<BaseSectoredSync> SectoredSyncs = new();
public List<IBaseSectoredSync> SectoredSyncs = new();
public void Invoke()
{
@ -29,13 +29,13 @@ namespace QSB.SectorSync
foreach (var sync in SectoredSyncs)
{
if (sync.AttachedObject == null)
if (sync.ReturnObject() == null)
{
continue;
}
if (sync.HasAuthority
&& sync.AttachedObject.gameObject.activeInHierarchy
&& sync.ReturnObject().gameObject.activeInHierarchy
&& sync.IsReady
&& sync.SectorSync.IsReady)
{
@ -74,9 +74,9 @@ namespace QSB.SectorSync
IsReady = QSBWorldSync.GetWorldObjects<QSBSector>().Any();
}
private void CheckTransformSyncSector(BaseSectoredSync transformSync)
private void CheckTransformSyncSector(IBaseSectoredSync transformSync)
{
var attachedObject = transformSync.AttachedObject;
var attachedObject = transformSync.ReturnObject();
var closestSector = transformSync.SectorSync.GetClosestSector(attachedObject.transform);
if (closestSector == default(QSBSector))
{

View File

@ -5,14 +5,26 @@ using QSB.SectorSync.WorldObjects;
using QSB.Utility;
using QSB.WorldSync;
using QuantumUNET.Transport;
using UnityEngine;
namespace QSB.Syncs.Sectored
{
public abstract class BaseSectoredSync : SyncBase
public interface IBaseSectoredSync
{
Component ReturnObject();
bool HasAuthority { get; }
bool IsReady { get; }
SectorSync.SectorSync SectorSync { get; }
QSBSector ReferenceSector { get; }
void SetReferenceSector(QSBSector closestSector);
}
public abstract class BaseSectoredSync<T> : SyncBase<T>, IBaseSectoredSync where T : Component
{
public override bool IgnoreDisabledAttachedObject => false;
public override bool IgnoreNullReferenceTransform => true;
public Component ReturnObject() => AttachedObject;
public QSBSector ReferenceSector { get; set; }
public SectorSync.SectorSync SectorSync { get; private set; }

View File

@ -6,7 +6,7 @@ using UnityEngine;
namespace QSB.Syncs.Sectored.Rigidbodies
{
public abstract class SectoredRigidbodySync : BaseSectoredSync
public abstract class SectoredRigidbodySync : BaseSectoredSync<OWRigidbody>
{
public override bool ShouldReparentAttachedObject => false;
@ -35,7 +35,7 @@ namespace QSB.Syncs.Sectored.Rigidbodies
protected abstract OWRigidbody GetRigidbody();
protected override Component SetAttachedObject()
protected override OWRigidbody SetAttachedObject()
=> GetRigidbody();
public override void SerializeTransform(QNetworkWriter writer, bool initialState)

View File

@ -6,14 +6,14 @@ using UnityEngine;
namespace QSB.Syncs.Sectored.Transforms
{
public abstract class SectoredTransformSync : BaseSectoredSync
public abstract class SectoredTransformSync : BaseSectoredSync<Transform>
{
public override bool ShouldReparentAttachedObject => true;
protected abstract Component InitLocalTransform();
protected abstract Component InitRemoteTransform();
protected abstract Transform InitLocalTransform();
protected abstract Transform InitRemoteTransform();
protected override Component SetAttachedObject()
protected override Transform SetAttachedObject()
=> HasAuthority ? InitLocalTransform() : InitRemoteTransform();
public override void SerializeTransform(QNetworkWriter writer, bool initialState)

View File

@ -5,7 +5,6 @@ using QSB.Utility;
using QSB.WorldSync;
using QuantumUNET.Components;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
@ -16,7 +15,7 @@ namespace QSB.Syncs
* God has cursed me for my hubris, and my work is never finished.
*/
public abstract class SyncBase : QNetworkTransform
public abstract class SyncBase<T> : QNetworkTransform where T: Component
{
public uint AttachedNetId
{
@ -55,8 +54,8 @@ namespace QSB.Syncs
public PlayerInfo Player => QSBPlayerManager.GetPlayer(PlayerId);
private bool _baseIsReady
{
private bool _baseIsReady
{
get
{
if (NetId.Value is uint.MaxValue or 0U)
@ -98,7 +97,7 @@ namespace QSB.Syncs
public abstract bool ShouldReparentAttachedObject { get; }
public abstract bool IsPlayerObject { get; }
public Component AttachedObject { get; set; }
public T AttachedObject { get; set; }
public Transform ReferenceTransform { get; set; }
public string LogName => $"{PlayerId}.{NetId.Value}:{GetType().Name}";
@ -109,7 +108,7 @@ namespace QSB.Syncs
protected Quaternion _rotationSmoothVelocity;
protected bool _isInitialized;
protected abstract Component SetAttachedObject();
protected abstract T SetAttachedObject();
protected abstract bool UpdateTransform();
public virtual void Start()

View File

@ -1,8 +1,9 @@
using QuantumUNET.Transport;
using UnityEngine;
namespace QSB.Syncs.Unsectored
{
public abstract class BaseUnsectoredSync : SyncBase
public abstract class BaseUnsectoredSync<T> : SyncBase<T> where T : Component
{
public override bool IgnoreDisabledAttachedObject => false;
public override bool IgnoreNullReferenceTransform => false;

View File

@ -5,7 +5,7 @@ using UnityEngine;
namespace QSB.Syncs.Unsectored.Rigidbodies
{
public abstract class UnsectoredRigidbodySync : BaseUnsectoredSync
public abstract class UnsectoredRigidbodySync : BaseUnsectoredSync<OWRigidbody>
{
public const float PositionMovedThreshold = 0.05f;
public const float AngleRotatedThreshold = 0.05f;
@ -31,7 +31,7 @@ namespace QSB.Syncs.Unsectored.Rigidbodies
protected Vector3 _localPrevAngularVelocity;
protected abstract OWRigidbody GetRigidbody();
protected override Component SetAttachedObject()
protected override OWRigidbody SetAttachedObject()
=> GetRigidbody();
public override void SerializeTransform(QNetworkWriter writer, bool initialState)

View File

@ -5,12 +5,12 @@ using UnityEngine;
namespace QSB.Syncs.Unsectored.Transforms
{
public abstract class UnsectoredTransformSync : BaseUnsectoredSync
public abstract class UnsectoredTransformSync : BaseUnsectoredSync<Transform>
{
protected abstract Component InitLocalTransform();
protected abstract Component InitRemoteTransform();
protected abstract Transform InitLocalTransform();
protected abstract Transform InitRemoteTransform();
protected override Component SetAttachedObject()
protected override Transform SetAttachedObject()
=> HasAuthority ? InitLocalTransform() : InitRemoteTransform();
public override void SerializeTransform(QNetworkWriter writer, bool initialState)

View File

@ -21,7 +21,7 @@ namespace QSB.Tools.ProbeTool.TransformSync
public override void OnStartAuthority() => LocalInstance = this;
protected override Component InitLocalTransform()
protected override Transform InitLocalTransform()
{
QSBCore.UnityEvents.RunWhen(() => WorldObjectManager.AllObjectsReady, () => SectorSync.Init(Locator.GetProbe().GetSectorDetector(), TargetType.Probe));
@ -43,7 +43,7 @@ namespace QSB.Tools.ProbeTool.TransformSync
return body;
}
protected override Component InitRemoteTransform()
protected override Transform InitRemoteTransform()
{
var probe = Locator.GetProbe().transform;