| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -11,7 +11,9 @@ package engine.gameManager; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import engine.loot.WorkOrder; | 
					 | 
					 | 
					 | 
					import engine.loot.WorkOrder; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import engine.mbEnums; | 
					 | 
					 | 
					 | 
					import engine.mbEnums; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import engine.objects.Item; | 
					 | 
					 | 
					 | 
					import engine.objects.Item; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					import engine.objects.ItemTemplate; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import engine.objects.PlayerCharacter; | 
					 | 
					 | 
					 | 
					import engine.objects.PlayerCharacter; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					import engine.powers.EffectsBase; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import org.pmw.tinylog.Logger; | 
					 | 
					 | 
					 | 
					import org.pmw.tinylog.Logger; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import java.util.HashMap; | 
					 | 
					 | 
					 | 
					import java.util.HashMap; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -89,9 +91,15 @@ public enum ForgeManager implements Runnable { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        workOrder.workOrderID = wordOrderCounter.incrementAndGet(); | 
					 | 
					 | 
					 | 
					        workOrder.workOrderID = wordOrderCounter.incrementAndGet(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        workOrder.completionTime = System.currentTimeMillis() + workOrder.rollingDuration; | 
					 | 
					 | 
					 | 
					        workOrder.completionTime = System.currentTimeMillis() + workOrder.rollingDuration; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        workOrder.slotCount = calcAvailableSlots(workOrder); | 
					 | 
					 | 
					 | 
					        workOrder.slotCount = calcAvailableSlots(workOrder); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        workOrder.production_cost = calcProductionCost(workOrder); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        workOrder.rollingDuration = ForgeManager.calcRollingDuration(workOrder); | 
					 | 
					 | 
					 | 
					        workOrder.rollingDuration = ForgeManager.calcRollingDuration(workOrder); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        // Cost to execute this workOrder
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        workOrder.production_cost = calcProductionCost(workOrder); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        for (mbEnums.ResourceType resourceType : workOrder.production_cost.keySet()) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            workOrder.production_cost.compute(resourceType, (k, resourceValue) -> resourceValue * workOrder.total_to_produce); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // Single item rolls are total_to_produce of 0;
 | 
					 | 
					 | 
					 | 
					        // Single item rolls are total_to_produce of 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (workOrder.slotCount > 0 && workOrder.total_to_produce == 0) | 
					 | 
					 | 
					 | 
					        if (workOrder.slotCount > 0 && workOrder.total_to_produce == 0) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -149,7 +157,28 @@ public enum ForgeManager implements Runnable { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    public static HashMap<mbEnums.ResourceType, Integer> calcProductionCost(WorkOrder workOrder) { | 
					 | 
					 | 
					 | 
					    public static HashMap<mbEnums.ResourceType, Integer> calcProductionCost(WorkOrder workOrder) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        HashMap<mbEnums.ResourceType, Integer> production_cost = new HashMap<>(); | 
					 | 
					 | 
					 | 
					        HashMap<mbEnums.ResourceType, Integer> production_cost = new HashMap<>(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        ItemTemplate template = ItemTemplate.templates.get(workOrder.templateID); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        // Add gold and resource costs from template
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        production_cost.put(mbEnums.ResourceType.GOLD, template.item_value); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        production_cost.putAll(template.item_resource_cost); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        // Calculate cost of prefix and suffix
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (workOrder.prefixToken != 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            EffectsBase prefix = PowersManager.getEffectByToken(workOrder.prefixToken); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            EffectsBase prefixValue = PowersManager.getEffectByIDString(prefix.getIDString() + 'A'); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            production_cost.putAll(prefixValue.getResourcesForEffect()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (workOrder.suffixToken != 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            EffectsBase suffix = PowersManager.getEffectByToken(workOrder.suffixToken); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            EffectsBase suffixValue = PowersManager.getEffectByIDString(suffix.getIDString() + 'A'); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            production_cost.putAll(suffixValue.getResourcesForEffect()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        return production_cost; | 
					 | 
					 | 
					 | 
					        return production_cost; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |