Exemplo n.º 1
0
 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;
         }
     }
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        // 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;
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
 private void OnApplicationQuit()
 {
     Quited = true;
     LockstepManager.Quit();
 }
Exemplo n.º 8
0
 private void LateUpdate()
 {
     LockstepManager.LateVisualize();
 }
Exemplo n.º 9
0
 protected virtual void Update()
 {
     LockstepManager.Visualize();
 }
Exemplo n.º 10
0
 private void FixedUpdate()
 {
     LockstepManager.Simulate();
 }
Exemplo n.º 11
0
 public static void Reset()
 {
     LockstepManager.Deactivate();
 }