Factorio: add fluid mining technology to logic requirements (#4385)
This commit is contained in:
parent
de58cb03da
commit
fe06fe075e
|
@ -63,17 +63,19 @@ class FactorioElement:
|
||||||
|
|
||||||
|
|
||||||
class Technology(FactorioElement): # maybe make subclass of Location?
|
class Technology(FactorioElement): # maybe make subclass of Location?
|
||||||
has_modifier: bool
|
|
||||||
factorio_id: int
|
factorio_id: int
|
||||||
progressive: Tuple[str]
|
progressive: Tuple[str]
|
||||||
unlocks: Union[Set[str], bool] # bool case is for progressive technologies
|
unlocks: Union[Set[str], bool] # bool case is for progressive technologies
|
||||||
|
modifiers: list[str]
|
||||||
|
|
||||||
def __init__(self, technology_name: str, factorio_id: int, progressive: Tuple[str] = (),
|
def __init__(self, technology_name: str, factorio_id: int, progressive: Tuple[str] = (),
|
||||||
has_modifier: bool = False, unlocks: Union[Set[str], bool] = None):
|
modifiers: list[str] = None, unlocks: Union[Set[str], bool] = None):
|
||||||
self.name = technology_name
|
self.name = technology_name
|
||||||
self.factorio_id = factorio_id
|
self.factorio_id = factorio_id
|
||||||
self.progressive = progressive
|
self.progressive = progressive
|
||||||
self.has_modifier = has_modifier
|
if modifiers is None:
|
||||||
|
modifiers = []
|
||||||
|
self.modifiers = modifiers
|
||||||
if unlocks:
|
if unlocks:
|
||||||
self.unlocks = unlocks
|
self.unlocks = unlocks
|
||||||
else:
|
else:
|
||||||
|
@ -82,6 +84,10 @@ class Technology(FactorioElement): # maybe make subclass of Location?
|
||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
return self.factorio_id
|
return self.factorio_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def has_modifier(self) -> bool:
|
||||||
|
return bool(self.modifiers)
|
||||||
|
|
||||||
def get_custom(self, world, allowed_packs: Set[str], player: int) -> CustomTechnology:
|
def get_custom(self, world, allowed_packs: Set[str], player: int) -> CustomTechnology:
|
||||||
return CustomTechnology(self, world, allowed_packs, player)
|
return CustomTechnology(self, world, allowed_packs, player)
|
||||||
|
|
||||||
|
@ -191,13 +197,14 @@ class Machine(FactorioElement):
|
||||||
|
|
||||||
|
|
||||||
recipe_sources: Dict[str, Set[str]] = {} # recipe_name -> technology source
|
recipe_sources: Dict[str, Set[str]] = {} # recipe_name -> technology source
|
||||||
|
mining_with_fluid_sources: set[str] = set()
|
||||||
|
|
||||||
# recipes and technologies can share names in Factorio
|
# recipes and technologies can share names in Factorio
|
||||||
for technology_name, data in sorted(techs_future.result().items()):
|
for technology_name, data in sorted(techs_future.result().items()):
|
||||||
technology = Technology(
|
technology = Technology(
|
||||||
technology_name,
|
technology_name,
|
||||||
factorio_tech_id,
|
factorio_tech_id,
|
||||||
has_modifier=data["has_modifier"],
|
modifiers=data.get("modifiers", []),
|
||||||
unlocks=set(data["unlocks"]) - start_unlocked_recipes,
|
unlocks=set(data["unlocks"]) - start_unlocked_recipes,
|
||||||
)
|
)
|
||||||
factorio_tech_id += 1
|
factorio_tech_id += 1
|
||||||
|
@ -205,7 +212,8 @@ for technology_name, data in sorted(techs_future.result().items()):
|
||||||
technology_table[technology_name] = technology
|
technology_table[technology_name] = technology
|
||||||
for recipe_name in technology.unlocks:
|
for recipe_name in technology.unlocks:
|
||||||
recipe_sources.setdefault(recipe_name, set()).add(technology_name)
|
recipe_sources.setdefault(recipe_name, set()).add(technology_name)
|
||||||
|
if "mining-with-fluid" in technology.modifiers:
|
||||||
|
mining_with_fluid_sources.add(technology_name)
|
||||||
del techs_future
|
del techs_future
|
||||||
|
|
||||||
recipes = {}
|
recipes = {}
|
||||||
|
@ -221,6 +229,8 @@ for resource_name, resource_data in resources_future.result().items():
|
||||||
"energy": resource_data["mining_time"],
|
"energy": resource_data["mining_time"],
|
||||||
"category": resource_data["category"]
|
"category": resource_data["category"]
|
||||||
}
|
}
|
||||||
|
if "required_fluid" in resource_data:
|
||||||
|
recipe_sources.setdefault(f"mining-{resource_name}", set()).update(mining_with_fluid_sources)
|
||||||
del resources_future
|
del resources_future
|
||||||
|
|
||||||
for recipe_name, recipe_data in raw_recipes.items():
|
for recipe_name, recipe_data in raw_recipes.items():
|
||||||
|
@ -431,7 +441,9 @@ for root in sorted_rows:
|
||||||
factorio_tech_id += 1
|
factorio_tech_id += 1
|
||||||
progressive_technology = Technology(root, factorio_tech_id,
|
progressive_technology = Technology(root, factorio_tech_id,
|
||||||
tuple(progressive),
|
tuple(progressive),
|
||||||
has_modifier=any(technology_table[tech].has_modifier for tech in progressive),
|
modifiers=sorted(set.union(
|
||||||
|
*(set(technology_table[tech].modifiers) for tech in progressive)
|
||||||
|
)),
|
||||||
unlocks=any(technology_table[tech].unlocks for tech in progressive),)
|
unlocks=any(technology_table[tech].unlocks for tech in progressive),)
|
||||||
progressive_tech_table[root] = progressive_technology.factorio_id
|
progressive_tech_table[root] = progressive_technology.factorio_id
|
||||||
progressive_technology_table[root] = progressive_technology
|
progressive_technology_table[root] = progressive_technology
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue