using GTA; using GTA.Math; namespace RageCoop.Client { /// /// /// public abstract class SyncedEntity { /// /// Indicates whether the current player is responsible for syncing this entity. /// public bool IsLocal { get { return OwnerID==Main.LocalPlayerID; } } /// /// Network ID for this entity /// public int ID { get; internal set; } /// /// /// public int OwnerID { get; internal set; } /// /// /// public bool IsOutOfSync { get { return Main.Ticked-LastSynced>200 && ID!=0; } } internal bool IsReady { get { return (LastSynced>0||LastFullSynced==0); } } internal bool IsInvincible { get; set; } = false; internal bool NeedUpdate { get { return LastSynced>=LastUpdated; } } #region LAST STATE /// /// Last time a new sync message arrived. /// public ulong LastSynced { get; set; } = 0; /// /// Last time a new sync message arrived. /// public ulong LastFullSynced { get; internal set; } = 0; /// /// Last time the local entity has been updated, /// public ulong LastUpdated { get; set; } = 0; #endregion public bool SendNextFrame { get; set; } = false; public bool SendFullNextFrame { get; set; } = false; /// /// /// internal protected bool _lastFrozen = false; internal Model Model { get; set; } internal Vector3 Position { get; set; } internal Vector3 Rotation { get; set; } internal Quaternion Quaternion { get; set; } internal Vector3 Velocity { get; set; } internal abstract void Update(); internal void PauseUpdate(ulong frames) { LastUpdated=Main.Ticked+frames; } } }