Ejemplo n.º 1
0
    private void Update()
    {
        LockstepFactory.Update();
        UserInputs userInputs = LockstepUtility.GetUserInputs();

        byte[] dataBytes = MessagePackUtility.Serialize(userInputs);
        NetworkSystem.Publish(RequestCode.Input, dataBytes);
    }
Ejemplo n.º 2
0
        public static LockstepTestCaseData NewLockstepTestCaseData(float nextSecond, int userId, IInput[] inputs)
        {
            var inputData = new byte[inputs.Length][];

            for (int i = 0; i < inputData.Length; i++)
            {
                inputData[i] = MessagePackUtility.Serialize(inputs[i]);
            }
            return(new LockstepTestCaseData()
            {
                NextSecond = nextSecond,
                UserInputs = new UserInputs()
                {
                    UserId = userId,
                    InputData = inputData,
                },
            });
        }
Ejemplo n.º 3
0
    public static UserInputs GetUserInputs()
    {
        var bytes = new List <byte[]>();
        var e     = inputDict.GetEnumerator();

        while (e.MoveNext())
        {
            for (int i = 0; i < e.Current.Value.Count; i++)
            {
                bytes.Add(MessagePackUtility.Serialize(e.Current.Value[i]));
            }
        }
        UserInputs userInputs = new UserInputs();

        userInputs.Index     = Index;
        userInputs.TickId    = lockstepInputs.Count;
        userInputs.InputData = bytes.ToArray();
        inputDict.Clear();
        Index++;
        return(userInputs);
    }
Ejemplo n.º 4
0
    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);
    }