public static ReusableList <IUserCmd> FromProtoBuf(UserCmdMessage message)
        {
            ReusableList <IUserCmd> list = ReusableList <IUserCmd> .Allocate();

            var count = message.UserCmdList.Count;

            for (int i = 0; i < count; i++)
            {
                var     item = message.UserCmdList[i];
                UserCmd cmd  = UserCmd.Allocate();
                cmd.RenderTime     = item.RenderTime;
                cmd.FrameInterval  = item.FrameInterval;
                cmd.MoveHorizontal = item.MoveHorizontal;
                cmd.MoveVertical   = item.MoveVertical;
                cmd.MoveUpDown     = item.MoveUpDown;
                cmd.Seq            = item.Seq;
                cmd.DeltaPitch     = item.DeltaPitch;
                cmd.DeltaYaw       = item.DeltaYaw;
                cmd.Buttons        = item.Buttons;
                cmd.BeState        = item.BeState;
                cmd.SwitchNumber   = item.SwitchNumber;
                cmd.ChangedSeat    = item.ChangedSeat;
                cmd.ChangeChannel  = item.ChangeChannel;
                cmd.SnapshotId     = item.SnapshotId;
                cmd.CurWeapon      = item.CurWeapon;
                cmd.PickUpEquip    = item.PickUpEquip;
                cmd.UseEntityId    = item.UseVehicleId;
                cmd.UseVehicleSeat = item.UseVehicleSeat;
                cmd.UseType        = item.UseType;
                cmd.BagIndex       = item.BagIndex;
                list.Value.Add(cmd);
            }
            return(list);
        }
Esempio n. 2
0
        public UserCmd GenerateUserCmd(IUserCmdOwnAdapter player, int intverval)
        {
            UpdateLookAt(player, _userCmdProvider.LookAt);


            if (_userCmdProvider.HasPath)
            {
                var vel = player.PlayerTransform.InverseTransformVector(_userCmdProvider.DesirwdVelocity);

                vel.y = 0;
                vel   = vel.normalized;
                _userCmd.MoveVertical   = vel.z;
                _userCmd.MoveHorizontal = vel.x;



                if (_userCmd.DeltaYaw > 1)
                {
                    _userCmd.IsSlightWalk = true;
                }
                else if (_userCmdProvider.DesirwdVelocity.magnitude > 2)
                {
                    _userCmd.IsRun = true;
                }
                else if (_userCmdProvider.DesirwdVelocity.magnitude > 0.5)
                {
                }
                else
                {
                    _userCmd.IsSlightWalk = true;
                }
            }

            _userCmd.IsCrouch     = _userCmdProvider.IsCrouch;
            _userCmd.IsJump       = _userCmdProvider.IsJump;
            _userCmd.IsProne      = _userCmdProvider.IsProne;
            _userCmd.IsPeekLeft   = _userCmdProvider.IsPeekLeft;
            _userCmd.IsPeekRight  = _userCmdProvider.IsPeekRight;
            _userCmd.IsF          = _userCmdProvider.IsF;
            _userCmd.IsLeftAttack = _userCmdProvider.IsLeftAttack;
            _userCmd.IsReload     = _userCmdProvider.IsReload;


            //_userCmdProvider.Reset();
//            _userCmdProvider.LookAt = Quaternion.Euler(0,0,
//                 0);
            _userCmd.FrameInterval = intverval;
            _userCmd.Seq           = _seq++;
            var rc = UserCmd.Allocate();

            _userCmd.CopyTo(rc);
            _userCmd.Reset();
            return(rc);
        }
Esempio n. 3
0
        public UserCmd GenerateUserCmd(IUserCmdOwnAdapter player, int intverval)
        {
            _userCmd.Seq           = _seq++;
            _userCmd.FrameInterval = intverval;
            _userCmd.ChangedSeat   = ChangeSeat();
            _userCmd.ChangeChannel = ChangeChannel();
            var rc = UserCmd.Allocate();

            _userCmd.CopyTo(rc);
            _userCmd.Reset();
            return(rc);
        }
        public UserCmd GenerateUserCmd(IUserCmdOwnAdapter player, int intverval)
        {
            logger.DebugFormat("GenerateUserCmd:{0}", MyGameTime.seq);
            userCmd.Seq           = MyGameTime.seq;
            userCmd.FrameInterval = intverval;
            userCmd.ChangedSeat   = ChangeSeat();
            userCmd.ChangeChannel = ChangeChannel();
            var rc = UserCmd.Allocate();

            userCmd.CopyTo(rc);
            userCmd.Reset();
            return(rc);
        }
Esempio n. 5
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();
        }
        public void SyncToEntity(IPlayerUserCmdGetter getter, UpdateLatestPacakge package)
        {
            PlayerEntity playerEntity = getter.OwnerEntity as PlayerEntity;
            IGameEntity  gameEntity   = playerEntity.entityAdapter.SelfAdapter;
            int          count        = package.UpdateComponents.Count;

            for (var i = 0; i < count; i++)
            {
                IUpdateComponent component = package.UpdateComponents[i];
                var id     = component.GetComponentId();
                var target = gameEntity.GetComponent(id);
                if (target == null)
                {
                    target = gameEntity.AddComponent(id);
                }

                var p = GetProfile(component.GetComponentId());
                try
                {
                    p.BeginProfileOnlyEnableProfile();
                    ((INetworkObject)target).CopyFrom(component);
                    if (id == (int)EComponentIds.SendUserCmd)
                    {
                        UserCmd cmd = UserCmd.Allocate();
                        CopyForm(cmd, component as SendUserCmdComponent);
                        playerEntity.userCmd.AddLatest(cmd);
                        cmd.Seq        = package.Head.LastUserCmdSeq;
                        cmd.SnapshotId = package.Head.LastSnapshotId;
                        cmd.ReleaseReference();
                    }
                }
                finally
                {
                    p.EndProfileOnlyEnableProfile();
                }
            }
        }
Esempio n. 7
0
        public void SyncToEntity(IUserCmdOwner owner, UpdateLatestPacakge package)
        {
            PlayerEntity playerEntity = owner.OwnerEntity as PlayerEntity;
            IGameEntity  gameEntity   = playerEntity.entityAdapter.SelfAdapter;

            foreach (var component in package.UpdateComponents)
            {
                var target = gameEntity.GetComponent(component.GetComponentId());
                if (target == null)
                {
                    target = gameEntity.AddComponent(component.GetComponentId());
                }
                ((INetworkObject)target).CopyFrom(component);
                if (component is SendUserCmdComponent)
                {
                    UserCmd cmd = UserCmd.Allocate();
                    CopyForm(cmd, component as SendUserCmdComponent);
                    playerEntity.userCmd.AddLatest(cmd);
                    cmd.Seq        = package.Head.UserCmdSeq;
                    cmd.SnapshotId = package.Head.LastSnapshotId;
                    cmd.ReleaseReference();
                }
            }
        }