summary refs log tree commit diff stats
path: root/datatypes.py
blob: 9521422ab154a0c65a69e91445a8e4c258abad02 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from enum import Enum, Flag, auto
from typing import List, NamedTuple, Optional


class RoomAndDoor(NamedTuple):
    room: Optional[str]
    door: str


class RoomAndPanel(NamedTuple):
    room: Optional[str]
    panel: str


class RoomAndPanelDoor(NamedTuple):
    room: Optional[str]
    panel_door: str


class EntranceType(Flag):
    NORMAL = auto()
    PAINTING = auto()
    SUNWARP = auto()
    WARP = auto()
    CROSSROADS_ROOF_ACCESS = auto()


class RoomEntrance(NamedTuple):
    room: str  # source room
    door: Optional[RoomAndDoor]
    type: EntranceType


class Room(NamedTuple):
    name: str
    entrances: List[RoomEntrance]


class DoorType(Enum):
    NORMAL = 1
    SUNWARP = 2
    SUN_PAINTING = 3


class Door(NamedTuple):
    name: str
    item_name: str
    location_name: Optional[str]
    panels: Optional[List[RoomAndPanel]]
    skip_location: bool
    skip_item: bool
    has_doors: bool
    painting_ids: List[str]
    event: bool
    door_group: Optional[str]
    include_reduce: bool
    type: DoorType
    item_group: Optional[str]


class Panel(NamedTuple):
    required_rooms: List[str]
    required_doors: List[RoomAndDoor]
    required_panels: List[RoomAndPanel]
    colors: List[str]
    check: bool
    event: bool
    exclude_reduce: bool
    achievement: bool
    non_counting: bool
    panel_door: Optional[RoomAndPanelDoor]  # This will always be fully specified.
    location_name: Optional[str]


class PanelDoor(NamedTuple):
    item_name: str
    panel_group: Optional[str]


class Painting(NamedTuple):
    id: str
    room: str
    enter_only: bool
    exit_only: bool
    required: bool
    required_when_no_doors: bool
    required_door: Optional[RoomAndDoor]
    disable: bool
    req_blocked: bool
    req_blocked_when_no_doors: bool


class Progression(NamedTuple):
    item_name: str
    index: int