/// <summary>
        /// 初期化
        /// </summary>
        public static void Init()
        {
            if (_instance == null)
            {
                var go = new GameObject();
                DontDestroyOnLoad(go);
                _instance = go.AddComponent <ExtraEditMod>();
                _instance.isEnableModMenuGui = false;


                _instance.m_settingData         = _instance.m_editSetting.LoadSettings();
                AddLob.enableAddLob             = _instance.m_settingData.enableAddLob;
                AddEnergy.enableAddEnergy       = _instance.m_settingData.enableAddEnergy;
                AlwayGetGift.enableAlwayGetGift = _instance.m_settingData.enableAlwayGetGift;
                MalkutNotes.enableMalkutNotes   = _instance.m_settingData.enableMalkutNote;
                TaskManager.enableTaskManager   = _instance.m_settingData.enableTaskManager;

                //このmodが起動したシーンと現状のシーンを登録
                _instance.currentSceneName = SceneManager.GetActiveScene().name;

                //modデバッグ用

                /*
                 * TextAsset textAsset = Resources.Load<TextAsset>("xml/CreatureGenInfo");
                 * m_debuglog += textAsset.text;
                 * m_debuglog += _instance.CreatureIdAndNameList();
                 */
            }
        }
Пример #2
0
        public void Update()
        {
            var manager = GameManager.currentGameManager;
            var window  = CommandWindow.CommandWindow.CurrentWindow;

            //準備が出来てなかったり、この機能が使用できない状態の時
            if (manager == null || window == null || !manager.ManageStarted || !enableTaskManager)
            {
                if (logStatus != LogStatus.Init)
                {
                    AllReset();
                    TaskReset();
                    logStatus    = LogStatus.Init;
                    m_statusText = "";
                }
                return;
            }

            bool isSort = false;

            //一時的なリストにあるものをチェックし、指示がキャンセルされてないか確認する
            for (int i = 0; i < m_tempLogList.Count; i++)
            {
                if (m_tempLogList[i].actor.GetState() == AgentAIState.MANAGE && !m_tempLogList[i].m_deleteFlag)
                {
                    //AgentAIState.MANAGE 且つ キャンセルできない で タスク登録
                    if (!m_tempLogList[i].actor.canCancelCurrentWork)
                    {
                        isSort = true;
                        m_workLogList.Add(m_tempLogList[i]);
                        m_tempLogList.RemoveAt(i);
                        i--;
                    }
                }
                else //ステータスが変わったものはキャンセルとして扱う
                {
                    m_tempLogList.RemoveAt(i);
                    i--;
                }
            }
            for (int i = 0; i < m_workLogList.Count; i++)
            {
                if (m_workLogList[i].m_deleteFlag)
                {
                    m_workLogList.RemoveAt(i);
                    i--;
                }
            }

            //時間を整数にしてソートする
            if (isSort)
            {
                m_workLogList.Sort((a, b) => (int)(a.timer * 1000) - (int)(b.timer * 1000));
            }


            if (m_recodeWorkLog)
            {
                m_recodeElapsed += Time.deltaTime;

                m_statusText = "経過時間:" + m_recodeElapsed + "\n";
                m_logText    = "";
                for (int i = 0; i < m_workLogList.Count; i++)
                {
                    m_logText += m_workLogList[i].toString();
                }
            }
            else
            {
                m_recodeElapsed = 0.0f;
            }

            if (m_playWorkLog && 0 < m_workLogList.Count)
            {
                if (window.IsEnabled)
                {
                    m_statusText = "ウインドウの閉じ待ち";
                    return;
                }


                //var isCreatureEscaped = GameStatusUI.GameStatusUI.Window.sceneController.IsCreatureEscaped;

                //if (isCreatureEscaped)
                //{
                //    m_statusText = "収容違反が発生したため一時停止";
                //    m_playWorkLog = false;
                //    logStatus = LogStatus.Pause;
                //    return;
                //}



                m_statusText      = (m_loopCount + 1) + "巡目 経過時間:" + m_workLogElapsed + "\n";
                m_workLogElapsed += Time.deltaTime;

                if (m_workLogList.Count <= m_workLogIndex)
                {
                    //最後のエージェントの仕事が終わったらリセットする
                    if (AllTaskListCheck())
                    {
                        m_loopCount++;
                        TaskReset();
                        return;
                    }
                }

                if (m_workLogIndex < m_workLogList.Count && m_workLogList[m_workLogIndex].timer < m_workLogElapsed)
                {
                    //状態異常や別の仕事を割り振っている場合
                    if (!isNormalStatus(m_workLogList[m_workLogIndex].actor) || m_workLogList[m_workLogList.Count - 1].actor.GetState() != AgentAIState.IDLE)
                    {
                        m_statusText  = m_workLogList[m_workLogIndex].actor._agentName.GetName() + "が、指定した時間に作業できない状態だったため、タスク中止";
                        m_playWorkLog = false;
                        TaskReset();
                        logStatus = LogStatus.Stop;
                        return;
                    }
                    CommandWindow.CommandWindow.CreateWindow(CommandType.Management, m_workLogList[m_workLogIndex].target);
                    window.SelectedWork = m_workLogList[m_workLogIndex].skill;

                    ExtraEditMod.OnClick(m_workLogList[m_workLogIndex].actor);
                    m_workLogIndex++;
                }
            }
        }