protected void launchMissile() { // 发射导弹 bool success = false; if (mAimTarget != null) { MissileParam param = new MissileParam(); param.mPosition = mPlayer.getPosition() + new Vector3(0.0f, 2.5f, 0.0f); param.mTarget = mAimTarget; SceneMissile missile = mItemManager.createItem <SceneMissile>(SCENE_ITEM.SI_MISSILE, param); if (mPlayer.isType(CHARACTER_TYPE.CT_MYSELF)) { GameTools.PLAY_AUDIO_OBJECT(missile, SOUND_DEFINE.SD_FIRE_MISSILE); } // 通知锁定玩家 CommandCharacterNotifyMissileLocked cmdLock = newCmd(out cmdLock); cmdLock.mLocked = true; cmdLock.mMissile = missile; pushCommand(cmdLock, mAimTarget); success = true; } // 移除瞄准状态 CommandCharacterRemoveState cmdState = newCmd(out cmdState); cmdState.mState = mType; pushCommand(cmdState, mPlayer); // 发射成功后移除角色背包中的导弹道具 if (success) { CommandCharacterRemoveItem cmdRemove = newCmd(out cmdRemove); cmdRemove.mItem = mPlayer.getPlayerPack().getCurItem(); pushCommand(cmdRemove, mPlayer); } }
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); } }
//-------------------------------------------------------------------------------------------------------------- protected void removeSelf(string param = null) { CommandCharacterRemoveState cmd = newCmd(out cmd, false); cmd.mState = this; cmd.mParam = param; pushCommand(cmd, mPlayer); }
public virtual void update(float elapsedTime) { if (mStateTime >= 0.0f) { mStateTime -= elapsedTime; if (mStateTime <= 0.0f) { mStateTime = -1.0f; CommandCharacterRemoveState cmd = newCmd(out cmd); cmd.mState = mType; pushCommand(cmd, mPlayer); } } }
public override void update(float elapsedTime) { base.update(elapsedTime); mWrongDirectionTime += elapsedTime; if (mWrongDirectionTime >= GameDefine.WRONG_DIRECTION_TIME) { // 重置角色方向 pushCommand <CommandCharacterReset>(mPlayer); // 退出当前状态 CommandCharacterRemoveState cmdState = newCmd(out cmdState); cmdState.mState = mType; pushCommand(cmdState, mPlayer); } }
public override void execute() { Character character = mReceiver as Character; // 无论是否完成比赛,都需要添加完成比赛的状态 CommandCharacterAddState cmdState = newCmd(out cmdState); cmdState.mState = PLAYER_STATE.PS_FINISH; pushCommand(cmdState, character); // 如果是玩家自己,则显示是否比赛完成 if (character.isType(CHARACTER_TYPE.CT_MYSELF)) { mScriptCircleTip.notifyFinishRace(mFinish); } // 移除瞄准状态 if ((character as CharacterOther).getStateMachine().hasState(PLAYER_STATE.PS_AIM)) { CommandCharacterRemoveState cmdRemoveState = newCmd(out cmdRemoveState); cmdRemoveState.mState = PLAYER_STATE.PS_AIM; pushCommand(cmdRemoveState, character as CharacterOther); } }
public override void update(float elapsedTime) { if (mData.mSpeed > 0.0f) { // 判断当前方向是否合法 bool wrongDirection = directionCheck(); // 圈数检测,更新当前移动距离,反向检测,完成比赛检测 if (!wrongDirection) { int curPointIndex = mData.mCurWayPoint; float runDistance = mWayPointManager.getRunDistance(mCharacter.getPosition(), ref curPointIndex, curPointIndex); if (!mPassedPointList.Contains(curPointIndex)) { mPassedPointList.Add(curPointIndex); } // 防止在游戏开始后 后退到终点线之前 导致已过路点添加错误 最后圈数检测错误 if (runDistance >= mWayPointManager.getTotalLength() / 2 && mPassedPointList.Count <= mWayPointManager.getPointCount() / 3) { mPassedPointList.Clear(); } // 已经进入下一圈,并且上一次经过的是当前圈的最后一个路段,当前正处于第0个路段,并且已经完成了当前圈一半以上的路段 if (runDistance > 0.0f && curPointIndex == 0 && mPassedPointList[mPassedPointList.Count - 1] == mWayPointManager.getPointCount() - 1 && mPassedPointList.Count >= mWayPointManager.getPointCount() / 2) { // 圈数改变 mPassedPointList.Clear(); CommandCharacterCircleChanged cmdCircle = newCmd(out cmdCircle); cmdCircle.mCircle = mData.mCircle + 1; pushCommand(cmdCircle, mCharacter); } // 如果已经跑完比赛了,则将距离和路点清零 if (mCharacter.hasState(PLAYER_STATE.PS_FINISH)) { curPointIndex = 0; runDistance = 0.0f; } // 里程改变,必须在更新圈数后才能更新里程,因为计算里程会使用圈数 CommandCharacterDistanceChanged cmdDistance = newCmd(out cmdDistance, false); cmdDistance.mWayPoint = curPointIndex; cmdDistance.mDistance = runDistance; pushCommand(cmdDistance, mCharacter); mWrongDirectionTime = 0.0f; //方向正确后退出游戏中的错误方向状态 if (mCharacter.hasState(PLAYER_STATE.PT_WRONG_DIRECTION)) { CommandCharacterRemoveState cmdRemoveState = newCmd(out cmdRemoveState); cmdRemoveState.mState = PLAYER_STATE.PT_WRONG_DIRECTION; pushCommand(cmdRemoveState, mCharacter); } } else { if (!mCharacter.hasState(PLAYER_STATE.PT_WRONG_DIRECTION)) { mWrongDirectionTime += elapsedTime; if (mWrongDirectionTime >= GameDefine.WRONG_DIRECTION_TIPS_TIME) { CommandCharacterAddState cmdState = newCmd(out cmdState); cmdState.mState = PLAYER_STATE.PT_WRONG_DIRECTION; pushCommand(cmdState, mCharacter); mWrongDirectionTime = 0.0f; } } } } base.update(elapsedTime); }