diff --git a/worlds/civ_6/Items.py b/worlds/civ_6/Items.py index c521e8eed2..b7d801fa1b 100644 --- a/worlds/civ_6/Items.py +++ b/worlds/civ_6/Items.py @@ -1,14 +1,11 @@ from enum import Enum -import json -import os -import pkgutil -import random -from typing import Dict, List, Optional -import typing +from typing import Dict, List, Optional, TYPE_CHECKING, List from BaseClasses import Item, ItemClassification from .Data import get_era_required_items_data, get_existing_civics_data, get_existing_techs_data, get_goody_hut_rewards_data, get_progressive_districts_data -from .Enum import CivVICheckType, EraType +from .Enum import CivVICheckType from .ProgressiveDistricts import get_flat_progressive_districts +if TYPE_CHECKING: + from . import CivVIWorld CIV_VI_AP_ITEM_ID_BASE = 5041000 NON_PROGRESSION_DISTRICTS = [ @@ -98,7 +95,7 @@ class CivVIItemData: progression_name: Optional[str] civ_name: Optional[str] - def __init__(self, name, civ_vi_id: int, cost: int, item_type: CivVICheckType, id_offset: int, classification: ItemClassification, progression_name: Optional[str], civ_name: Optional[str] = None): + def __init__(self, name, civ_vi_id: int, cost: int, item_type: CivVICheckType, id_offset: int, classification: ItemClassification, progression_name: Optional[str], civ_name: Optional[str] = None): self.classification = classification self.civ_vi_id = civ_vi_id self.name = name @@ -125,7 +122,7 @@ def format_item_name(name: str) -> str: return " ".join([part.capitalize() for part in name_parts]) -def get_item_by_civ_name(item_name: typing.List[str], item_table: typing.Dict[str, 'CivVIItemData']) -> 'CivVIItemData': +def get_item_by_civ_name(item_name: List[str], item_table: Dict[str, 'CivVIItemData']) -> 'CivVIItemData': """Gets the names of the items in the item_table""" for item in item_table.values(): if item_name == item.civ_name: @@ -291,9 +288,9 @@ def get_items_by_type(item_type: CivVICheckType, item_table: Dict[str, CivVIItem return [item for item in item_table.values() if item.item_type == item_type] -def get_random_filler_by_rarity(rarity: FillerItemRarity, item_table: Dict[str, CivVIItemData]) -> CivVIItemData: +def get_random_filler_by_rarity(world: 'CivVIWorld', rarity: FillerItemRarity, item_table: Dict[str, CivVIItemData]) -> CivVIItemData: """ Returns a random filler item by rarity """ items = [item for item in get_filler_item_data().values() if item.rarity == rarity] - return items[random.randint(0, len(items) - 1)] + return items[world.random.randint(0, len(items) - 1)] diff --git a/worlds/civ_6/Locations.py b/worlds/civ_6/Locations.py index 3d08c37e66..1c53a2da87 100644 --- a/worlds/civ_6/Locations.py +++ b/worlds/civ_6/Locations.py @@ -1,5 +1,4 @@ -from dataclasses import dataclass -from typing import Any, List, Optional, Dict +from typing import List, Optional, Dict from BaseClasses import Location, LocationProgressType, Region from .Data import get_boosts_data, get_new_civic_prereqs_data, get_new_civics_data, get_new_tech_prereqs_data, get_new_techs_data @@ -106,8 +105,6 @@ class CivVILocation(Location): self.progress_type = LocationProgressType.EXCLUDED - - def generate_flat_location_table() -> Dict[str, CivVILocationData]: """ Generates a flat location table in the following format: @@ -182,8 +179,8 @@ def generate_era_location_table() -> Dict[EraType, Dict[str, CivVILocationData]] id_base += 1 # Goody Huts, defaults to 10 goody huts as location checks (rarely will a player get more than this) for i in range(10): - era_locations[EraType.ERA_ANCIENT.value]["GOODY_HUT_" + str(i+1)] = CivVILocationData( - "GOODY_HUT_" + str(i+1), 0, 0, id_base, EraType.ERA_ANCIENT, CivVICheckType.GOODY) + era_locations[EraType.ERA_ANCIENT.value]["GOODY_HUT_" + str(i + 1)] = CivVILocationData( + "GOODY_HUT_" + str(i + 1), 0, 0, id_base, EraType.ERA_ANCIENT, CivVICheckType.GOODY) id_base += 1 # Boosts boosts = get_boosts_data() diff --git a/worlds/civ_6/Regions.py b/worlds/civ_6/Regions.py index 0fae53dcc7..1d711d0b2d 100644 --- a/worlds/civ_6/Regions.py +++ b/worlds/civ_6/Regions.py @@ -1,4 +1,4 @@ -import typing +from typing import TYPE_CHECKING, Dict, List from BaseClasses import CollectionState, LocationProgressType, Region from .Data import get_era_required_items_data, get_progressive_districts_data from .Items import format_item_name, get_item_by_civ_name @@ -7,7 +7,7 @@ from .Locations import CivVILocation from .ProgressiveDistricts import get_flat_progressive_districts from .Options import CivVIOptions -if typing.TYPE_CHECKING: +if TYPE_CHECKING: from . import CivVIWorld from Items import CivVIItemData @@ -19,7 +19,7 @@ def get_required_items_for_era(era: EraType): return era_required_items[era.value] -def get_cumulative_prereqs_for_era(end_era: EraType, exclude_progressive_items: bool = True, item_table: typing.Dict[str, 'CivVIItemData'] = None) -> typing.List['CivVIItemData']: +def get_cumulative_prereqs_for_era(end_era: EraType, exclude_progressive_items: bool = True, item_table: Dict[str, 'CivVIItemData'] = None) -> List['CivVIItemData']: """Gets the specific techs/civics that are required for the specified era as well as all previous eras""" cumulative_prereqs = [] era_required_items = {} @@ -58,7 +58,7 @@ def has_required_progressive_districts(state: CollectionState, era: EraType, pla # Verify we have the correct amount of progressive items all_previous_items = get_cumulative_prereqs_for_era( era, False, item_table) - required_counts: typing.Dict[str, int] = {} + required_counts: Dict[str, int] = {} for key, value in progressive_districts.items(): required_counts[key] = 0 @@ -109,7 +109,7 @@ def create_regions(world: 'CivVIWorld', options: CivVIOptions, player: int): has_goody_huts = options.shuffle_goody_hut_rewards.value has_boosts = options.boostsanity.value - regions: typing.List[Region] = [] + regions: List[Region] = [] for era in EraType: era_region = Region(era.value, player, world.multiworld) era_locations = {location.name: location.code for key, @@ -137,37 +137,37 @@ def create_regions(world: 'CivVIWorld', options: CivVIOptions, player: int): ) world.get_region(EraType.ERA_CLASSICAL.value).connect( - world.get_region(EraType.ERA_MEDIEVAL.value), None, lambda state: has_required_items( + world.get_region(EraType.ERA_MEDIEVAL.value), None, lambda state: has_required_items( state, EraType.ERA_CLASSICAL, player, has_progressive_items, has_progressive_eras) ) world.get_region(EraType.ERA_MEDIEVAL.value).connect( - world.get_region(EraType.ERA_RENAISSANCE.value), None, lambda state: has_required_items( + world.get_region(EraType.ERA_RENAISSANCE.value), None, lambda state: has_required_items( state, EraType.ERA_MEDIEVAL, player, has_progressive_items, has_progressive_eras) ) world.get_region(EraType.ERA_RENAISSANCE.value).connect( - world.get_region(EraType.ERA_INDUSTRIAL.value), None, lambda state: has_required_items( + world.get_region(EraType.ERA_INDUSTRIAL.value), None, lambda state: has_required_items( state, EraType.ERA_RENAISSANCE, player, has_progressive_items, has_progressive_eras) ) world.get_region(EraType.ERA_INDUSTRIAL.value).connect( - world.get_region(EraType.ERA_MODERN.value), None, lambda state: has_required_items( + world.get_region(EraType.ERA_MODERN.value), None, lambda state: has_required_items( state, EraType.ERA_INDUSTRIAL, player, has_progressive_items, has_progressive_eras) ) world.get_region(EraType.ERA_MODERN.value).connect( - world.get_region(EraType.ERA_ATOMIC.value), None, lambda state: has_required_items( + world.get_region(EraType.ERA_ATOMIC.value), None, lambda state: has_required_items( state, EraType.ERA_MODERN, player, has_progressive_items, has_progressive_eras) ) world.get_region(EraType.ERA_ATOMIC.value).connect( - world.get_region(EraType.ERA_INFORMATION.value), None, lambda state: has_required_items( + world.get_region(EraType.ERA_INFORMATION.value), None, lambda state: has_required_items( state, EraType.ERA_ATOMIC, player, has_progressive_items, has_progressive_eras) ) world.get_region(EraType.ERA_INFORMATION.value).connect( - world.get_region(EraType.ERA_FUTURE.value), None, lambda state: has_required_items(state, EraType.ERA_INFORMATION, player, has_progressive_items, has_progressive_eras)) + world.get_region(EraType.ERA_FUTURE.value), None, lambda state: has_required_items(state, EraType.ERA_INFORMATION, player, has_progressive_items, has_progressive_eras)) world.multiworld.completion_condition[player] = lambda state: state.can_reach( EraType.ERA_FUTURE.value, "Region", player) diff --git a/worlds/civ_6/Rules.py b/worlds/civ_6/Rules.py index 048a06241b..1c1e9056f3 100644 --- a/worlds/civ_6/Rules.py +++ b/worlds/civ_6/Rules.py @@ -1,5 +1,4 @@ -import typing - +from typing import TYPE_CHECKING, List, Dict from BaseClasses import CollectionState from .Items import get_item_by_civ_name from .Data import get_boosts_data @@ -9,11 +8,11 @@ from .ProgressiveDistricts import convert_items_to_have_progression from worlds.generic.Rules import forbid_item, set_rule -if typing.TYPE_CHECKING: +if TYPE_CHECKING: from . import CivVIWorld -def generate_has_required_items_lambda(prereqs: typing.List[str], required_count: int, has_progressive_items: bool, player: int): +def generate_has_required_items_lambda(prereqs: List[str], required_count: int, has_progressive_items: bool, player: int): def has_required_items_lambda(state: CollectionState): return has_required_items(state, prereqs, required_count, has_progressive_items, player) return has_required_items_lambda @@ -35,10 +34,10 @@ def create_boost_rules(world: 'CivVIWorld'): ) -def has_required_items(state: CollectionState, prereqs: typing.List[str], required_count: int, has_progressive_items: bool, player: int): +def has_required_items(state: CollectionState, prereqs: List[str], required_count: int, has_progressive_items: bool, player: int): if has_progressive_items: items = [get_item_by_civ_name(item, state.multiworld.worlds[player].item_table).name for item in convert_items_to_have_progression(prereqs)] - progressive_items: typing.Dict[str, int] = {} + progressive_items: Dict[str, int] = {} count = 0 for item in items: if "Progressive" in item: diff --git a/worlds/civ_6/TunerClient.py b/worlds/civ_6/TunerClient.py index 7478e02e8b..c75d95c0f5 100644 --- a/worlds/civ_6/TunerClient.py +++ b/worlds/civ_6/TunerClient.py @@ -1,6 +1,5 @@ import asyncio from logging import Logger -import select import socket ADDRESS = "127.0.0.1" diff --git a/worlds/civ_6/__init__.py b/worlds/civ_6/__init__.py index b8d61247a8..9874b6daa9 100644 --- a/worlds/civ_6/__init__.py +++ b/worlds/civ_6/__init__.py @@ -1,13 +1,10 @@ import math import os -import random -from typing import Dict, Optional -import typing +from typing import Dict, Optional, Set from .Data import get_boosts_data from .Rules import create_boost_rules -import Utils from .Container import CivVIContainer, generate_goody_hut_sql, generate_new_items, generate_setup_file, generate_update_boosts_sql from .Enum import CivVICheckType from .Items import BOOSTSANITY_PROGRESSION_ITEMS, FILLER_DISTRIBUTION, CivVIItemData, FillerItemRarity, generate_item_table, CivVIItem, get_random_filler_by_rarity @@ -77,7 +74,7 @@ class CivVIWorld(World): self.location_table[location.name] = location def get_filler_item_name(self): - return get_random_filler_by_rarity(FillerItemRarity.COMMON, self.item_table).name + return get_random_filler_by_rarity(self, FillerItemRarity.COMMON, self.item_table).name def create_regions(self): create_regions(self, self.options, self.player) @@ -145,7 +142,7 @@ class CivVIWorld(World): if total_created >= num_filler_items: break self.multiworld.itempool += [self.create_item( - get_random_filler_by_rarity(rarity, self.item_table).name)] + get_random_filler_by_rarity(self, rarity, self.item_table).name)] total_created += 1 def post_fill(self): @@ -158,7 +155,7 @@ class CivVIWorld(World): ItemClassification.filler: self.options.pre_hint_items.current_key == "all", } - start_location_hints: typing.Set[str] = self.options.start_location_hints.value + start_location_hints: Set[str] = self.options.start_location_hints.value for location_name, location_data in self.location_table.items(): if location_data.location_type != CivVICheckType.CIVIC and location_data.location_type != CivVICheckType.TECH: continue diff --git a/worlds/civ_6/test/TestGoodyHuts.py b/worlds/civ_6/test/TestGoodyHuts.py index cc39d10a72..8c978dc7ff 100644 --- a/worlds/civ_6/test/TestGoodyHuts.py +++ b/worlds/civ_6/test/TestGoodyHuts.py @@ -1,7 +1,7 @@ from typing import Dict from BaseClasses import ItemClassification from Fill import distribute_items_restrictive -from ..Items import FILLER_DISTRIBUTION, FillerItemRarity, get_filler_item_data +from ..Items import FillerItemRarity, get_filler_item_data from . import CivVITestBase