Пример #1
0
        private static void HandleAction(_DTO_frame_info dto)
        {
            int count = dto.actions.Length;

            for (int i = 0; i < count; i++)
            {
                _DTO_action_info action = dto.actions[i];

                if (action.sender == CPlayer.instance.rid)
                {
                    SyncEvent.HandleFrameAction();
                }

                FrameActionType type = ( FrameActionType )action.type;
                switch (type)
                {
                case FrameActionType.Move:
                {
                    lBattle.HandleBeginMove(action.sender, new FVec3(action.x, action.y, action.z));
                }
                break;

                case FrameActionType.UseItem:
                {
                    lBattle.HandleUseItem(action.sender);
                }
                break;
                }
            }
        }
Пример #2
0
 private void HandleAction(_DTO_frame_info dto)
 {
     //int count = dto.actions.Length;
     //for ( int i = 0; i < count; i++ )
     //{
     //	_DTO_action_info action = dto.actions[i];
     //}
 }
Пример #3
0
        public void HandleAction(_DTO_frame_info dto)
        {
            int count = dto.actions.Length;

            for (int i = 0; i < count; i++)
            {
                this._actions.Push(dto.actions[i]);
            }
        }
Пример #4
0
        private static void HandleAction(_DTO_frame_info dto)
        {
            int count = dto.actions.Length;

            for (int i = 0; i < count; i++)
            {
                _DTO_action_info action = dto.actions[i];

                if (action.sender == VPlayer.instance.rid)
                {
                    SyncEvent.HandleFrameAction();
                }

                FrameActionType type = ( FrameActionType )action.type;
                switch (type)
                {
                case FrameActionType.Idle:
                    break;

                case FrameActionType.Move:
                {
                    lBattle.HandleMove(action.sender, new Vec3(action.x, action.y, action.z));
                }
                break;

                case FrameActionType.Track:
                {
                    lBattle.HandleTrack(action.sender, action.target);
                }
                break;

                case FrameActionType.UseSkill:
                {
                    Vector3 targetPoint = new Vector3(action.x, action.y, action.z);
                    lBattle.HandleUseSkill(action.sid, action.src, action.target, targetPoint.ToVec3());
                }
                break;

                case FrameActionType.Relive:
                {
                    lBattle.HandleRelive(action.sender);
                    break;
                }

                case FrameActionType.UpgradeSkill:
                {
                    lBattle.HandleUpgradeSkill(action.sender, action.target);
                    break;
                }
                }
            }
        }
Пример #5
0
        public PResult HandleAction(string userId, _DTO_frame_info dto)
        {
            StepLocker stepLocker = this.GetFromUserId(userId);

            if (stepLocker == null)
            {
                return(PResult.STEPLOCKER_NOT_FOUND);
            }

            stepLocker.HandleAction(dto);

            return(PResult.SUCCESS);
        }
Пример #6
0
        private static void UpdateLogic(float rdt, float fdt)
        {
            _elapsed += rdt;

            //如果本地frame比服务端慢,则需要快速步进追赶服务端帧数
            SERVER_KEYFRAMES.Switch();
            while (!SERVER_KEYFRAMES.isEmpty)
            {
                _DTO_frame_info dto    = SERVER_KEYFRAMES.Pop();
                int             length = dto.frameId - lBattle.frame;
                while (length >= 0)
                {
                    if (length == 0)
                    {
                        HandleAction(dto);
                    }
                    else
                    {
                        lBattle.Simulate(_elapsed, fdt);
                        _elapsed = 0f;
                    }
                    --length;
                }
                _nextKeyFrame = dto.frameId + _framesPerKeyFrame;
            }

            if (lBattle.frame < _nextKeyFrame)
            {
                _elapsedSinceLastLogicUpdate += rdt;

                while (_elapsedSinceLastLogicUpdate >= fdt)
                {
                    if (lBattle.frame >= _nextKeyFrame)
                    {
                        break;
                    }

                    lBattle.Simulate(_elapsed, fdt);

                    if (lBattle.frame == _nextKeyFrame)
                    {
                        _sendActionFrame   = lBattle.frame;
                        _shouldSendActions = true;
                    }

                    _elapsed = 0f;
                    _elapsedSinceLastLogicUpdate -= fdt;
                }
            }
        }
Пример #7
0
        public void Update(long dt)
        {
            //如果本地frame比服务端慢,则需要快速步进追赶服务端帧数
            SERVER_KEYFRAMES.Switch();
            while (!SERVER_KEYFRAMES.isEmpty)
            {
                _DTO_frame_info dto    = SERVER_KEYFRAMES.Pop();
                int             length = dto.frameId - this.frame;
                while (length >= 0)
                {
                    if (length == 0)
                    {
                        this.HandleAction(dto);
                    }
                    else
                    {
                        this.Simulate(this._msPerFrame);
                    }
                    --length;
                }

                this._nextKeyFrame = dto.frameId + this._framesPerKeyFrame;
            }

            if (this.frame < this._nextKeyFrame)
            {
                this._lastElapsed += dt;

                while (this._lastElapsed >= this._msPerFrame)
                {
                    if (this.frame >= this._nextKeyFrame)
                    {
                        break;
                    }

                    this.Simulate(this._msPerFrame);

                    if (this.frame == this._nextKeyFrame)
                    {
                        this.transmitter.SendAll(LVProtoMgr._PACKET_BATTLE_KEYFRAME(this.frame));
                    }

                    this._lastElapsed -= this._msPerFrame;
                }
            }
        }
Пример #8
0
        private void HandleAction(IUserToken token, _DTO_frame_info dto)
        {
            User user = this._userBiz.GetUser(token);

            if (user == null)
            {
                return;
            }

            if (!this._battleBiz.UserInBattle(user.id))
            {
                return;
            }

            PResult result = this._battleBiz.HandleAction(user.id, dto);

            if (result != PResult.SUCCESS)
            {
                this.Reply(token, Module.BATTLE, Command.QCMD_ACTION, result);
            }
        }
Пример #9
0
 public void ProcessServerKeyFrame(_DTO_frame_info dto)
 {
     SERVER_KEYFRAMES.Push(dto);
 }