コード例 #1
0
 public void setHardwareSpeed(float speed, bool directSpeed = false)
 {
     if (speed < 0.0f)
     {
         speed = 0.0f;
     }
     mTargetSpeed = speed;
     if (directSpeed)
     {
         CommandCharacterChangeSpeed cmd = newCmd(out cmd, false);
         cmd.mSpeed = mTargetSpeed;
         pushCommand(cmd, mComponentOwner);
     }
 }
コード例 #2
0
    public override void update(float elaspedTime)
    {
        if (!MathUtility.isFloatEqual(mData.mSpeed, mTargetSpeed))
        {
            if (!MathUtility.isFloatEqual(mNormalAcceleration, mAcceleration))
            {
                mAcceleration = MathUtility.lerp(mAcceleration, mNormalAcceleration, mAccelerationFactor * elaspedTime);
            }
            // 当前速度逐渐向目标速度靠近
            float speed = MathUtility.lerp(mData.mSpeed, mTargetSpeed, mAcceleration * elaspedTime);
            // 小于最小间隔时直接设置为目标速度
            if ((Mathf.Abs(speed - mTargetSpeed) < mMinDeltaSpeed))
            {
                speed = mTargetSpeed;
            }
            // 如果速度降到了0(小于0.01则认为是0),并且角色当前正在跑动,则通知角色停下
            if (MathUtility.isFloatZero(speed, 0.01f) && mCharacter.hasState(PLAYER_STATE.PS_RIDING))
            {
                pushCommand <CommandCharacterStop>(mCharacter);
            }
            // 速度不为0,并且角色当前正处于休闲状态,则通知角色跑动
            else if (speed > 0.0f && mCharacter.hasState(PLAYER_STATE.PS_IDLE))
            {
                pushCommand <CommandCharacterStartRun>(mCharacter);
            }
            // 加速
            else if (speed > mData.mSpeed)
            {
                CommandCharacterSpeedUp cmdSpeedUp = newCmd(out cmdSpeedUp, false);
                cmdSpeedUp.mSpeed      = speed;
                cmdSpeedUp.mSpeedDelta = speed - mData.mSpeed;
                pushCommand(cmdSpeedUp, mCharacter);
            }
            // 减速
            else if (speed < mData.mSpeed)
            {
                CommandCharacterSpeedSlow cmdSpeedSlow = newCmd(out cmdSpeedSlow, false);
                cmdSpeedSlow.mSpeed = speed;
                pushCommand(cmdSpeedSlow, mCharacter);
            }

            // 改变速度
            CommandCharacterChangeSpeed cmd = newCmd(out cmd, false);
            cmd.mSpeed = speed;
            pushCommand(cmd, mCharacter);
        }
        base.update(elaspedTime);
    }
コード例 #3
0
    public override void execute()
    {
        Character character = mReceiver as Character;

        MathUtility.clamp(ref mAngle, 0.0f, 45.0f);
        CommandCharacterChangeSpeed cmdSpeed = newCmd(out cmdSpeed, false);

        cmdSpeed.mSpeed = Mathf.Sin(Mathf.Abs(mAngle * Mathf.Deg2Rad)) * character.getCharacterData().mSpeed;
        pushCommand(cmdSpeed, character);
        // 同时需要降低硬件速度组件中从当前速度加速到目标速度的快慢
        CharacterSpeedHardware speedHardware = character.getFirstComponent <CharacterSpeedHardware>();

        speedHardware.setAcceleration(0.0f);
        if (character.isType(CHARACTER_TYPE.CT_MYSELF))
        {
            GameTools.PLAY_AUDIO_UI(mScriptGlobalAudio.getAudioWindow(), SOUND_DEFINE.SD_HIT_WALL);
        }
    }
コード例 #4
0
    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);
        }
    }
コード例 #5
0
ファイル: FinishState.cs プロジェクト: isoundy000/RiseFree
    public override void leave()
    {
        // 速度设置为0
        CommandCharacterChangeSpeed cmdSpeed = newCmd(out cmdSpeed, false);

        cmdSpeed.mSpeed = 0.0f;
        pushCommand(cmdSpeed, mPlayer);
        // 禁用自行车物理组件,禁用硬件速度组件
        mPlayer.activeFirstComponent <CharacterBikePhysics>(false);
        mPlayer.activeFirstComponent <CharacterSpeedHardware>(false);
        // 禁用AI控制器
        if (mPlayer.isType(CHARACTER_TYPE.CT_AI))
        {
            mPlayer.activeFirstComponent <CharacterControllerAI>(false);
        }
        // 断开摄像机的连接
        if (mPlayer.isType(CHARACTER_TYPE.CT_MYSELF))
        {
            pushCommand <CommandCameraLinkTarget>(mCameraManager.getMainCamera());
        }
    }