Files
pysatcalc/plus.py

477 lines
14 KiB
Python

from enum import Enum
from typing import Dict
from pydantic import BaseModel, Field
class Item(BaseModel):
name: str
class Machine(BaseModel):
name: str
class Machines(Enum):
Miner = Machine(name="Miner")
Smelter = Machine(name="Smelter")
Constructor = Machine(name="Constructor")
Assembler = Machine(name="Assembler")
Sorter = Machine(name="Sorter")
Crusher = Machine(name="Crusher")
Foundry = Machine(name="Foundry")
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")
ReinforcedIronPlate = Item(name="Reinforced Iron Plate")
ModularFrame = Item(name="Modular Frame")
BronzeBeam = Item(name="Bronze Beam")
TinPlate = Item(name="Tin Plate")
TinIngot = Item(name="Tin Ingot")
CrushedTin = Item(name="Crushed Tin")
CrushedIron = Item(name="Crushed Iron")
CrushedGangue = Item(name="Crushed Gangue")
CrushedSiterite = Item(name="Crushed Siterite")
SiteriteOre = Item(name="Siterite Ore")
Screws = Item(name="Screws")
BronzeIngot = Item(name="Bronze Ingot")
CrushedCopper = Item(name="Crushed Copper")
CrushedMagnesium = Item(name="Crushed Magnesium")
CrushedCallanite = Item(name="Crushed Callanite")
CallaniteOre = Item(name="Callanite Ore")
CrushedLarrussite = Item(name="Crushed Larrussite")
CrushedAurovite = Item(name="Crushed Aurovite")
AuroviteOre = Item(name="Aurovite Ore")
Sand = Item(name="Sand")
MagnesiumGranules = Item(name="Magnesium Granules")
CrushedZinc = Item(name="Crushed Zinc")
LarrussiteOre = Item(name="Larrussite Ore")
ZincIngot = Item(name="Zinc Ingot")
Glass = Item(name="Glass")
IronSheet = Item(name="Iron Sheet")
CopperRod = Item(name="Copper Rod")
CopperSheet = Item(name="Copper Sheet")
BronzePlates = Item(name="Bronze Plates")
CateriumRod = Item(name="Caterium Rod")
CateriumIngot = Item(name="Caterium Ingot")
CateriumPlate = Item(name="Caterium Plate")
TinRod = Item(name="Tin Rod")
ZincPlates = Item(name="Zinc Plates")
IronWire = Item(name="Iron Wire")
CopperBusbars = Item(name="Copper Busbars")
Quickwire = Item(name="Quickwire")
TinnedWire = Item(name="Tinned Wire")
SolarCell = Item(name="Solar Cell")
Silica = Item(name="Silica")
BronzePipes = Item(name="Bronze Pipes")
SmoothBeltDrive = Item(name="Smooth Belt Drive")
TinnedSheet = Item(name="Tinned Sheet")
Rotor = Item(name="Rotor")
BronzeFrame = Item(name="Bronze Frame")
AILimiter = Item(name="AI Limiter")
class Recipe(BaseModel):
name: str # Human-friendly name
building: Machines # e.g., "Smelter", "Constructor"
outputs: Dict[Items, float] # Produced item name
inputs: Dict[Items, float] = Field(default_factory=dict)
class Recipes(Enum):
# Crusher
# - Crushing Ores
CrushedSiterite = Recipe(
name="Crushed Siterite",
building=Machines.Crusher,
outputs={
Items.CrushedSiterite: 60.0,
Items.CrushedGangue: 25.0,
},
inputs={Items.SiteriteOre: 60.0},
)
CrushedLarrussite = Recipe(
name="Crushed Larrussite",
building=Machines.Crusher,
outputs={
Items.CrushedLarrussite: 40.0,
Items.CrushedGangue: 20.0,
},
inputs={Items.LarrussiteOre: 60.0},
)
CrushedCallanite = Recipe(
name="Crushed Callanite",
building=Machines.Crusher,
outputs={
Items.CrushedCallanite: 60.0,
Items.CrushedGangue: 25.0,
},
inputs={Items.CallaniteOre: 60.0},
)
CrushedAurovite = Recipe(
name="Crushed Aurovite",
building=Machines.Crusher,
outputs={
Items.CrushedAurovite: 60.0,
Items.CrushedGangue: 22.5,
},
inputs={Items.AuroviteOre: 60.0},
)
# - Crushing Powders
CoarseSand = Recipe(
name="Coarse Sand",
building=Machines.Crusher,
outputs={
Items.Sand: 30.0
},
inputs={Items.CrushedGangue: 60.0},
)
MagnesiumGranules = Recipe(
name="Magnesium Granules",
building=Machines.Crusher,
outputs={
Items.MagnesiumGranules: 72.0
},
inputs={Items.CrushedMagnesium: 80.0},
)
# Sorter
# - Simple Sorting
CrushedIron = Recipe(
name="Crushed Iron",
building=Machines.Sorter,
outputs={
Items.CrushedIron: 90.0,
Items.CrushedTin: 60.0,
Items.CrushedGangue: 40.0,
},
inputs={Items.CrushedSiterite: 120.0},
)
CrushedCopper = Recipe(
name="Crushed Copper",
building=Machines.Sorter,
outputs={
Items.CrushedCopper: 96.0,
Items.CrushedMagnesium: 80.0,
Items.CrushedGangue: 40.0,
},
inputs={Items.CrushedCallanite: 120.0},
)
CrushedZinc = Recipe(
name="Crushed Zinc",
building=Machines.Sorter,
outputs={
Items.CrushedZinc: 96.0,
Items.CrushedMagnesium: 48.0,
Items.CrushedGangue: 60.0,
},
inputs={Items.CrushedLarrussite: 120.0},
)
# Smelter
# - smelting
IronIngot = Recipe(
name="Iron Ingot",
building=Machines.Smelter,
outputs={Items.IronIngot: 30.0},
inputs={Items.CrushedIron: 30.0},
)
CopperIngot = Recipe(
name="Copper Ingot",
building=Machines.Smelter,
outputs={Items.CopperIngot: 48.0},
inputs={Items.CrushedCopper: 48.0},
)
TinIngot = Recipe(
name="Tin Ingot",
building=Machines.Smelter,
outputs={Items.TinIngot: 15.0},
inputs={Items.CrushedTin: 15.0},
)
# - Ingots
ImpureIronIngot = Recipe(
name="Impure Iron Ingot",
building=Machines.Smelter,
outputs={Items.IronIngot: 30.0},
inputs={Items.CrushedSiterite: 30.0},
)
ImpureCopperIngot = Recipe(
name="Impure Copper Ingot",
building=Machines.Smelter,
inputs={Items.CrushedCallanite: 24.0},
outputs={Items.CopperIngot: 24.0},
)
ImpureTinIngot = Recipe(
name="Impure Tin Ingot",
building=Machines.Smelter,
inputs={Items.CrushedSiterite: 30.0},
outputs={Items.TinIngot: 15.0},
)
ImpureCateriumIngot = Recipe(
name="Impure Caterium Ingot",
building=Machines.Smelter,
inputs={Items.CrushedAurovite: 40.0},
outputs={Items.CopperIngot: 24.0},
)
ZincIngot = Recipe(
name="Zinc Ingot",
building=Machines.Smelter,
outputs={Items.ZincIngot: 15.0},
inputs={Items.CrushedZinc: 24.0},
)
# - Standard Parts
SloppyGlass = Recipe(
name="Sloppy Glass",
building=Machines.Smelter,
outputs={Items.Glass: 20.0},
inputs={Items.Sand: 30.0},
)
# Constructor
# - Standard Parts
IronPlate = Recipe(
name="Iron Plate",
building=Machines.Constructor,
outputs={Items.IronPlate: 20.0},
inputs={Items.IronIngot: 30.0},
)
Screws = Recipe(
name="Screws",
building=Machines.Constructor,
outputs={Items.Screws: 50.0},
inputs={Items.IronRod: 20.0},
)
IronRod = Recipe(
name="Iron Rod",
building=Machines.Constructor,
outputs={Items.IronRod: 15.0},
inputs={Items.IronIngot: 15.0},
)
IronSheet = Recipe(
name="Iron Sheet",
building=Machines.Constructor,
outputs={Items.IronSheet: 50.0},
inputs={Items.IronPlate: 40.0},
)
CopperRod = Recipe(
name="Copper Rod",
building=Machines.Constructor,
outputs={Items.CopperRod: 18.0},
inputs={Items.CopperIngot: 12.0},
)
CopperSheet = Recipe(
name="Copper Sheet",
building=Machines.Constructor,
outputs={Items.CopperSheet: 30.0},
inputs={Items.CopperIngot: 24.0},
)
BronzeBeam = Recipe(
name="Bronze Beam",
building=Machines.Constructor,
outputs={Items.BronzeBeam: 7.5},
inputs={Items.BronzeIngot: 22.5},
)
BronzePlates = Recipe(
name="Bronze Plates",
building=Machines.Constructor,
outputs={Items.BronzePlates: 24.0},
inputs={Items.BronzeIngot: 30.0},
)
CateriumRod = Recipe(
name="Caterium Rod",
building=Machines.Constructor,
outputs={Items.CateriumRod: 32.0},
inputs={Items.CateriumIngot: 16.0},
)
CateriumPlate = Recipe(
name="Caterium Plate",
building=Machines.Constructor,
outputs={Items.CateriumPlate: 36.0},
inputs={Items.CateriumIngot: 60.0},
)
TinRod = Recipe(
name="Tin Rod",
building=Machines.Constructor,
outputs={Items.TinRod: 15.0},
inputs={Items.TinIngot: 30.0},
)
ZincPlates = Recipe(
name="Zinc Plates",
building=Machines.Constructor,
outputs={Items.ZincPlates: 15.0},
inputs={Items.ZincIngot: 12.5},
)
# - Electronics
IronWire = Recipe(
name="Iron Wire",
building=Machines.Constructor,
outputs={Items.IronWire: 30.0},
inputs={Items.IronRod: 20.0},
)
Wire = Recipe(
name="Wire",
building=Machines.Constructor,
outputs={Items.Wire: 30.0},
inputs={Items.CopperRod: 18.0},
)
CopperBusbars = Recipe(
name="Copper Busbars",
building=Machines.Constructor,
outputs={Items.CopperBusbars: 15.0},
inputs={Items.CopperRod: 24.0},
)
Cable = Recipe(
name="Cable",
building=Machines.Constructor,
outputs={Items.Cable: 30.0},
inputs={Items.Wire: 60.0},
)
Quickwire = Recipe(
name="Quickwire",
building=Machines.Constructor,
outputs={Items.Quickwire: 80.0},
inputs={Items.CateriumRod: 24.0},
)
PureTinWire = Recipe(
name="Pure Tin Wire",
building=Machines.Constructor,
outputs={Items.TinnedWire: 11.25},
inputs={Items.TinRod: 15.0},
)
# - Compounds
Concrete = Recipe(
name="Concrete",
building=Machines.Constructor,
outputs={Items.Concrete: 15.0},
inputs={Items.CrushedGangue: 45.0},
)
# Foundry
# - Building Parts
SolarCell = Recipe(
name="Solar Cell",
building=Machines.Foundry,
outputs={Items.SolarCell: 11.25},
inputs={
Items.ZincPlates: 22.5,
Items.Silica: 67.5,
},
)
# - Alloys
BronzePipes = Recipe(
name="Bronze Pipes",
building=Machines.Foundry,
outputs={Items.BronzePipes: 36.0},
inputs={
Items.CopperIngot: 24.0,
Items.TinIngot: 15.0,
},
)
# - ingots
BronzeIngot = Recipe(
name="Bronze Ingot",
building=Machines.Foundry,
outputs={Items.BronzeIngot: 45.0},
inputs={
Items.CopperIngot: 36.0,
Items.TinIngot: 15.0,
},
)
# - Other
ThermalSilica = Recipe(
name="Thermal Silica",
building=Machines.Foundry,
outputs={Items.Silica: 45.0},
inputs={
Items.Sand: 30.0,
Items.MagnesiumGranules: 27.0,
},
)
# Assembler
# - Building Parts
SmoothBeltDrive = Recipe(
name="Smooth Belt Drive",
building=Machines.Assembler,
outputs={Items.SmoothBeltDrive: 18.75},
inputs={
Items.TinnedSheet: 15.0,
Items.Rotor: 3.75,
},
)
# - Standard Parts
TinPlate = Recipe(
name="Tin Plate",
building=Machines.Assembler,
outputs={Items.TinPlate: 40.0},
inputs={
Items.TinIngot: 30.0,
Items.IronPlate: 20.0,
},
)
TinnedWire = Recipe(
name="Tinned Wire",
building=Machines.Assembler,
outputs={Items.TinnedWire: 90},
inputs={
Items.Wire: 60.0,
Items.TinRod: 45.0,
},
)
TinnedSheet = Recipe(
name="Tinned Sheet",
building=Machines.Assembler,
outputs={Items.TinnedSheet: 40.0},
inputs={
Items.TinIngot: 20.0,
Items.CopperSheet: 20.0,
},
)
Rotor = Recipe(
name="Rotor",
building=Machines.Assembler,
outputs={Items.Rotor: 7.5},
inputs={
Items.CopperBusbars: 22.5,
Items.IronWire: 60.0,
},
)
ReinforcedIronPlate = Recipe(
name="Reinforced Iron Plate",
building=Machines.Assembler,
outputs={Items.ReinforcedIronPlate: 5.0},
inputs={
Items.TinPlate: 20.0,
Items.Screws: 37.5,
},
)
BronzeFrame = Recipe(
name="Bronze Frame",
building=Machines.Assembler,
outputs={Items.BronzeFrame: 5.0},
inputs={
Items.BronzeBeam: 10.0,
Items.BronzePipes: 24.0,
},
)
ModularFrame = Recipe(
name="Modular Frame",
building=Machines.Assembler,
outputs={Items.ModularFrame: 6.0},
inputs={
Items.ReinforcedIronPlate: 7.5,
Items.BronzeBeam: 7.5,
},
)
AILimiter = Recipe(
name="AI Limiter",
building=Machines.Assembler,
outputs={Items.AILimiter: 6.0},
inputs={
Items.CateriumPlate: 24.0,
Items.TinnedWire: 18.0,
},
)