from enum import Enum from typing import Dict from pydantic import BaseModel, Field from shared import Machine, Item class Machines(Enum): Smelter = Machine(name="Smelter") Constructor = Machine(name="Constructor") Assembler = Machine(name="Assembler") Foundry = Machine(name="Foundry") Manufacturer = Machine(name="Manufacturer") Blender = Machine(name="Blender") Refinery = Machine(name="Refinery") class Items(Enum): IronIngot = Item(name="Iron Ingot") CopperIngot = Item(name="Copper Ingot") Limestone = Item(name="Limestone") IronOre = Item(name="Iron Ore") CopperOre = Item(name="Copper Ore") IronPlate = Item(name="Iron Plate") IronRod = Item(name="Iron Rod") Wire = Item(name="Wire") Cable = Item(name="Cable") Concrete = Item(name="Concrete") Screw = Item(name="Screw") ReinforcedIronPlate = Item(name="Reinforced Iron Plate") ModularFrame = Item(name="Modular Frame") HeavyModularFrame = Item(name="Heavy Modular Frame") EncasedIndustrialBeam = Item(name="Encased Industrial Beam") SteelPipe = Item(name="Steel Pipe") SteelBeam = Item(name="Steel Beam") SteelIngot = Item(name="Steel Ingot") Coal = Item(name="Coal") FusedModularFrame = Item(name="Fused Modular Frame") NitrogenGas = Item(name="Nitrogen Gas") AluminumCasing = Item(name="Aluminum Casing") AluminumIngot = Item(name="Aluminum Ingot") Silica = Item(name="Silica") AluminumScrap = Item(name="Aluminum Scrap") AluminaSolution = Item(name="Alumina Solution") Water = Item(name="Water") RawQuartz = Item(name="Raw Quartz") Bauxite = Item(name="Bauxite") class RawResources(Enum): Water = Items.Water Coal = Items.Coal IronOre = Items.IronOre CopperOre = Items.CopperOre Limestone = Items.Limestone NitrogenGas = Items.NitrogenGas RawQuartz = Items.RawQuartz Bauxite = Items.Bauxite class Recipe(BaseModel): name: str building: Machines outputs: Dict[Items, float] inputs: Dict[Items, float] = Field(default_factory=dict) byproducts: Dict[Items, float] = Field(default_factory=dict) class Recipes(Enum): # Smelting IronIngot = Recipe( name="Iron Ingot", building=Machines.Smelter, outputs={Items.IronIngot: 30.0}, inputs={Items.IronOre: 30.0}, ) CopperIngot = Recipe( name="Copper Ingot", building=Machines.Smelter, outputs={Items.CopperIngot: 30.0}, inputs={Items.CopperOre: 30.0}, ) # Basic constructor products IronPlate = Recipe( name="Iron Plate", building=Machines.Constructor, outputs={Items.IronPlate: 20.0}, inputs={Items.IronIngot: 30.0}, # 1.5 ingot per plate ) IronRod = Recipe( name="Iron Rod", building=Machines.Constructor, outputs={Items.IronRod: 15.0}, inputs={Items.IronIngot: 15.0}, ) Screw= Recipe( name="Screw", building=Machines.Constructor, outputs={Items.Screw: 40.0}, inputs={Items.IronRod: 10.0}, # 4 screws per rod ) Wire= Recipe( name="Wire", building=Machines.Constructor, outputs={Items.Wire: 60.0}, inputs={Items.CopperIngot: 30.0}, # 2 wire per ingot ) Cable= Recipe( name="Cable", building=Machines.Constructor, outputs={Items.Cable: 30.0}, inputs={Items.Wire: 60.0}, # 2 wire per cable ) Concrete= Recipe( name="Concrete", building=Machines.Constructor, outputs={Items.Concrete: 15.0}, inputs={Items.Limestone: 45.0}, # 3 limestone per ) # Assemblers ReinforcedIronPlate = Recipe( name="Reinforced Iron Plate", building=Machines.Assembler, outputs={Items.ReinforcedIronPlate: 5.0}, inputs={ Items.IronPlate: 30.0, Items.Screw: 60.0, }, ) ModularFrame = Recipe( name="Modular Frame", building=Machines.Assembler, outputs={Items.ModularFrame: 2.0}, inputs={ Items.IronRod: 12.0, Items.ReinforcedIronPlate: 3.0, }, ) HeavyModularFrame = Recipe( name="Heavy Modular Frame", building=Machines.Manufacturer, outputs={Items.HeavyModularFrame: 2.0}, inputs={ Items.SteelPipe: 40.0, Items.Screw: 240.0, Items.EncasedIndustrialBeam: 10.0, Items.ModularFrame: 10.0, }, ) EncasedIndustrialBeam = Recipe( name="Encased Industrial Beam", building=Machines.Assembler, outputs={Items.EncasedIndustrialBeam: 6.0}, inputs={ Items.Concrete: 36.0, Items.SteelBeam: 18.0, }, ) SteelPipe = Recipe( name="Steel Pipe", building=Machines.Constructor, outputs={Items.SteelPipe: 20.0}, inputs={ Items.SteelIngot: 30.0 }, ) SteelBeam = Recipe( name="Steel Beam", building=Machines.Constructor, outputs={Items.SteelBeam: 15.0}, inputs={ Items.SteelIngot: 60.0 }, ) SteelIngot = Recipe( name="Steel Ingot", building=Machines.Foundry, outputs={Items.SteelIngot: 45.0}, inputs={ Items.Coal: 45.0, Items.IronOre: 45.0, } ) FusedModularFrame = Recipe( name="Fused Modular Frame", building=Machines.Blender, outputs={Items.FusedModularFrame: 1.5}, inputs={ Items.NitrogenGas: 37.5, Items.AluminumCasing: 75.0, Items.HeavyModularFrame: 1.5, }, ) AluminumCasing = Recipe( name="Aluminum Casing", building=Machines.Constructor, outputs={Items.AluminumCasing: 60.0}, inputs={ Items.AluminumIngot: 90.0, }, ) AluminumIngot = Recipe( name="Aluminum Ingot", building=Machines.Foundry, outputs={Items.AluminumIngot: 60.0}, inputs={ Items.Silica: 75.0, Items.AluminumScrap: 90.0, } ) AluminumScrap = Recipe( name="Aluminum Scrap", building=Machines.Refinery, outputs={ Items.AluminumScrap: 360.0 }, inputs={ Items.Coal: 120.0, Items.AluminaSolution: 240.0, }, byproducts={Items.Water: 120.0} ) Silica = Recipe( name="Silica", building=Machines.Constructor, outputs={Items.Silica: 37.5}, inputs={ Items.RawQuartz: 22.5, } ) AluminaSolution = Recipe( name="Alumina Solution", building=Machines.Refinery, outputs={ Items.AluminaSolution: 120.0 }, inputs={ Items.Water: 180.0, Items.Bauxite: 120.0, }, byproducts={Items.Silica: 50.0} )