private void IncreaseDwellingSlotsComponentSizeAndAttribute(DwarfsSlots dwarfsSlots) { DwarfsSlots[] tmpDwarfsSlots = new DwarfsSlots[workingsSlots.Length + 1]; for (int i = 0; i < workingsSlots.Length; i++) { tmpDwarfsSlots[i] = workingsSlots[i]; } tmpDwarfsSlots[tmpDwarfsSlots.Length - 1] = dwarfsSlots; workingsSlots = tmpDwarfsSlots; }
private void Produce(IronProducer ironProducer, GiverComponent ironGiver, DwarfsSlots dwarfsSlots) { if (!ironProducer || !ironGiver || !dwarfsSlots) { return; } if (ironProducer.timeSinceLastProduction >= ironProducer.productionEveryXMinutes * FramesPerSecond * secondPerMinute || ironGiver.amount < ironGiver.maxCapacity) { ironGiver.amount += (ironProducer.productionPerMinute * dwarfsSlots.dwarfsAlreadyIn); ironProducer.timeSinceLastProduction = 0; } else { ironProducer.timeSinceLastProduction++; } }
private void addNewMine(IronProducer ironProducer, GiverComponent ironGiver, DwarfsSlots dwarfsSlots) { IronProducer[] tmpIronProducers = new IronProducer[ironProducers.Length + 1]; GiverComponent[] tmpIronGivers = new GiverComponent[ironGivers.Length + 1]; DwarfsSlots[] tmpDwarfsSlots = new DwarfsSlots[workingSlots.Length + 1]; for (int i = 0; i < ironProducers.Length; i++) { tmpIronProducers[i] = ironProducers[i]; tmpIronGivers[i] = ironGivers[i]; tmpDwarfsSlots[i] = workingSlots[i]; } tmpIronProducers[tmpIronProducers.Length - 1] = ironProducer; tmpIronGivers[tmpIronProducers.Length - 1] = ironGiver; tmpDwarfsSlots[tmpDwarfsSlots.Length - 1] = dwarfsSlots; ironProducers = tmpIronProducers; ironGivers = tmpIronGivers; workingSlots = tmpDwarfsSlots; }
public void NewWorkingPlace(DwarfsSlots dwarfsSlots) { if (dwarfsSlots.buildingType == DwarfsSlots.BuildingType.DWELLING) { return; } IncreaseDwellingSlotsComponentSizeAndAttribute(dwarfsSlots); foreach (WorkingSlotIndexComponent workingSlotIndexComponent in workingSlotIndexComponents) { if (workingSlotIndexComponent.dwarfsSlots != null) { continue; } if (!AttributeDwellingToDwarf(workingSlotIndexComponent)) { break; } } }
public void newDwelling(DwarfsSlots dwarfsSlots) { if (dwarfsSlots.buildingType == DwarfsSlots.BuildingType.WORKING_PLACE) { return; } IncreaseDwellingSlotsComponentSizeAndAttribute(dwarfsSlots); foreach (DwellingSlotIndexComponent dwellingSlotIndexComponent in dwellingSlotIndexComponents) { if (dwellingSlotIndexComponent.dwarfsSlots != null) { continue; } if (!AttributeDwellingToDwarf(dwellingSlotIndexComponent)) { break; } } }
private void addNewDwellingsSlotsAndFoodInventory(ReceiverComponent recieverComponent, DwarfsSlots dwarfsSlots, FoodConsumer foodConsumer) { ReceiverComponent[] tmpFoodReceiever = new ReceiverComponent[recieverFoods.Length + 1]; DwarfsSlots[] tmpDwarfsSlots = new DwarfsSlots[dwellingSlots.Length + 1]; FoodConsumer[] tmpFoodConsumers = new FoodConsumer[foodConsumers.Length + 1]; for (int i = 0; i < recieverFoods.Length; i++) { tmpFoodReceiever[i] = recieverFoods[i]; tmpDwarfsSlots[i] = dwellingSlots[i]; tmpFoodConsumers[i] = foodConsumers[i]; } tmpFoodReceiever[tmpFoodReceiever.Length - 1] = recieverComponent; tmpDwarfsSlots[tmpDwarfsSlots.Length - 1] = dwarfsSlots; tmpFoodConsumers[tmpFoodConsumers.Length - 1] = foodConsumer; recieverFoods = tmpFoodReceiever; dwellingSlots = tmpDwarfsSlots; foodConsumers = tmpFoodConsumers; }
// Update is called once per frame void Update() { for (int index = 0; index < dwarfsSlotsComponents.Length; index++) { DwarfsSlots dwarfsSlotsComponent = dwarfsSlotsComponents[index]; if (dwarfsSlotsComponent.dwarfsInside.Count <= 0) { continue; } for (int i = 0; i < dwarfsSlotsComponent.dwarfsInside.Count; i++) { InventoryComponent inventoryComponent = dwarfsSlotsComponent.dwarfsInside[i]; bool found = false; foreach (InventoryComponent component in dwarfsSlotsComponent.dwarfsInside) { if (component == inventoryComponent) { found = true; break; } } if (!found) { return; } GiverComponent[] giverComponent = giverComponents[index]; ReceiverComponent[] receiverComponent = receiverComponents[index]; PassiveInventoryComponent[] passiveInventoryComponent = passiveInventoryComponents[index]; if (giverComponent != null && giverComponent.Length > 0) { foreach (GiverComponent component in giverComponent) { if (component.nbDwarfsAttributed > 0 && component.resourceType == inventoryComponent.resourceType) { if (inventoryComponent.amount >= inventoryComponent.maxCapacity) { continue; } if (component.amount < inventoryComponent.maxCapacity) { inventoryComponent.amount = component.amount; } else { inventoryComponent.amount = inventoryComponent.maxCapacity; } component.amount -= inventoryComponent.amount; component.nbDwarfsAttributed--; break; } } } if (receiverComponent != null && receiverComponent.Length > 0) { foreach (ReceiverComponent component in receiverComponent) { if (component.nbDwarfsAttributed > 0 && component.resourceType == inventoryComponent.resourceType) { component.amount += inventoryComponent.amount; inventoryComponent.amount = 0; component.nbDwarfsAttributed--; break; } } } if (passiveInventoryComponent != null && passiveInventoryComponent.Length > 0) { foreach (PassiveInventoryComponent component in passiveInventoryComponent) { if (component.resourceType == inventoryComponent.resourceType) { if (inventoryComponent.amount == 0) { inventoryComponent.amount = inventoryComponent.maxCapacity; component.amount -= inventoryComponent.amount; } else { component.amount += inventoryComponent.amount; inventoryComponent.amount = 0; } dwarfsSlotsComponent.dwarfsInside.Remove(inventoryComponent); break; } } } } } }
void Update() { if (dayCycleSystem.state != DayCycleSystem.State.WORK) { return; } //Get ressource from giver then go the passiveInventory for (int index = 0; index < giverComponents.Length; index++) { GiverComponent giverComponent = giverComponents[index]; if (giverComponent.nbDwarfsAttributed >= 1 || giverComponent.amount < 10) { continue; } for (int i = 0; i < pathComponents.Length; i++) { PathComponent pathComponent = pathComponents[i]; if (pathComponent.nodes.Length != 0) { continue; } Transform giverBuildingTransformsComponent = giverTransformComponents[index]; DwarfsSlots giverDwarfsSlots = giverDwarfsSlotComponents[index]; Transform dwarfsTransform = dwarfsTransformComponents[i]; //Then go to closet storage int indexPassiveInventory = GetClosestStorageIndexFromBuilding(giverBuildingTransformsComponent.position, giverComponent.resourceType); if (indexPassiveInventory == -1) { continue; } InventoryComponent dwarfsInventoryComponent = dwarfsInventoryComponents[i]; if (pathComponent.index != 0 && pathComponent.dwarfsSlots[pathComponent.index - 1] != null) { pathComponent.dwarfsSlots[pathComponent.index - 1].dwarfsAlreadyIn--; pathComponent.dwarfsSlots[pathComponent.index - 1].dwarfsInside .Remove(dwarfsInventoryComponent); } giverComponent.nbDwarfsAttributed++; dwarfsInventoryComponent.resourceType = giverComponent.resourceType; //Go to giver pathComponent.nodes = aStarSystem.GetPath(dwarfsTransform, giverBuildingTransformsComponent); pathComponent.dwarfsSlots = new DwarfsSlots[pathComponent.nodes.Length]; pathComponent.dwarfsSlots[pathComponent.nodes.Length - 1] = giverDwarfsSlots; pathComponent.index = 0; //Then go to closet storage GraphNodeComponent[] path2 = aStarSystem.GetPath(giverBuildingTransformsComponent, passiveInventoryTransformsComponents[indexPassiveInventory]); DwarfsSlots[] slots2 = new DwarfsSlots[path2.Length]; slots2[path2.Length - 1] = passiveInventoryDwarfsSlotsComponents[indexPassiveInventory]; pathComponent.nodes = pathComponent.nodes.Concat(path2).ToArray(); pathComponent.dwarfsSlots = pathComponent.dwarfsSlots.Concat(slots2).ToArray(); break; } } //Get ressource from storage then go the receiver for (int index = 0; index < receiverComponents.Length; index++) { ReceiverComponent receiverComponent = receiverComponents[index]; if (receiverComponent.nbDwarfsAttributed >= 1 || receiverComponent.amount >= receiverComponent.maxCapacity) { continue; } for (int i = 0; i < pathComponents.Length; i++) { PathComponent pathComponent = pathComponents[i]; if (pathComponent.nodes.Length != 0) { continue; } Transform receiverBuildingTransformsComponent = receiverTransformComponents[index]; DwarfsSlots receiverDwarfsSlots = receiverDwarfsSlotComponents[index]; Transform dwarfsTransform = dwarfsTransformComponents[i]; //Then go to closet storage int indexPassiveInventory = GetClosestStorageIndexFromBuilding(receiverBuildingTransformsComponent.position, receiverComponent.resourceType); if (indexPassiveInventory == -1) { continue; } InventoryComponent dwarfsInventoryComponent = dwarfsInventoryComponents[i]; if (pathComponent.index != 0 && pathComponent.dwarfsSlots[pathComponent.index - 1] != null) { pathComponent.dwarfsSlots[pathComponent.index - 1].dwarfsAlreadyIn--; pathComponent.dwarfsSlots[pathComponent.index - 1].dwarfsInside .Remove(dwarfsInventoryComponent); } receiverComponent.nbDwarfsAttributed++; dwarfsInventoryComponent.resourceType = receiverComponent.resourceType; //Go to closet storage pathComponent.nodes = aStarSystem.GetPath(dwarfsTransform, passiveInventoryTransformsComponents[indexPassiveInventory]); pathComponent.dwarfsSlots = new DwarfsSlots[pathComponent.nodes.Length]; pathComponent.dwarfsSlots[pathComponent.nodes.Length - 1] = passiveInventoryDwarfsSlotsComponents[indexPassiveInventory]; pathComponent.index = 0; //Then go to giver GraphNodeComponent[] path2 = aStarSystem.GetPath(passiveInventoryTransformsComponents[indexPassiveInventory], receiverBuildingTransformsComponent); DwarfsSlots[] slots2 = new DwarfsSlots[path2.Length]; slots2[path2.Length - 1] = receiverDwarfsSlots; pathComponent.nodes = pathComponent.nodes.Concat(path2).ToArray(); pathComponent.dwarfsSlots = pathComponent.dwarfsSlots.Concat(slots2).ToArray(); break; } } }
public void UnregisterDwelling(DwarfsSlots ds) { populationCapacity -= ds.maxNumberSlots; }