71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
from enum import Enum
 | 
						|
from typing import Dict, List
 | 
						|
from worlds.smz3.TotalSMZ3.Config import *
 | 
						|
from worlds.smz3.TotalSMZ3.Item import Item, ItemType
 | 
						|
 | 
						|
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:
 | 
						|
    import worlds.smz3.TotalSMZ3.Location as 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)
 |