// Generate Queue of WorkerCommands
    public Queue <AI_GameBehaviourCommand> GetWorkerReassignmentCommands(Dictionary <ResourceType, int> distribution)
    {
        // Queue to output
        Queue <AI_GameBehaviourCommand> commands = new Queue <AI_GameBehaviourCommand>();

        ResourceGatheringModel resourceGatheringModel = GetResourceController().gatheringController.gatheringModel;

        // current values
        int currWoodWorkers       = resourceGatheringModel.GetNumWorkers(ResourceType.WOOD);
        int currMagicStoneWorkers = resourceGatheringModel.GetNumWorkers(ResourceType.MAGIC_STONE);
        int currIdleWorkers       = resourceGatheringModel.GetNumIdleWorkers();


        // target values
        int targetWoodWorkers       = distribution[ResourceType.WOOD];
        int targetMagicStoneWorkers = distribution[ResourceType.MAGIC_STONE];

        // differences
        int numWoodWorkersToAdd       = targetWoodWorkers - currWoodWorkers;
        int numMagicStoneWorkersToAdd = targetMagicStoneWorkers - currMagicStoneWorkers;


        // Remove Wood Workers
        if (numWoodWorkersToAdd < 0)
        {
            for (int i = numWoodWorkersToAdd; i < 0; i++)
            {
                GameBehaviourCommand    command   = WorkerCommandFactory.CreateRemoveWorkerCommand(ResourceType.WOOD, PlayerType.AI);
                AI_GameBehaviourCommand aiCommand = new AI_GameBehaviourCommand(command);
                commands.Enqueue(aiCommand);
            }
        }

        // Remove Magic Stone Workers
        if (numMagicStoneWorkersToAdd < 0)
        {
            for (int i = numMagicStoneWorkersToAdd; i < 0; i++)
            {
                GameBehaviourCommand    command   = WorkerCommandFactory.CreateRemoveWorkerCommand(ResourceType.MAGIC_STONE, PlayerType.AI);
                AI_GameBehaviourCommand aiCommand = new AI_GameBehaviourCommand(command);
                commands.Enqueue(aiCommand);
            }
        }

        // Add Wood Workers
        if (numWoodWorkersToAdd > 0)
        {
            for (int i = 0; i < numWoodWorkersToAdd; i++)
            {
                GameBehaviourCommand    command   = WorkerCommandFactory.CreateAddWorkerCommand(ResourceType.WOOD, PlayerType.AI);
                AI_GameBehaviourCommand aiCommand = new AI_GameBehaviourCommand(command);
                commands.Enqueue(aiCommand);
            }
        }

        // Add Magic Stone Workers
        if (numMagicStoneWorkersToAdd > 0)
        {
            for (int i = 0; i < numMagicStoneWorkersToAdd; i++)
            {
                GameBehaviourCommand    command   = WorkerCommandFactory.CreateAddWorkerCommand(ResourceType.MAGIC_STONE, PlayerType.AI);
                AI_GameBehaviourCommand aiCommand = new AI_GameBehaviourCommand(command);
                commands.Enqueue(aiCommand);
            }
        }

        return(commands);
    }
Exemple #2
0
    public void AddWorker()
    {
        GameBehaviourCommand command = WorkerCommandFactory.CreateAddWorkerCommand(resourceType, PlayerType.PLAYER);

        QueueUpCommand(command);
    }