/// <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(); */ } }
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++; } } }