120 lines
3.8 KiB
Python
120 lines
3.8 KiB
Python
import typing
|
|
|
|
from Options import Choice, OptionDict, Option, DefaultOnToggle
|
|
|
|
|
|
class MaxSciencePack(Choice):
|
|
option_automation_science_pack = 0
|
|
option_logistic_science_pack = 1
|
|
option_military_science_pack = 2
|
|
option_chemical_science_pack = 3
|
|
option_production_science_pack = 4
|
|
option_utility_science_pack = 5
|
|
option_space_science_pack = 6
|
|
default = 6
|
|
|
|
def get_allowed_packs(self):
|
|
return {option.replace("_", "-") for option, value in self.options.items() if value <= self.value} - \
|
|
{"space-science-pack"} # with rocket launch being the goal, post-launch techs don't make sense
|
|
|
|
@classmethod
|
|
def get_ordered_science_packs(cls):
|
|
return [option.replace("_", "-") for option, value in sorted(cls.options.items(), key=lambda pair: pair[1])]
|
|
|
|
def get_max_pack(self):
|
|
return self.get_ordered_science_packs()[self.value].replace("_", "-")
|
|
|
|
class TechCost(Choice):
|
|
option_very_easy = 0
|
|
option_easy = 1
|
|
option_kind = 2
|
|
option_normal = 3
|
|
option_hard = 4
|
|
option_very_hard = 5
|
|
option_insane = 6
|
|
default = 3
|
|
|
|
|
|
class FreeSamples(Choice):
|
|
option_none = 0
|
|
option_single_craft = 1
|
|
option_half_stack = 2
|
|
option_stack = 3
|
|
default = 3
|
|
|
|
|
|
class TechTreeLayout(Choice):
|
|
option_single = 0
|
|
option_small_diamonds = 1
|
|
option_medium_diamonds = 2
|
|
option_large_diamonds = 3
|
|
option_small_pyramids = 4
|
|
option_medium_pyramids = 5
|
|
option_large_pyramids = 6
|
|
option_small_funnels = 7
|
|
option_medium_funnels = 8
|
|
option_large_funnels = 9
|
|
default = 0
|
|
|
|
|
|
class TechTreeInformation(Choice):
|
|
option_none = 0
|
|
option_advancement = 1
|
|
option_full = 2
|
|
default = 2
|
|
|
|
|
|
class RecipeTime(Choice):
|
|
option_vanilla = 0
|
|
option_fast = 1
|
|
option_normal = 2
|
|
option_slow = 4
|
|
option_chaos = 5
|
|
|
|
# TODO: implement random
|
|
class Progressive(Choice):
|
|
option_off = 0
|
|
option_random = 1
|
|
option_on = 2
|
|
default = 2
|
|
|
|
def want_progressives(self, random):
|
|
return random.choice([True, False]) if self.value == self.option_random else int(self.value)
|
|
|
|
|
|
class RecipeIngredients(Choice):
|
|
option_rocket = 0
|
|
option_science_pack = 1
|
|
|
|
|
|
class FactorioStartItems(OptionDict):
|
|
default = {"burner-mining-drill": 19, "stone-furnace": 19}
|
|
|
|
|
|
class FactorioWorldGen(OptionDict):
|
|
default = {"terrain_segmentation": 0.5, "water": 1.5,
|
|
"autoplace_controls": {"coal": {"frequency": 1, "size": 3, "richness": 6},
|
|
"copper-ore": {"frequency": 1, "size": 3, "richness": 6},
|
|
"crude-oil": {"frequency": 1, "size": 3, "richness": 6},
|
|
"enemy-base": {"frequency": 1, "size": 1, "richness": 1},
|
|
"iron-ore": {"frequency": 1, "size": 3, "richness": 6},
|
|
"stone": {"frequency": 1, "size": 3, "richness": 6},
|
|
"trees": {"frequency": 1, "size": 1, "richness": 1},
|
|
"uranium-ore": {"frequency": 1, "size": 3, "richness": 6}},
|
|
"starting_area": 1, "peaceful_mode": False,
|
|
"cliff_settings": {"name": "cliff", "cliff_elevation_0": 10, "cliff_elevation_interval": 40,
|
|
"richness": 1}}
|
|
|
|
factorio_options: typing.Dict[str, type(Option)] = {
|
|
"max_science_pack": MaxSciencePack,
|
|
"tech_tree_layout": TechTreeLayout,
|
|
"tech_cost": TechCost,
|
|
"free_samples": FreeSamples,
|
|
"tech_tree_information": TechTreeInformation,
|
|
"starting_items": FactorioStartItems,
|
|
"recipe_time": RecipeTime,
|
|
"recipe_ingredients": RecipeIngredients,
|
|
"imported_blueprints": DefaultOnToggle,
|
|
"world_gen": FactorioWorldGen,
|
|
"progressive": DefaultOnToggle
|
|
} |