using Cysharp.Threading.Tasks; using System.Threading; using UnityEngine; namespace QSB.WorldSync; public abstract class WorldObject : IWorldObject where T : MonoBehaviour { public int ObjectId { get; init; } MonoBehaviour IWorldObject.AttachedObject => AttachedObject; public T AttachedObject { get; init; } public string Name => AttachedObject ? AttachedObject.name : ""; public override string ToString() => $"{ObjectId}:{GetType().Name} ({Name})"; public virtual async UniTask Init(CancellationToken ct) { } public virtual void OnRemoval() { } public virtual bool ShouldDisplayDebug() => QSBWorldSync.AllObjectsReady && AttachedObject && AttachedObject.gameObject.activeInHierarchy; public virtual string ReturnLabel() => ToString(); public virtual void DisplayLines() { } public virtual void SendInitialState(uint to) { } }