public override void Update(Dwarf d, float dt, double dtd) { if (_currentTask == null) { if (_currentTask == null) return; _currentBehavior = _currentTask.ActivateBehavior(d); } _currentBehavior.Execute(d, dt, dtd); if (_currentBehavior.State == TaskState.Success) { Stop(); Update(d, dt, dtd); } else if (_currentBehavior.State == TaskState.Fail) { Stop(); Update(d, dt, dtd); } else if (_currentBehavior.State == TaskState.SmallFail) { Stop(); Update(d, dt, dtd); } else if (_currentBehavior.State == TaskState.Absolete) { Stop(); Update(d, dt, dtd); } base.Update(d, dt, dtd); }
public void MoveToPasture(PastureSim pasture) { _pasture = pasture; _currentTask = new MoveToPositionTask(pasture.GetRandomFreeSpace()); _currentBehavior = null; _inPasture = true; }
public override void Update(Dwarf d, float dt, double dtd) { if (_currentBehavior == null) { _currentBehavior = _currentTask.ActivateBehavior(d); } _currentBehavior.Execute(d, dt, dtd); if (_leaving && d.Position == new Vector3(1, 1, 5)) d.Destroyy(); base.Update(d, dt, dtd); }
public override void Update(Dwarf d, float dt, double dtd) { if (_currentBehavior == null && _currentTask != null) _currentBehavior = _currentTask.ActivateBehavior(d); // If not in pasture, move around randomly if (_inPasture == false) { if (_waitTime == 0) _waitTime = (float)DwarfRandom.GetRandomInt(4000, 15000); _timeWaited += dt; if (_timeWaited >= _waitTime) { MoveRandom(d); _timeWaited = 0; } } // If in pasture, move around randomly inside pasture if (_inPasture == true && _currentTask == null) { if (_waitTime == 0) _waitTime = (float)DwarfRandom.GetRandomInt(4000, 15000); _timeWaited += dt; if (_timeWaited >= _waitTime) { MoveRandomInPasture(d); _timeWaited = 0; } } if (_currentBehavior != null) { if (_currentBehavior.Execute(d, dt,dtd) == TaskState.Success) { _currentTask = null; _currentBehavior = null; } } base.Update(d, dt, dtd); }
private void Stop() { _currentTask = null; _currentBehavior = null; }
public void Attack(Minion d) { Building b = WorldMap.Instance.GetBuildings(Buildings.BuildingType.Depot)[0]; _currentTask = new MoveToFortressTask(b); _currentBehavior = _currentTask.ActivateBehavior(d); }
public void Leave() { _currentTask = new MoveToPositionTask(new Microsoft.Xna.Framework.Vector2(1, 1)); _currentBehavior = null; _leaving = true; }
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 void AddSelector(Selector selector) { Nodes.Add(selector); }
private void MoveRandom(Dwarf d) { Vector2 moveTo = Vector2.Zero; int ran = DwarfRandom.GetRandomInt(1, 4); if (ran == 1 && WorldMap.Instance.GetMapElement((int)d.Position.X + 1, (int)d.Position.Y, 5) == null) { moveTo = new Vector2(d.Position.X + 1, d.Position.Y); } if (ran == 2 && WorldMap.Instance.GetMapElement((int)d.Position.X - 1, (int)d.Position.Y, 5) == null) { moveTo = new Vector2(d.Position.X - 1, d.Position.Y); } if (ran == 3 && WorldMap.Instance.GetMapElement((int)d.Position.X, (int)d.Position.Y + 1, 5) == null) { moveTo = new Vector2(d.Position.X, d.Position.Y+1); } if (ran == 4 && WorldMap.Instance.GetMapElement((int)d.Position.X, (int)d.Position.Y - 1, 5) == null) { moveTo = new Vector2(d.Position.X, d.Position.Y-1); } if (moveTo == Vector2.Zero) return; else { _currentTask = new MoveToPositionTask(moveTo); _currentBehavior = _currentTask.ActivateBehavior(d); } }
private void MoveRandomInPasture(Dwarf d) { _currentTask = new MoveToPositionTask(_pasture.GetRandomFreeSpace()); _currentBehavior = _currentTask.ActivateBehavior(d); }