80 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
from enum import unique, Enum
 | 
						|
 | 
						|
from BaseClasses import Region
 | 
						|
from .Hints import HintArea
 | 
						|
 | 
						|
 | 
						|
# copied from OoT-Randomizer/Region.py
 | 
						|
@unique
 | 
						|
class RegionType(Enum):
 | 
						|
 | 
						|
    Overworld = 1
 | 
						|
    Interior = 2
 | 
						|
    Dungeon = 3
 | 
						|
    Grotto = 4
 | 
						|
 | 
						|
 | 
						|
    @property
 | 
						|
    def is_indoors(self):
 | 
						|
        """Shorthand for checking if Interior or Dungeon"""
 | 
						|
        return self in (RegionType.Interior, RegionType.Dungeon, RegionType.Grotto)
 | 
						|
 | 
						|
# Pretends to be an enum, but when the values are raw ints, it's much faster
 | 
						|
class TimeOfDay(object):
 | 
						|
    NONE = 0
 | 
						|
    DAY = 1
 | 
						|
    DAMPE = 2
 | 
						|
    ALL = DAY | DAMPE
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class OOTRegion(Region):
 | 
						|
    game: str = "Ocarina of Time"
 | 
						|
 | 
						|
    def __init__(self, name: str, type, hint, player: int):
 | 
						|
        super(OOTRegion, self).__init__(name, type, hint, player)
 | 
						|
        self._oot_hint = None
 | 
						|
        self.alt_hint = None
 | 
						|
        self.price = None
 | 
						|
        self.time_passes = False
 | 
						|
        self.provides_time = TimeOfDay.NONE
 | 
						|
        self.scene = None
 | 
						|
        self.dungeon = None
 | 
						|
        self.pretty_name = None
 | 
						|
        self.font_color = None
 | 
						|
        self.is_boss_room = False
 | 
						|
 | 
						|
    def get_scene(self): 
 | 
						|
        if self.scene: 
 | 
						|
            return self.scene
 | 
						|
        elif self.dungeon: 
 | 
						|
            return self.dungeon.name
 | 
						|
        else: 
 | 
						|
            return None
 | 
						|
 | 
						|
    def can_reach(self, state):
 | 
						|
        if state.stale[self.player]:
 | 
						|
            stored_age = state.age[self.player]
 | 
						|
            state._oot_update_age_reachable_regions(self.player)
 | 
						|
            state.age[self.player] = stored_age
 | 
						|
        if state.age[self.player] == 'child': 
 | 
						|
            return self in state.child_reachable_regions[self.player]
 | 
						|
        elif state.age[self.player] == 'adult': 
 | 
						|
            return self in state.adult_reachable_regions[self.player]
 | 
						|
        else: # we don't care about age
 | 
						|
            return self in state.child_reachable_regions[self.player] or self in state.adult_reachable_regions[self.player]
 | 
						|
 | 
						|
    def set_hint_data(self, hint):
 | 
						|
        if self.dungeon:
 | 
						|
            self._oot_hint = HintArea.for_dungeon(self.dungeon)
 | 
						|
        else:
 | 
						|
            self._oot_hint = HintArea[hint]
 | 
						|
        self.hint_text = str(self._oot_hint)
 | 
						|
 | 
						|
    # This is too generic of a name to risk not breaking in the future.
 | 
						|
    # This lets us possibly switch it out later if AP starts using it.
 | 
						|
    @property
 | 
						|
    def hint(self):
 | 
						|
        return self._oot_hint
 |