From 109eb5b9dca7ae8ea32047bb489dae5066251093 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 13 May 2021 01:34:59 +0200 Subject: [PATCH] start of split --- Main.py | 22 +++++++++++----------- test_loader.py | 2 ++ worlds/BaseWorld.py | 13 +++++++++++++ worlds/factorio/__init__.py | 18 ++++++++++++++++++ worlds/loader.py | 12 ++++++++++++ 5 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 test_loader.py create mode 100644 worlds/BaseWorld.py create mode 100644 worlds/loader.py diff --git a/Main.py b/Main.py index cfa9116f..03100949 100644 --- a/Main.py +++ b/Main.py @@ -24,8 +24,8 @@ from worlds.alttp.ItemPool import generate_itempool, difficulties, fill_prizes from Utils import output_path, parse_player_names, get_options, __version__, _version_tuple from worlds.hk import gen_hollow from worlds.hk import create_regions as hk_create_regions -from worlds.factorio import gen_factorio, factorio_create_regions -from worlds.factorio.Mod import generate_mod +# from worlds.factorio import gen_factorio, factorio_create_regions +# from worlds.factorio.Mod import generate_mod from worlds.minecraft import gen_minecraft, fill_minecraft_slot_data, generate_mc_data from worlds.minecraft.Regions import minecraft_create_regions from worlds.generic.Rules import locality_rules @@ -135,8 +135,8 @@ def main(args, seed=None): import Options for hk_option in Options.hollow_knight_options: setattr(world, hk_option, getattr(args, hk_option, {})) - for factorio_option in Options.factorio_options: - setattr(world, factorio_option, getattr(args, factorio_option, {})) + # for factorio_option in Options.factorio_options: + # setattr(world, factorio_option, getattr(args, factorio_option, {})) for minecraft_option in Options.minecraft_options: setattr(world, minecraft_option, getattr(args, minecraft_option, {})) world.glitch_triforce = args.glitch_triforce # This is enabled/disabled globally, no per player option. @@ -207,8 +207,8 @@ def main(args, seed=None): for player in world.hk_player_ids: hk_create_regions(world, player) - for player in world.factorio_player_ids: - factorio_create_regions(world, player) + # for player in world.factorio_player_ids: + # factorio_create_regions(world, player) for player in world.minecraft_player_ids: minecraft_create_regions(world, player) @@ -269,8 +269,8 @@ def main(args, seed=None): for player in world.hk_player_ids: gen_hollow(world, player) - for player in world.factorio_player_ids: - gen_factorio(world, player) + # for player in world.factorio_player_ids: + # gen_factorio(world, player) for player in world.minecraft_player_ids: gen_minecraft(world, player) @@ -423,9 +423,9 @@ def main(args, seed=None): for team in range(world.teams): for player in world.alttp_player_ids: rom_futures.append(pool.submit(_gen_rom, team, player)) - for player in world.factorio_player_ids: - mod_futures.append(pool.submit(generate_mod, world, player, - str(args.outputname if args.outputname else world.seed))) + # for player in world.factorio_player_ids: + # mod_futures.append(pool.submit(generate_mod, world, player, + # str(args.outputname if args.outputname else world.seed))) def get_entrance_to_region(region: Region): for entrance in region.entrances: diff --git a/test_loader.py b/test_loader.py new file mode 100644 index 00000000..1ee0621e --- /dev/null +++ b/test_loader.py @@ -0,0 +1,2 @@ +import worlds.loader +print(worlds.loader.world_types) \ No newline at end of file diff --git a/worlds/BaseWorld.py b/worlds/BaseWorld.py new file mode 100644 index 00000000..34c3ef89 --- /dev/null +++ b/worlds/BaseWorld.py @@ -0,0 +1,13 @@ +class AutoWorldRegister(type): + _world_types = {} + + def __new__(cls, name, bases, dct): + new_class = super().__new__(cls, name, bases, dct) + AutoWorldRegister._world_types[name] = new_class + return new_class + +class World(metaclass=AutoWorldRegister): + """A World object encompasses a game's Items, Locations, Rules and additional data or functionality required. + A Game should have its own subclass of World in which it defines the required data structures.""" + def __init__(self): + pass \ No newline at end of file diff --git a/worlds/factorio/__init__.py b/worlds/factorio/__init__.py index f0ded67d..4cd8464c 100644 --- a/worlds/factorio/__init__.py +++ b/worlds/factorio/__init__.py @@ -1,7 +1,25 @@ +from ..BaseWorld import World + + from BaseClasses import Region, Entrance, Location, MultiWorld, Item from .Technologies import tech_table, recipe_sources, technology_table, advancement_technologies, required_technologies from .Shapes import get_shapes +class Factorio(World): + def generate_basic(self, world: MultiWorld, player: int): + static_nodes = world._static_nodes = {"automation", "logistics"} # turn dynamic/option? + for tech_name, tech_id in tech_table.items(): + tech_item = Item(tech_name, tech_name in advancement_technologies, tech_id, player) + tech_item.game = "Factorio" + if tech_name in static_nodes: + loc = world.get_location(tech_name, player) + loc.item = tech_item + loc.locked = True + loc.event = tech_item.advancement + else: + world.itempool.append(tech_item) + world.custom_data[player]["custom_technologies"] = custom_technologies = set_custom_technologies(world, player) + set_rules(world, player, custom_technologies) def gen_factorio(world: MultiWorld, player: int): static_nodes = world._static_nodes = {"automation", "logistics"} # turn dynamic/option? diff --git a/worlds/loader.py b/worlds/loader.py new file mode 100644 index 00000000..52c1349d --- /dev/null +++ b/worlds/loader.py @@ -0,0 +1,12 @@ +import importlib +import os +world_types = [] +world_folder = os.path.dirname(__file__) +for entry in os.scandir(world_folder): + if entry.is_dir(): + entryname = entry.name + if not entryname.startswith("_"): + world_module = importlib.import_module("."+entry.name, package="worlds") + world_types.append(world_module) +print(world_folder) +print(world_types) \ No newline at end of file