public virtual void WorkTask() { TaskBlockage status = TaskDoable(); if (status == TaskBlockage.doable) { taskTimer += TaskRatio() * Time.deltaTime; } else { CancelTask(status); } if (taskTimer > taskSpeed) { DoTask(); } }
public override void WorkTask() { List <Vector2Int> listPosition; listPosition = ClosePosition(); foreach (Vector2Int vect in unavailablePosition) { if (listPosition.Contains(vect)) { listPosition.Remove(vect); } } listPosition = CleanOutside(listPosition); if (listPosition.Count > 0) { destination = ChooseDestination(listPosition); TaskBlockage status = TaskDoable(); switch (status) { case (TaskBlockage.doable): if (destination != actor.position) { Map map = GameState.instance.map; if (secondaryTask != null) { if (secondaryTask.pathToFollow != null) { if (secondaryTask.pathToFollow.waypoints[0] != null) { if (secondaryTask.pathToFollow.waypoints[0].relatedTile.position != destination) { secondaryTask = new MoveTask(map.GetPath(map.GetTile(actor.position.x, actor.position.y), map.GetTile(destination.x, destination.y))); secondaryTask.actor = actor; } else { /*secondaryTask = new MoveTask(map.GetPath(map.GetTile(actor.position.x, actor.position.y), map.GetTile(destination.x, destination.y))); * secondaryTask.actor = actor;*/ } } else { unavailablePosition.Add(destination); WorkTask(); } } else { secondaryTask.pathToFollow = map.GetPath(map.GetTile(actor.position.x, actor.position.y), map.GetTile(destination.x, destination.y)); if (secondaryTask.pathToFollow == null) { unavailablePosition.Add(destination); WorkTask(); } } secondaryTask.WorkTask(); taskTimer = 0; } else { secondaryTask = new MoveTask(map.GetPath(map.GetTile(actor.position.x, actor.position.y), map.GetTile(destination.x, destination.y))); secondaryTask.actor = actor; } } else { taskTimer += Time.deltaTime * TaskRatio(); DoMainTask(); if (taskTimer > taskSpeed) { DoTask(); } } break; default: CancelTask(status); break; } } else { CancelTask(TaskBlockage.noPath); } }
public virtual void CancelTask(TaskBlockage _status) { actor.RemoveTask(this, _status); }