public override void Update(Dwarf d, float dt, double dtd) { List<Dwarf> dwarfs = WorldMap.Instance.GetAllDwarfs(); if (_currentTask == null) { _prevTask = _currentTask; _currentTask = TaskManager.GetTask(d, _failedTasks, _failedBuildings); if (_currentTask == null) { _failedTasks.Clear(); return; } #if DEBUG_WINDOW DebugWindow.Instance.ChangeDwarfTask(d, _currentTask); #endif _currentBehavior = _currentTask.ActivateBehavior(d); } TaskState result = _currentBehavior.Execute(d, dt, dtd); #if DEBUG_WINDOW //Console.WriteLine(_currentBehavior.ToString()); //DebugWindow.Instance.ChangeDwarfTaskStatus(d, _currentTask) #endif if (_currentBehavior.State == TaskState.Success) { DwarfConsole.WriteLine("Task: " + _currentTask.ToString() + " is success " + _currentTask.Id, ConsoleColor.Gray); //TaskManager.PrintOutTasks(); TaskManager.FinishTask(_currentTask); Stop(); Update(d, dt, dtd); d.PersonalSkiped(); } else if (_currentBehavior.State == TaskState.Fail) { //DwarfConsole.WriteLine("Task failed: " + _currentTask.TaskType, ConsoleColor.Red); TaskManager.TaskFailed(_currentTask); _failedTasks.Add(_currentTask); Stop(); Update(d, dt, dtd); } else if (_currentBehavior.State == TaskState.SmallFail) { DwarfConsole.WriteLine("Task small failed: " + _currentTask.TaskType + " - ", ConsoleColor.Magenta); TaskManager.TaskSmallFail(_currentTask); _failedTasks.Add(_currentTask); Stop(); Update(d, dt, dtd); } else if (_currentBehavior.State == TaskState.Absolete) { DwarfConsole.WriteLine("Task ABSOLETE: " + _currentTask.TaskType + " - ", ConsoleColor.Magenta); TaskManager.TaskAbsolete(_currentTask); Stop(); Update(d, dt, dtd); } else if (_currentBehavior.State == TaskState.PersonalSuccess) { DwarfConsole.WriteLine("Task: " + _currentTask.ToString() + " is success", ConsoleColor.DarkCyan); Stop(); Update(d, dt, dtd); } else if (_currentBehavior.State == TaskState.PersonalFail) { _failedTasks.Add(_currentTask); d.SkipPersonal(); Stop(); } else if (_currentBehavior.State == TaskState.PersonalFailTryTaskAgain) { _currentBehavior = _currentTask.ActivateBehavior(d); } else if (_currentBehavior.State == TaskState.PersonalFailTryBehaviorAgain) { } _failedTasks.Clear(); _failedBuildings.Clear(); }
public static Task GetTask(Dwarf d, List<Task> failedTasks, List<Building> failedBuildings) { if (_taskMode == TaskMode.Peace) { // If a previous GetTask resulted in a request for a task, we see if request has been processed if (_numberOfPathRequests.ContainsKey(d.Id) == true) { Task readyTask = CheckOldPathfindingRequests(d); return readyTask; } else { // If we don't do this, personal task will never be taken if 0 tasks are available if (NumberOfOpenTasks() == 0) d.PersonalSkiped(); // e.g eat food Task personalTask = RequestPersonalTask(d); if (personalTask != null) return personalTask; //if (NumberOfOpenTasks() == 0) // return null; Task t = RequestTask(d, failedTasks, failedBuildings); if (t == null) t = RequestDefaultTask(d, failedTasks, failedBuildings); if (t != null) TakeTask(t); return t; } } if (_taskMode == TaskMode.Combat) { if (_combatTasks.Count != 0) { Task takenTask = _combatTasks[0]; TakeCombatTask(takenTask); return takenTask; } return null; } throw new Exception("Ehhh"); }