70 lines
1.7 KiB
Python
70 lines
1.7 KiB
Python
from enum import Enum
|
|
from typing import Dict, List
|
|
from .Config import *
|
|
|
|
class RewardType(Enum):
|
|
Null = 0
|
|
Agahnim = 1 << 0
|
|
PendantGreen = 1 << 1
|
|
PendantNonGreen = 1 << 2
|
|
CrystalBlue = 1 << 3
|
|
CrystalRed = 1 << 4
|
|
BossTokenKraid = 1 << 5
|
|
BossTokenPhantoon = 1 << 6
|
|
BossTokenDraygon = 1 << 7
|
|
BossTokenRidley = 1 << 8
|
|
|
|
AnyPendant = PendantGreen | PendantNonGreen
|
|
AnyCrystal = CrystalBlue | CrystalRed
|
|
AnyBossToken = BossTokenKraid | BossTokenPhantoon | BossTokenDraygon | BossTokenRidley
|
|
|
|
class IReward:
|
|
Reward: RewardType
|
|
def CanComplete(self, items):
|
|
pass
|
|
|
|
class IMedallionAccess:
|
|
Medallion = None
|
|
|
|
class Region:
|
|
from . import Location
|
|
Name: str
|
|
Area: str
|
|
|
|
Locations: List[Location.Location]
|
|
Weight: int = 0
|
|
|
|
Config: Config
|
|
|
|
locationLookup: Dict[str, Location.Location]
|
|
|
|
def GetLocation(self, name: str):
|
|
return self.locationLookup[name]
|
|
|
|
def __init__(self, world, config: Config):
|
|
self.Config = config
|
|
self.world = world
|
|
self.locationLookup = {}
|
|
self.RegionItems = []
|
|
|
|
def GenerateLocationLookup(self):
|
|
self.locationLookup = {loc.Name:loc for loc in self.Locations}
|
|
|
|
def IsRegionItem(self, item):
|
|
return item.Type in self.RegionItems
|
|
|
|
def CanFill(self, item):
|
|
return self.Config.Keysanity or not item.IsDungeonItem() or self.IsRegionItem(item)
|
|
|
|
def CanEnter(self, items):
|
|
return True
|
|
|
|
class SMRegion(Region):
|
|
Logic: SMLogic = Config.SMLogic
|
|
def __init__(self, world, config: Config):
|
|
super().__init__(world, config)
|
|
|
|
class Z3Region(Region):
|
|
def __init__(self, world, config: Config):
|
|
super().__init__(world, config)
|