// Update is called once per frame void Update() { for (int index = 0; index < motionComponents.Length; index++) { MotionComponent motionComponent = motionComponents[index]; PathComponent pathComponent = pathComponents[index]; Transform transformComponent = transformComponents[index]; InventoryComponent inventoryComponent = inventoryComponents[index]; if (pathComponent.nodes == null || pathComponent.nodes.Length == 0) { continue; } //Test distance if (Vector2.Distance(transformComponent.position, pathComponent.nodes[pathComponent.index].position.position) < 0.2f) { if (pathComponent.index != 0 && pathComponent.dwarfsSlots[pathComponent.index - 1] != null) { pathComponent.dwarfsSlots[pathComponent.index - 1].dwarfsAlreadyIn--; if (inventoryComponent != null) { pathComponent.dwarfsSlots[pathComponent.index - 1].dwarfsInside.Remove(inventoryComponent); } } if (pathComponent.index != 0 && pathComponent.dwarfsSlots[pathComponent.index] != null) { pathComponent.dwarfsSlots[pathComponent.index].dwarfsAlreadyIn++; if (inventoryComponent != null) { pathComponent.dwarfsSlots[pathComponent.index].dwarfsInside.Add(inventoryComponent); } } pathComponent.index++; if (pathComponent.index >= pathComponent.nodes.Length) { pathComponent.nodes = new GraphNodeComponent[0]; motionComponent.direction = Vector2.zero; continue; } } motionComponent.direction = (pathComponent.nodes[pathComponent.index].position.position - transformComponent.position).normalized; float maxCost = 5; float speed = motionComponent.maxSpeed / ((Mathf.Lerp(0, maxCost, pathComponent.nodes[pathComponent.index].cost) / maxCost) * 2); if (pathComponent.index > 0) { if (Vector2.Distance(transformComponent.position, pathComponent.nodes[pathComponent.index].position.position) > Vector2.Distance(transformComponent.position, pathComponent.nodes[pathComponent.index - 1].position.position)) { speed = motionComponent.maxSpeed / ((Mathf.Lerp(0, maxCost, pathComponent.nodes[pathComponent.index - 1].cost) / maxCost) * 2); } else { speed = motionComponent.maxSpeed / ((Mathf.Lerp(0, maxCost, pathComponent.nodes[pathComponent.index].cost) / maxCost) * 2); } } else { speed = motionComponent.maxSpeed / ((Mathf.Lerp(0, maxCost, pathComponent.nodes[pathComponent.index].cost) / maxCost) * 2); } motionComponent.speed = Mathf.Clamp(speed, 0, motionComponent.maxSpeed); } }
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; } } }