64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
from enum import unique, Enum
|
|
|
|
from BaseClasses import Region
|
|
|
|
|
|
# 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.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
|
|
|
|
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]
|
|
|