Пример #1
0
    void Start()
    {
        //this.mocha_parameter.m_State = MochaState.BREAK;
        this.MochaOldState = this.mocha_parameter.m_State;

        this.OldMoveDirection = 0;

        MyMochaSpriteRenderer = gameObject.GetComponent <SpriteRenderer>();

        mocha_manager_object = GameObject.Find("MochasManager");
        mocha_manager        = mocha_manager_object.GetComponent <MochasManager>();

        prefab_generator_object = GameObject.Find("PrefabGenerator");
        prefab_generator        = prefab_generator_object.GetComponent <PrefabGenerator>();

        // 自分自身の情報で初期化
        this.my_object = GameObject.Find(this.transform.name);
        my_animator    = GetComponent <Animator>();

        // このモチャをMochasManagerのMochaListの一番最後に追加する
        mocha_manager.AddMochaList(this.my_object);

        mocha_behavior_info.StateMaxTime = 30.0f;
        mocha_behavior_info.StateNowTime = 0.0f;
    }
Пример #2
0
    private void StartState()
    {
        if (this.MochaOldState != this.mocha_parameter.m_State)
        {
            my_animator.SetBool("IsWalkMove", false);

            switch (this.mocha_parameter.m_State)
            {
            case MochaState.BREAK:
                StartBreak();
                break;

            case MochaState.BREED:
                StartBreed();
                break;

            case MochaState.CONSTRUCT:
                StartConstruct();
                break;

            case MochaState.REORGANIZE:
                StartReorganize();
                break;

            case MochaState.EMIGRATE:
                StartEmigrate();
                break;

            case MochaState.MEAL:
                StartMeal();
                break;
            }

            this.MochaOldState = this.mocha_parameter.m_State;
        }
    }
Пример #3
0
    public MochaState MochaNextState(GameObject mocha_name_)
    {
        // 次のステートを聞きに来たモチャのリストの要素番号を記憶する
        int MyMochaNumber = MochaList.IndexOf(mocha_name_);

        // -1が返ってきたら失敗
        if (MyMochaNumber == -1)
        {
            Debug.Log("リストから自分を見つけ出すのに失敗");
            return(MochaState.BREAK);
        }

        // 変数Mochaで全Mochaの情報に参照できる
        GameObject[]   mocha_object = new GameObject[MochaList.Count];
        MochaControl[] mocha        = new MochaControl[MochaList.Count];
        for (int i = 0; i < MochaList.Count; i++)
        {
            mocha_object[i] = GameObject.Find(MochaList[i].name);
            mocha[i]        = mocha_object[i].GetComponent <MochaControl>();
        }

        // 各ステートのモチャが何人いるのか調べる
        float[] EachStateRatio = new float[(int)MochaState.MAX_STATE];
        for (int i = 0; i < (int)MochaState.MAX_STATE; i++)
        {
            EachStateRatio[i] = 0.0f;
        }
        for (int i = 0; i < MochaList.Count; i++)
        {
            EachStateRatio[(int)mocha[i].mocha_parameter.m_State]++;
        }

        // 現在のモチャ全体のステート比率を調べる
        float EntireStateRatio = MochaList.Count;

        float[] RealStateRatio = new float[(int)MochaState.MAX_STATE];
        for (int i = 0; i < (int)MochaState.MAX_STATE; i++)
        {
            RealStateRatio[i] = EachStateRatio[i] / EntireStateRatio;
        }

        // 行動可能なステートを選別していくためのList
        List <MochaState> MyPossibleHighStateList = new List <MochaState>();
        List <MochaState> MyPossibleLowStateList  = new List <MochaState>();


        // ステートの設定した割合と実際の割合を比較し、合ったListに入れる
        void SortingStateList(MochaState mocha_state_)
        {
            if (RealStateRatio[(int)mocha_state_] < GuideStateRatio[(int)mocha_state_])
            {
                MyPossibleHighStateList.Add(mocha_state_);
            }
            else
            {
                MyPossibleLowStateList.Add(mocha_state_);
            }
        }

        // 聞いてきたモチャのMAXになっているパラメーターを調べる
        // もしMAXになっているパラメーターがあったら該当のステートをListに追加する
        {
            SortingStateList(MochaState.BREAK);

            int BreedMochaNum = 0;
            for (int i = 0; i < MochaList.Count; i++)
            {
                if (mocha[i].mocha_parameter.m_State == MochaState.BREED)
                {
                    BreedMochaNum++;
                }
            }
            if ( //もし今いる土地の潤い度が一定値以上なら &&
                MochaList.Count + BreedMochaNum < mocha_data.PopulationLimit)
            {
                SortingStateList(MochaState.BREED);
            }

            if (mocha[MyMochaNumber].mocha_parameter.m_Stamina >= 60)
            {
                SortingStateList(MochaState.CONSTRUCT);
            }

            /* if(暇しているモチャを探して、そのモチャのステートもして)
             * {
             *  SortingStateList(MochaState.REORGANIZE);
             * }
             */

            SortingStateList(MochaState.EMIGRATE);

            if (mocha[MyMochaNumber].mocha_parameter.m_Stamina < 60)
            {
                SortingStateList(MochaState.MEAL);
            }
        }

        void SortMyList(List <MochaState> mocha_state_)
        {
            // 各ステートリストの要素をステート優先度が高い順に並び替える
            for (int i = 0; i < mocha_state_.Count; i++)
            {
                MochaState MinPriority = mocha_state_[i];

                for (int j = i + 1; j < mocha_state_.Count; j++)
                {
                    if (mocha_data.mocha_state_info[(int)mocha_state_[j]].Priority >
                        mocha_data.mocha_state_info[(int)MinPriority].Priority)
                    {
                        MinPriority = mocha_state_[j];
                    }
                }

                mocha_state_.Remove(MinPriority);
                mocha_state_.Insert(0, MinPriority);
            }
        }

        SortMyList(MyPossibleHighStateList);
        SortMyList(MyPossibleLowStateList);

        List <MochaState> MyPossibleStateList = new List <MochaState>();

        MyPossibleStateList.AddRange(MyPossibleHighStateList);
        MyPossibleStateList.AddRange(MyPossibleLowStateList);

        // もし改装ステートに移行するなら、まず一緒に改装ステートに入れるモチャを探す
        if (MyPossibleStateList[0] == MochaState.REORGANIZE)
        {
            for (int i = 0; i < MochaList.Count; i++)
            {
                if (i == MyMochaNumber)
                {
                    continue;
                }

                if (mocha_data.mocha_state_info[(int)MochaState.REORGANIZE].Priority < mocha_data.mocha_state_info[(int)mocha[i].mocha_parameter.m_State].Priority)
                {
                }
            }
        }

        return(MyPossibleStateList[0]);
    }