protected virtual void OnDisable() { if (Quited) { return; } LockstepManager.Deactivate(); }
protected override void OnSimulate() { if (_enabled) { return; } ticker++; if (ticker >= _checkFrameInterval) { ticker = 0; List <int> hashes; if (frameHashes.TryGetValue(LockstepManager.FrameCount - 10, out hashes)) { int mainHash = hashes [0]; bool desynced = false; for (int i = 1; i < hashes.Count; i++) { if (mainHash != hashes [i]) { desynced = true; } } if (desynced) { Debug.LogError("DESYCNED"); } } if (LockstepManager.FrameCount > lastFrameSent) { List <byte> newMessage = new List <byte> (); newMessage.AddRange(BitConverter.GetBytes(LockstepManager.FrameCount)); newMessage.AddRange(BitConverter.GetBytes(LockstepManager.GetStateHash())); if (ClientManager.NetworkHelper.IsServer) { ClientManager.NetworkHelper.SendMessageToAll(MessageType.Test, newMessage.ToArray()); } { List <int> newHashes = new List <int> (); newHashes.Add(LockstepManager.GetStateHash()); if (frameHashes.ContainsKey(LockstepManager.FrameCount)) { frameHashes [LockstepManager.FrameCount].AddRange(newHashes); } else { frameHashes.Add(LockstepManager.FrameCount, newHashes); } } lastFrameSent = LockstepManager.FrameCount; } } }
public static Replay SerializeCurrent() { Replay replay = new Replay(); Frame[] validFrames = new Frame[LockstepManager.InfluenceFrameCount]; Array.Copy(FrameManager.Frames, 0, validFrames, 0, LockstepManager.InfluenceFrameCount); bufferBytes.FastClear(); cachedWriter.Initialize(bufferBytes); Serialize(validFrames, cachedWriter); replay.Content = cachedWriter.Canvas.ToArray(); replay.hash = LockstepManager.GetStateHash(); return(replay); }
// private static int nextObjectId = 0; // change to serialized array property // [SerializeField] //private BehaviourHelper[] helpers; protected virtual void Awake() { NetworkHelper networkHelper = gameObject.GetComponent <NetworkHelper>(); if (networkHelper == null) { networkHelper = gameObject.AddComponent <DefaultNetworkHelper>(); } //Currently deterministic but not guaranteed by Unity // may be add as serialized Array as property? [SerializeField] private BehaviourHelper[] helpers; ? BehaviourHelper[] helpers = this.gameObject.GetComponentsInChildren <BehaviourHelper>(); LockstepManager.Initialize(helpers, networkHelper); }
public static void Simulate() { TweakFramerate(); ForeSight--; Frame frame = frames [LockstepManager.InfluenceFrameCount]; if (frame.Commands.IsNotNull()) { for (int i = 0; i < frame.Commands.Count; i++) { Command com = frame.Commands [i]; LockstepManager.Execute(com); } } //frames[LockstepManager.InfluenceFrameCount] = null; }
protected override void OnSimulate() { long hash = LockstepManager.GetStateHash(); if (IsPlayingBack) { if (LockstepManager.FrameCount < Hashes.PeakCount && Hashes.arrayAllocation[LockstepManager.FrameCount]) { long lastHash = Hashes [LockstepManager.FrameCount]; if (lastHash != hash) { Debug.Log("Desynced"); // frame " + LockstepManager.FrameCount); } } } else { Hashes.InsertAt(hash, LockstepManager.FrameCount); } }
private void OnApplicationQuit() { Quited = true; LockstepManager.Quit(); }
private void LateUpdate() { LockstepManager.LateVisualize(); }
protected virtual void Update() { LockstepManager.Visualize(); }
private void FixedUpdate() { LockstepManager.Simulate(); }
public static void Reset() { LockstepManager.Deactivate(); }