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); } }
public void setPlayer(CharacterOther player) { mPlayer = player; mAnimation = mPlayer.getAnimation(); }