-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontext.py
More file actions
79 lines (55 loc) · 2.16 KB
/
context.py
File metadata and controls
79 lines (55 loc) · 2.16 KB
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
from dataclasses import dataclass, field
from typing import Any, Dict, List, Set, Optional
@dataclass
class LevelAreaContext:
curr_level: int = -1
curr_area: int = -1
@dataclass
class ExtractionContext:
rom: Any = None
data: Any = None
txt: Any = None
db: Any = None
current_context_prefix: Optional[str] = None
first_command_in_script: bool = True
first_cmd: Optional[int] = None
level_area: LevelAreaContext = field(default_factory=LevelAreaContext)
indent: int = 0
last_collision_surface_count: int = 0
level_script_tracker: List[str] = field(default_factory=list)
script_cmd_history: List[List[str]] = field(default_factory=list)
callers_map: Dict[int, Set[str]] = field(default_factory=dict)
global_candidates: Set[int] = field(default_factory=set)
candidate_placeholders: Dict[int, str] = field(default_factory=dict)
pending_locs: Set[int] = field(default_factory=set)
pending_areas: List[tuple] = field(default_factory=list)
reached_end: bool = False
_pending_record: Any = None
curr_phys: int = 0
# Deferred output for the current level script being parsed.
# Managed by parse_level_script: created at start, post-processed + serialized at end.
deferred: Any = None
cmd_bytes: bytes = b""
@property
def curr_level(self) -> int:
return self.level_area.curr_level
@curr_level.setter
def curr_level(self, value: int):
self.level_area.curr_level = value
@property
def curr_area(self) -> int:
return self.level_area.curr_area
@curr_area.setter
def curr_area(self, value: int):
self.level_area.curr_area = value
def get_cur_level(self) -> Optional[str]:
from utils import level_num_to_str
return level_num_to_str.get(self.curr_level)
def ensure_deferred(self) -> Any:
"""Get or create the deferred output for the current script."""
if self.deferred is None:
from deferred_output import DeferredScriptOutput
self.deferred = DeferredScriptOutput()
return self.deferred
# Global context for the current extraction run.
ctx = ExtractionContext()