Пример #1
0
        private void MergeUserCmd(PlayerEntity player)
        {
            var tempList = player.userCmd.UserCmdStepList;


            UserCmd last = UserCmd.Allocate();

            last.ReInit();

            ((UserCmd)tempList.Last()).CopyTo(last);
            last.Seq           = _userCmdSeq++;
            last.FrameInterval = 0;
            last.DeltaYaw      = 0;
            last.DeltaPitch    = 0;

            foreach (var cmd in tempList)
            {
                last.DeltaYaw      += cmd.DeltaYaw;
                last.DeltaPitch    += cmd.DeltaPitch;
                last.FrameInterval += cmd.FrameInterval;
                last.Buttons       |= cmd.Buttons;
                last.RenderTime     = cmd.RenderTime;
                last.ClientTime     = cmd.ClientTime;
                last.SnapshotId     = cmd.SnapshotId;
                last.PredicatedOnce = cmd.PredicatedOnce;
                last.MoveHorizontal = cmd.MoveHorizontal;
                last.MoveVertical   = cmd.MoveVertical;
                last.MoveUpDown     = cmd.MoveUpDown;

                last.ChangedSeat       = cmd.ChangedSeat > 0 ? cmd.ChangedSeat : last.ChangedSeat;
                last.ChangeChannel     = cmd.ChangeChannel > 0 ? cmd.ChangeChannel : last.ChangeChannel;
                last.CurWeapon         = cmd.CurWeapon == 0 ? last.CurWeapon : cmd.CurWeapon;
                last.ManualPickUpEquip = cmd.ManualPickUpEquip > 0 ? cmd.ManualPickUpEquip : last.ManualPickUpEquip;
                last.AutoPickUpEquip   = UserCmd.CopyList(last.AutoPickUpEquip, cmd.AutoPickUpEquip);
                last.UseEntityId       = cmd.UseEntityId > 0 ? cmd.UseEntityId : last.UseEntityId;
                last.UseVehicleSeat    = cmd.UseVehicleSeat > 0 ? cmd.UseVehicleSeat : last.UseVehicleSeat;
                last.UseType           = cmd.UseType > 0 ? cmd.UseType : last.UseType;
                last.BagIndex          = cmd.BagIndex > 0 ? cmd.BagIndex : last.BagIndex;

                //_logger.ErrorFormat("cmd;{0}   {1}",cmd.CurWeapon,last.CurWeapon);
                cmd.ReleaseReference();
            }

            tempList.Clear();

            player.userCmd.AddLatest(last);

            last.ReleaseReference();
        }