public override void execute() { Character character = mReceiver as Character; CharacterOther player = character as CharacterOther; if (player == null) { return; } PlayerPack pack = player.getPlayerPack(); if (!pack.isFull()) { int itemIndex = pack.addItem(mItemType); // 如果获取道具的是玩家自己,通知游戏界面 if (player.isType(CHARACTER_TYPE.CT_MYSELF)) { mScriptProps.addProps(mItemType, itemIndex); GameTools.PLAY_AUDIO_UI(mScriptGlobalAudio.getAudioWindow(), SOUND_DEFINE.SD_GET_ITEM); } // 如果获取道具的是游戏中Al(直接使用游戏中的道具) else { CharacterControllerAI characterControllerAI = player.getFirstActiveComponent <CharacterControllerAI>(); characterControllerAI.notifyAIGetBoxItem(pack.getCurItem()); } } }
public override void execute() { Character character = mReceiver as Character; CharacterOther player = character as CharacterOther; if (player == null) { return; } // 移除瞄准状态 if (player.hasState(PLAYER_STATE.PS_AIM)) { CommandCharacterRemoveState cmdState = newCmd(out cmdState); cmdState.mState = PLAYER_STATE.PS_AIM; pushCommand(cmdState, character); } PlayerPack pack = player.getPlayerPack(); int nextNotNullIndex = mIndex != -1 ? mIndex : pack.getNextNotEmptyIndex(); if (nextNotNullIndex == -1) { return; } pack.setItemIndex(nextNotNullIndex); // 通知布局 if (player.isType(CHARACTER_TYPE.CT_MYSELF)) { mScriptProps.showIndex(nextNotNullIndex); } }
public override void execute() { Character character = mReceiver as Character; CharacterOther player = character as CharacterOther; if (player == null) { return; } PlayerPack pack = player.getPlayerPack(); pack.useItem(mItemIndex); }
public override void execute() { Character character = mReceiver as Character; CharacterOther player = character as CharacterOther; if (player == null) { return; } PlayerPack pack = player.getPlayerPack(); int itemIndex = -1; if (mItem != null) { itemIndex = pack.removeItem(mItem); } // 通知布局 if (player.isType(CHARACTER_TYPE.CT_MYSELF)) { mScriptProps.removeProps(itemIndex); } pushCommand <CommandCharacterSelectItem>(player); }
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); } } }