Esempio n. 1
0
 public static void AddToTimeline(LockstepInputs inputs)
 {
     if (inputs.TickId < 0)
     {
         Index = 0;
         lockstepInputs.Clear();
         OnRestart?.Invoke();
     }
     if (inputs.TickId != lockstepInputs.Count)
     {
         return;
     }
     lockstepInputs.Add(inputs);
     inputTrackDict.Add(inputs.TickId, new List <Dictionary <int, Dictionary <Type, List <IInput> > > >());
     if (inputs.UserInputs != null && inputs.UserInputs.Length > 0)
     {
         for (int i = 0; i < inputs.UserInputs.Length; i++)
         {
             var dict = new Dictionary <int, Dictionary <Type, List <IInput> > >();
             for (int j = 0; j < inputs.UserInputs[i].Length; j++)
             {
                 var userInputs = inputs.UserInputs[i][j];
                 dict.Add(userInputs.UserId, new Dictionary <Type, List <IInput> >());
                 if (userInputs.InputData != null)
                 {
                     for (int k = 0; k < userInputs.InputData.Length; k++)
                     {
                         var input = MessagePackUtility.Deserialize <IInput>(userInputs.InputData[k]);
                         var type  = input.GetType();
                         if (!dict[userInputs.UserId].ContainsKey(type))
                         {
                             dict[userInputs.UserId].Add(type, new List <IInput>());
                         }
                         dict[userInputs.UserId][type].Add(input);
                     }
                 }
             }
             inputTrackDict[inputs.TickId].Add(dict);
         }
     }
 }
    public override void OnEnable()
    {
        base.OnEnable();

        NetworkSystem.Receive(RequestCode.Input).Subscribe(data =>
        {
            if (data.Mode == SessionMode.Offline)
            {
                UserInputs userInputs         = MessagePackUtility.Deserialize <UserInputs>(data.Value);
                userInputs.UserId             = 0;
                LockstepInputs lockstepInputs = LockstepUtility.CreateLockstepInputs(userInputs);
                NetworkSystem.Publish(RequestCode.Lockstep, MessagePackUtility.Serialize(lockstepInputs));
            }
        }).AddTo(this.Disposer);

        NetworkSystem.Receive(RequestCode.Lockstep).Subscribe(data =>
        {
            LockstepInputs lockstepInputs = MessagePackUtility.Deserialize <LockstepInputs>(data.Value);
            LockstepUtility.AddToTimeline(lockstepInputs);
        }).AddTo(this.Disposer);
    }