Example #1
0
    public override void execute()
    {
        Character      character = mReceiver as Character;
        CharacterOther other     = character as CharacterOther;
        Animation      anim      = other.getAnimation();

        anim.Play(GameDefine.ANIM_PRE_JUMP);
        anim.PlayQueued(GameDefine.ANIM_START_JUMP);
        float preJumpLength   = anim.GetClip(GameDefine.ANIM_PRE_JUMP).length;
        float startJumpLength = anim.GetClip(GameDefine.ANIM_START_JUMP).length;
        // 动作播放完成后才进入跳跃状态
        CommandCharacterAddState cmdAddState = newCmd(out cmdAddState, true, true);

        cmdAddState.mState = PLAYER_STATE.PS_JUMP;
        cmdAddState.mParam = new JumpParam(mJumpSpeed);
        pushDelayCommand(cmdAddState, character, preJumpLength + startJumpLength);
    }
    public override void execute()
    {
        Character character = mReceiver as Character;

        if (!character.isType(CHARACTER_TYPE.CT_OTHER))
        {
            return;
        }
        CharacterOther other = character as CharacterOther;

        // 玩家有护盾时,攻击没有任何影响
        if (other.hasState(PLAYER_STATE.PS_PROTECTED))
        {
            return;
        }
        if (mAttackSource == SCENE_ITEM.SI_LAND_MINE || mAttackSource == SCENE_ITEM.SI_MISSILE)
        {
            // 进入被攻击状态
            CommandCharacterAddState cmdState = newCmd(out cmdState);
            cmdState.mState = PLAYER_STATE.PS_ATTACKED;
            pushCommand(cmdState, other);
            // 设置角色的速度,当角色速度小于3km/h时,则不变,否则速度设置为3km/h
            CommandCharacterChangeSpeed cmd = newCmd(out cmd, false);
            cmd.mSpeed = Mathf.Min(MathUtility.KMHtoMS(3.0f), other.getCharacterData().mSpeed);
            pushCommand(cmd, other);
            // 播放摔倒动作
            Animation animation = other.getAnimation();
            animation.CrossFade(GameDefine.ANIM_FALL_DOWN);
            // 当速度为0时,摔到后为站立状态,否则开始骑行
            if (other.getCharacterData().mSpeed <= 0.01f)
            {
                animation.CrossFadeQueued(GameDefine.ANIM_STANDING);
            }
            else
            {
                animation.CrossFadeQueued(GameDefine.ANIM_RIDE);
            }
            // 同时需要降低硬件速度组件中从当前速度加速到目标速度的快慢
            CharacterSpeedHardware speedHardware = other.getFirstComponent <CharacterSpeedHardware>();
            speedHardware.setAcceleration(0.0f);
        }
    }
Example #3
0
 public void setPlayer(CharacterOther player)
 {
     mPlayer    = player;
     mAnimation = mPlayer.getAnimation();
 }