Пример #1
0
    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);
            }
        }
    }
Пример #2
0
    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;
                }
            }
        }
    }