public static void AddPriorityBox(string name, GlobalJobType type) { PriorityBox p = new PriorityBox(name, type, OnPriorityChanged); TakePriority(0, p, true); _priorityBoxes.Add(p); _priorityBoxesDic.Add(name, p); GuiSystem.AddGuiComponent(p); }
public static bool AssignDwarfToBuilding(GlobalJobType type, Dwarf d, List<Building> failedBuildings) { Building buildingToWorkAt = GetAvailableBuilding(type, d, failedBuildings); if (buildingToWorkAt == null) { UnassignDwarfFromBuilding(d); //d.AssignedGlobalTaskType = GlobalJobType.None; return false; } // Assign to dwarf, but first unassign previus building (if any) UnassignDwarfFromBuilding(d); d.AssignedWorkBuilding = buildingToWorkAt; d.AssignedGlobalTaskType = type; buildingToWorkAt.DwarfsWorkingOnBuilding.Add(d); return true; }
public PriorityBox(string name, GlobalJobType type, Func<NumberChooser, int, bool> validator) { Type = type; Name = name; _windowTexture = GameLoop.GlobalContent.Load<Texture2D>("priorityBox"); _font = GameLoop.GlobalContent.Load<BitmapFont>("Fonts/pressStart2P"); Priority = 1000000; int max = 0; if (name == "Mining" || name == "Hauling") max = 9999; _numberChooser = new NumberChooser(new Vector2(230, 10), max, 0, validator); AddGuiComponent(_numberChooser); }
//private static TaskType BestTaskTypeForDwarf(Dwarf dwarf) //{ // // TODO: Add logic // if (_tasks.ContainsKey(TaskType.CollectingToDepot) && // NumberOfOpenTasks(TaskType.CollectingToDepot) > 0) // return TaskType.CollectingToDepot; // else if (_tasks.ContainsKey(TaskType.Mining) && // NumberOfOpenTasks(TaskType.Mining) > 0) // return TaskType.Mining; // else if (_tasks.ContainsKey(TaskType.MoveCraftedResource) && NumberOfOpenTasks(TaskType.MoveCraftedResource) > 0) // return TaskType.MoveCraftedResource; // // TODO: Disse to er afhængig af rækkefølgen.. :( // else if (_tasks.ContainsKey(TaskType.GetBuildingMaterial) && NumberOfOpenTasks(TaskType.GetBuildingMaterial) > 0) // return TaskType.GetBuildingMaterial; // else if (_tasks.ContainsKey(TaskType.BuildBuilding) && NumberOfOpenTasks(TaskType.BuildBuilding) > 0) // return TaskType.BuildBuilding; // else if (_tasks.ContainsKey(TaskType.PlaceWorldObject) && NumberOfOpenTasks(TaskType.PlaceWorldObject) > 0) // return TaskType.PlaceWorldObject; // else if (_tasks.ContainsKey(TaskType.CraftingOfResource) && NumberOfOpenTasks(TaskType.CraftingOfResource) > 0) // return TaskType.CraftingOfResource; // else if (_tasks.ContainsKey(TaskType.PlantCrop) && NumberOfOpenTasks(TaskType.PlantCrop) > 0) // return TaskType.PlantCrop; // else if (_tasks.ContainsKey(TaskType.HarvestCrop) && NumberOfOpenTasks(TaskType.HarvestCrop) > 0) // return TaskType.HarvestCrop; // else if (_tasks.ContainsKey(TaskType.CraftingOfAmmo) && NumberOfOpenTasks(TaskType.CraftingOfAmmo) > 0) // return TaskType.CraftingOfAmmo; // else if (_tasks.ContainsKey(TaskType.BikeGeneration) && NumberOfOpenTasks(TaskType.BikeGeneration) > 0) // return TaskType.BikeGeneration; // else if (_tasks.ContainsKey(TaskType.GetCoalForPowerGenerator) && NumberOfOpenTasks(TaskType.GetCoalForPowerGenerator) > 0) // return TaskType.GetCoalForPowerGenerator; // else if (_tasks.ContainsKey(TaskType.WorkAtPasture) && NumberOfOpenTasks(TaskType.WorkAtPasture) > 0) // return TaskType.WorkAtPasture; // else if (_tasks.ContainsKey(TaskType.CollectFoodFromPasture) && NumberOfOpenTasks(TaskType.CollectFoodFromPasture) > 0) // return TaskType.CollectFoodFromPasture; // else // throw new Exception("No tasks available"); //} private static List<Task> GetTasksByJob(GlobalJobType job) { if (_tasksJobType.ContainsKey(job) == false) _tasksJobType.Add(job, new List<Task>()); return _tasksJobType[job]; }
private static Task GetTaskFromGlobalJobType(GlobalJobType type) { if (_tasksJobType.ContainsKey(type) && _tasksJobType[type].Count > 0) { return _tasksJobType[type][0]; } else return null; }
private static Building GetAvailableBuilding(GlobalJobType type, Dwarf d, List<Building> failedBuilding) { //if (d.AssignedWorkBuilding != null) //{ //} foreach (Building b in _availableJobBuildings[type]) { if ( ( b.DwarfsWorkingOnBuilding.Count < b.MaxNumberOfWorkingDwarfs || (d.AssignedWorkBuilding != null && d.AssignedWorkBuilding != b) // Used to construction tasks to skip buildings that have no more avaiable tasks.. long story ) && failedBuilding.Contains(b) == false ) { return b; } } return null; throw new Exception("No buildings available"); }
private static void AssignDwarfsToBuilding(List<Dwarf> taken, GlobalJobType type) { foreach (Dwarf d in taken) { AssignDwarfToBuilding(type, d, new List<Building>()); } }
public static void UnRegisterJobBuilding(GlobalJobType type, Building building) { _availableJobBuildings[type].Remove(building); if (type == GlobalJobType.Construction) { PrioritySystem.AddLimit("Construction", -building.MaxNumberOfWorkingDwarfs); } else if (type == GlobalJobType.Sawmill) { PrioritySystem.AddLimit("Sawmill", -building.MaxNumberOfWorkingDwarfs); } else if (type == GlobalJobType.Farming) { PrioritySystem.AddLimit("Farming", -building.MaxNumberOfWorkingDwarfs); } else throw new Exception("Unknown type"); }
public static void RegisterJobBuilding(GlobalJobType type, Building building) { if (_availableJobBuildings.ContainsKey(type) == false) { _availableJobBuildings[type] = new List<Buildings.Building>(); } _availableJobBuildings[type].Add(building); if (type == GlobalJobType.Construction) { PrioritySystem.AddLimit("Construction", building.MaxNumberOfWorkingDwarfs); } else if (type == GlobalJobType.Sawmill) { PrioritySystem.AddLimit("Sawmill", building.MaxNumberOfWorkingDwarfs); } else if (type == GlobalJobType.Farming) { PrioritySystem.AddLimit("Farming", building.MaxNumberOfWorkingDwarfs); } else if (type == GlobalJobType.ToolMaking) PrioritySystem.AddLimit("Tool Making", building.MaxNumberOfWorkingDwarfs); else if (type == GlobalJobType.Smelting) PrioritySystem.AddLimit("Smelting", building.MaxNumberOfWorkingDwarfs); else if (type == GlobalJobType.Brewing) PrioritySystem.AddLimit("Brewing", building.MaxNumberOfWorkingDwarfs); else if (type == GlobalJobType.Weaving) PrioritySystem.AddLimit("Weaving", building.MaxNumberOfWorkingDwarfs); else if (type == GlobalJobType.Cooking) PrioritySystem.AddLimit("Cooking", building.MaxNumberOfWorkingDwarfs); else if (type == GlobalJobType.Pasturing) PrioritySystem.AddLimit("Pasturing", building.MaxNumberOfWorkingDwarfs); else if (type == GlobalJobType.Mason) PrioritySystem.AddLimit("Mason", building.MaxNumberOfWorkingDwarfs); else if (type == GlobalJobType.Arrowsmith) PrioritySystem.AddLimit("Arrow Production", building.MaxNumberOfWorkingDwarfs); else throw new Exception("Unknown type"); }