public void AddNewJob(BaseTile tile, BaseBuildingTool tool) { BuildingTask existingTask = Queue.FirstOrDefault(task => task.BaseTile == tile) ?? WaitQueue.FirstOrDefault(task => task.BaseTile == tile); if (existingTask == null) { BuildingTask buildingTask = new BuildingTask(tile, tool); switch (tool) { case BaseBuildingTool.DestroyRoom: if (!tile.IsIndestructable && tile.RoomScript != null && tile.RoomScript.IsRoom()) { Add(buildingTask); } break; case BaseBuildingTool.Wall: //Queue.Add(buildingTask); // TODO: when building walls is gonna be a thing break; case BaseBuildingTool.AntRoom: if (!tile.IsUnbuildable && tile.RoomScript == null && CalculateAndDoCost(BaseBuildingTool.AntRoom)) { Add(buildingTask); } break; default: if (tile.RoomScript != null && !tile.RoomScript.IsRoom() && !tile.IsIndestructable) { bool able = false; foreach (var neighbor in buildingTask.BaseTile.Neighbors) { if (Astar.CanFindQueen(neighbor, controller.QueenRoom.GetBaseTile())) { able = true; break; } } Add(buildingTask, !able); } break; } } else { if (existingTask.BaseBuildingTool == tool || tool == BaseBuildingTool.DestroyRoom) { Remove(existingTask, true); } } }
public void VerifyTasks() { if (WaitQueue.Count == 0) { return; } for (int i = WaitQueue.Count - 1; i >= 0; i--) { foreach (var neighbor in WaitQueue[i].BaseTile.Neighbors) { if (Astar.CanFindQueen(neighbor, controller.QueenRoom.GetBaseTile())) { Queue.Add(WaitQueue[i]); WaitQueue.RemoveAt(i); break; } } } }