public void createMyself(string name, int startIndex) { CommandCharacterManagerCreateCharacter cmdCreate = newCmd(out cmdCreate); cmdCreate.mCharacterType = CHARACTER_TYPE.CT_MYSELF; cmdCreate.mName = name; pushCommand(cmdCreate, mCharacterManager); CharacterOther player = mCharacterManager.getMyself(); player.getCharacterData().mStartIndex = startIndex; player.initModel(mSelectRoleList[mSelectedIndex].getAvatar().getModelPath()); // 将玩家加入比赛角色列表,并确保位于第一个 mPlayerList.Add(player.getCharacterData().mNumber, player); }
public override void execute() { string name = BinaryUtility.bytesToString(mName.mValue, Encoding.UTF8); UnityUtility.logInfo("获得玩家数据 : " + mPlayerGUID + ", 名字 : " + name); // 创建该玩家的实例 CommandCharacterManagerCreateCharacter cmdCreate = newCmd(out cmdCreate); cmdCreate.mName = name; cmdCreate.mID = mPlayerGUID.mValue; cmdCreate.mCharacterType = CHARACTER_TYPE.CT_OTHER; pushCommand(cmdCreate, mCharacterManager); CharacterOther other = mCharacterManager.getCharacter(mPlayerGUID.mValue) as CharacterOther; CharacterData data = other.getCharacterData(); data.mMoney = mMoney.mValue; data.mHead = mHead.mValue; data.mServerPosition = (PLAYER_POSITION)mPosition.mValue; data.mBanker = mBanker.mValue; data.mReady = mReady.mValue; // 将该玩家加入房间 GameScene gameScene = mGameSceneManager.getCurScene(); CommandRoomJoin cmd = newCmd(out cmd); cmd.mCharacter = other; pushCommand(cmd, (gameScene as MahjongScene).getRoom()); }
public override void init(ComponentOwner owner) { base.init(owner); mCharacter = owner as CharacterOther; mData = mCharacter.getCharacterData(); mAIBaseSpeed = mGameConfig.getFloatParam(GAME_DEFINE_FLOAT.GDF_AI_BASE_SPEED); }
public override void init(ComponentOwner owner) { base.init(owner); mPlayer = owner as CharacterOther; mData = mPlayer.getCharacterData(); //mAvatar = mPlayer.getAvatar(); }
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 startMahjong(List <int> playerIDList, List <List <MAHJONG> > handInList, List <List <MAHJONG> > huaList) { int playerCount = playerIDList.Count; for (int i = 0; i < playerCount; ++i) { CharacterOther player = mCharacterManager.getCharacter(playerIDList[i]) as CharacterOther; mPlayerIDList.Add(player.getCharacterData().mGUID, player); mPlayerPositionList.Add(player); } mHandInList = handInList; mHuaList = huaList; }
public override void onGameState() { int count = mRaceInfoList.Length; for (int i = 0; i < count; ++i) { CharacterOther player = mRoleSystem.getPlayer(indexToNumber(i)); CharacterData data = player.getCharacterData(); mRaceInfoList[i].setCurCircle(data.mCircle); mRaceInfoList[i].setSpeedMS(data.mSpeed); mRaceInfoList[i].setRank(data.mRank); mRaceInfoList[i].setMaxCircle(mRaceSystem.getCurGameTrack().mCircleCount); mRaceInfoList[i].setConnectPlayer(player); } }
// 创建用于比赛的玩家,number是玩家编号 public void createAI(string name, string model, int startIndex, int number) { // 创建玩家 CommandCharacterManagerCreateCharacter cmdCreate = newCmd(out cmdCreate); cmdCreate.mCharacterType = CHARACTER_TYPE.CT_AI; cmdCreate.mName = name; pushCommand(cmdCreate, mCharacterManager); CharacterOther player = mCharacterManager.getCharacter(name) as CharacterOther; CharacterData data = player.getCharacterData(); data.mStartIndex = startIndex; data.mNumber = number; player.initModel(GameDefine.R_CHARACTER_PREFAB_PATH + model); // 将玩家加入比赛角色列表 mPlayerList.Add(data.mNumber, player); }
public override void init(ComponentOwner owner) { base.init(owner); mCharacter = owner as CharacterOther; if (mCharacter == null) { UnityUtility.logError("CharacterBikePhysics can only attach to CharacterOther!"); } mData = mCharacter.getCharacterData(); mNormalFriction = mGameConfig.getFloatParam(GAME_DEFINE_FLOAT.GDF_NORMAL_FRICTION); mMinUphillAngle = mGameConfig.getFloatParam(GAME_DEFINE_FLOAT.GDF_MIN_UPHILL_ANGLE); mMaxUphillAngle = mGameConfig.getFloatParam(GAME_DEFINE_FLOAT.GDF_MAX_UPHILL_ANGLE); mMinDownhillAngle = mGameConfig.getFloatParam(GAME_DEFINE_FLOAT.GDF_MIN_DOWNHILL_ANGLE); mMaxDownhillAngle = mGameConfig.getFloatParam(GAME_DEFINE_FLOAT.GDF_MAX_DOWNHILL_ANGLE); mMinUphillFriction = mGameConfig.getFloatParam(GAME_DEFINE_FLOAT.GDF_MIN_UPHILL_FRICTION); mMaxUphillFriction = mGameConfig.getFloatParam(GAME_DEFINE_FLOAT.GDF_MAX_UPHILL_FRICTION); mMinDownhillFriction = mGameConfig.getFloatParam(GAME_DEFINE_FLOAT.GDF_MIN_DOWNHILL_FRICTION); mMaxDownhillFriction = mGameConfig.getFloatParam(GAME_DEFINE_FLOAT.GDF_MAX_DOWNHILL_FRICTION); }
public override void init(ComponentOwner owner) { base.init(owner); mCharacter = mComponentOwner as CharacterOther; mData = mCharacter.getCharacterData(); }
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); } } }
public void setPlayer(CharacterOther player) { mPlayer = player; mCharacterData = mPlayer.getCharacterData(); mAnimation = mPlayer.getAnimation(); }
public RankInfo(CharacterOther player) { mTotalDistance = player.getCharacterData().mTotalDistance; mRunTime = player.getCharacterData().mRunTime; }