Files
pysatcalc/vanilla.py
2025-11-07 17:07:52 +00:00

240 lines
6.8 KiB
Python

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}
)