Пример #1
0
    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);
    }
Пример #2
0
    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());
    }
Пример #3
0
 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);
 }
Пример #4
0
 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);
        }
    }
Пример #6
0
    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;
    }
Пример #7
0
    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);
        }
    }
Пример #8
0
    // 创建用于比赛的玩家,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);
    }
Пример #9
0
 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);
 }
Пример #10
0
 public override void init(ComponentOwner owner)
 {
     base.init(owner);
     mCharacter = mComponentOwner as CharacterOther;
     mData      = mCharacter.getCharacterData();
 }
Пример #11
0
    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);
            }
        }
    }
Пример #12
0
 public void setPlayer(CharacterOther player)
 {
     mPlayer        = player;
     mCharacterData = mPlayer.getCharacterData();
     mAnimation     = mPlayer.getAnimation();
 }
Пример #13
0
 public RankInfo(CharacterOther player)
 {
     mTotalDistance = player.getCharacterData().mTotalDistance;
     mRunTime       = player.getCharacterData().mRunTime;
 }