public override void keyProcess(float elapsedTime) { if (mGameInputManager.getKeyCurrentDown(KeyCode.A)) { CommandCharacterUseItem cmd = newCmd(out cmd); cmd.mItemIndex = mPlayer.getPlayerPack().getSelectedIndex(); pushCommand(cmd, mPlayer); } //切换道具 if (mGameInputManager.getKeyCurrentDown(KeyCode.B)) { if (mPlayer.getPlayerPack().canChangeSelection()) { pushCommand <CommandCharacterSelectItem>(mPlayer); } } // 仅测试用 if (mGameInputManager.getKeyCurrentDown(KeyCode.Alpha1)) { CommandCharacterGetItem cmd = newCmd(out cmd); cmd.mItemType = PLAYER_ITEM.PI_MISSILE; pushCommand(cmd, mPlayer); } if (mGameInputManager.getKeyCurrentDown(KeyCode.Alpha2)) { CommandCharacterGetItem cmd = newCmd(out cmd); cmd.mItemType = PLAYER_ITEM.PI_SHIELD; pushCommand(cmd, mPlayer); } if (mGameInputManager.getKeyCurrentDown(KeyCode.Alpha3)) { CommandCharacterGetItem cmd = newCmd(out cmd); cmd.mItemType = PLAYER_ITEM.PI_TURBO; pushCommand(cmd, mPlayer); } if (mGameInputManager.getKeyCurrentDown(KeyCode.Alpha4)) { CommandCharacterGetItem cmd = newCmd(out cmd); cmd.mItemType = PLAYER_ITEM.PI_LAND_MINE; pushCommand(cmd, mPlayer); } // 上方向键增加速度 if (mGameInputManager.getKeyCurrentDown(KeyCode.UpArrow)) { CommandCharacterHardwareSpeed cmdPassValue = newCmd(out cmdPassValue, false); cmdPassValue.mSpeed = mPlayer.getCharacterData().mSpeed + 1.0f; pushCommand(cmdPassValue, mPlayer); } // 下方向键降低速度 if (mGameInputManager.getKeyCurrentDown(KeyCode.DownArrow)) { CommandCharacterHardwareSpeed cmdPassValue = newCmd(out cmdPassValue, false); cmdPassValue.mSpeed = mPlayer.getCharacterData().mSpeed - 1.0f; pushCommand(cmdPassValue, mPlayer); } if (mGameInputManager.getKeyCurrentDown(KeyCode.Space)) { pushCommand <CommandCharacterJump>(mPlayer); } }
public override void enter(StateParam param) { // 禁用动态拖尾 mPlayer.activeTrail(false, false); // 将速度降低到0 CommandCharacterHardwareSpeed cmdHardwareSpeed = newCmd(out cmdHardwareSpeed); cmdHardwareSpeed.mSpeed = 0.0f; cmdHardwareSpeed.mExternalSpeed = false; pushCommand(cmdHardwareSpeed, mPlayer); }
public override void enter(StateParam param) { mTurbo = mObjectManager.createObject(mPlayer.getObject(), GameDefine.R_PARTICLE_PREFAB_PATH + GameDefine.TURBO); mTurbo.name = "Turbo"; mTurbo.transform.localPosition = new Vector3(0.5f, -3.0f, 2.0f); float speed = mPlayer.getCharacterData().mSpeed; CommandCharacterHardwareSpeed cmd = newCmd(out cmd); cmd.mSpeed = speed + GameUtility.getSprintIncreaseSpeed(speed); cmd.mExternalSpeed = false; pushCommand(cmd, mPlayer); // 提升加速度,加速度会自动恢复到正常值 CharacterSpeedHardware component = mPlayer.getFirstComponent <CharacterSpeedHardware>(); component.setAcceleration(50.0f); if (mPlayer.isType(CHARACTER_TYPE.CT_MYSELF)) { GameTools.PLAY_AUDIO_UI(mScriptGlobalAudio.getAudioWindow(), SOUND_DEFINE.SD_SPRINT); } }
public override void execute() { CharacterMyself myself = mCharacterManager.getMyself(); // 速度 if (myself != null && myself.getProcessExternalSpeed()) { CommandCharacterHardwareSpeed cmdSpeed = newCmd(out cmdSpeed, false); cmdSpeed.mDirectSpeed = false; cmdSpeed.mExternalSpeed = true; if (GameUtility.mReadRPM) { cmdSpeed.mSpeed = GameUtility.HWSToMS(mRPM); } else { cmdSpeed.mSpeed = GameUtility.HWSToMS(mPower); } pushCommand(cmdSpeed, mCharacterManager.getMyself()); } // 按键 KeyCode[] key = new KeyCode[] { KeyCode.A, KeyCode.B, KeyCode.X, KeyCode.Y }; int count = key.Length; for (int i = 0; i < count; ++i) { mGameInputManager.setKeyState(key[i], isKeyDown(i)); } // 转向 mGameInputManager.setStickAngle(mAngle); if (mScriptDebugInfo != null) { mScriptDebugInfo.setOrginStackAngle(mAngle); mScriptDebugInfo.setRPM(mRPM); mScriptDebugInfo.setPower(mPower); } }
public override void update(float elapsedTime) { base.update(elapsedTime); int targetIndex = mWayPointManager.getPointIndexFromDistance(mData.mRunDistance + mTargetDistanceOffset, mData.mCurWayPoint); float targetDirection = mWayPointManager.getPointDirection(targetIndex); // 自身的朝向往目标点所在路段的朝向靠拢 float curDirection = mCharacter.getRotation().y; MathUtility.adjustAngle180(ref curDirection); float dirDelta = targetDirection - curDirection; // 如果目标方向与当前方向的差值超过180,则转换到0-360再计算 if (Mathf.Abs(dirDelta) > 180.0f) { MathUtility.adjustAngle360(ref curDirection); MathUtility.adjustAngle360(ref targetDirection); dirDelta = targetDirection - curDirection; } mData.mTurnAngle = MathUtility.lerp(mData.mTurnAngle, dirDelta, 0.1f); float curTargetSpeed = mAIBaseSpeed + mData.mNumber; CharacterSpeedHardware speedHardware = mCharacter.getFirstComponent <CharacterSpeedHardware>(); if (!MathUtility.isFloatEqual(speedHardware.getTargetSpeed(), curTargetSpeed) && mCharacter.getProcessExternalSpeed()) { CommandCharacterHardwareSpeed cmd = newCmd(out cmd); cmd.mSpeed = curTargetSpeed; cmd.mExternalSpeed = true; pushCommand(cmd, mCharacter); } // 如果AI背包中有导弹,则一直搜寻可以瞄准的目标 int missileIndex = mCharacter.getPlayerPack().getFirstItemIndex(PLAYER_ITEM.PI_MISSILE); if (missileIndex != -1 && !mCharacter.hasState(PLAYER_STATE.PS_AIM)) { bool hasAvailableTarget = false; SortedDictionary <int, CharacterOther> allCharacterList = mRoleSystem.getAllPlayer(); float playerDistance = mCharacter.getCharacterData().mRunDistance; foreach (var item in allCharacterList) { if (item.Value != mCharacter) { float curDistance = item.Value.getCharacterData().mRunDistance - playerDistance; if (MathUtility.isInRange(curDistance, 0.0f, GameDefine.MAX_LAUNCH_MISSILE_DISTANCE)) { if (UnityUtility.whetherGameObjectInScreen(item.Value.getWorldPosition())) { hasAvailableTarget = true; break; } } } } if (hasAvailableTarget) { // 需要选中导弹 CommandCharacterSelectItem cmdSelect = newCmd(out cmdSelect); cmdSelect.mIndex = missileIndex; pushCommand(cmdSelect, mCharacter); // 给角色添加瞄准状态 CommandCharacterAddState cmdCharacterAddState = newCmd(out cmdCharacterAddState); cmdCharacterAddState.mState = PLAYER_STATE.PS_AIM; pushCommand(cmdCharacterAddState, mCharacter); } } }