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);
    }
Exemple #4
0
    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);
    }
Exemple #5
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);
            }
        }
    }