Skip to content

Commit 83142d2

Browse files
committed
Add state utility functions
1 parent dc6fdc6 commit 83142d2

2 files changed

Lines changed: 20 additions & 7 deletions

File tree

game/state_tools.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import tcod.console
66

77
import g
8-
from game.state import Pop, Push, Reset, StateResult
8+
from game.state import Pop, Push, Reset, State, StateResult
99

1010

1111
def main_draw() -> None:
@@ -42,3 +42,20 @@ def main_loop() -> None:
4242
tile_event = g.context.convert_event(event)
4343
if g.states:
4444
apply_state_result(g.states[-1].on_event(tile_event))
45+
46+
47+
def get_previous_state(state: State) -> State | None:
48+
"""Return the state before `state` in the stack if it exists."""
49+
current_index = next(index for index, value in enumerate(g.states) if value is state)
50+
return g.states[current_index - 1] if current_index > 0 else None
51+
52+
53+
def draw_previous_state(state: State, console: tcod.console.Console, dim: bool = True) -> None:
54+
"""Draw previous states, optionally dimming all but the active state."""
55+
prev_state = get_previous_state(state)
56+
if prev_state is None:
57+
return
58+
prev_state.on_draw(console)
59+
if dim and state is g.states[-1]:
60+
console.rgb["fg"] //= 4
61+
console.rgb["bg"] //= 4

game/states.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from tcod.event import KeySym
1313

1414
import g
15+
import game.state_tools
1516
import game.world_tools
1617
from game.components import Gold, Graphic, Position
1718
from game.state import Pop, Push, Reset, State, StateResult
@@ -164,12 +165,7 @@ def on_cancel(self) -> StateResult:
164165

165166
def on_draw(self, console: tcod.console.Console) -> None:
166167
"""Render the menu."""
167-
current_index = g.states.index(self)
168-
if current_index > 0:
169-
g.states[current_index - 1].on_draw(console)
170-
if g.states[-1] is self:
171-
console.rgb["fg"] //= 4
172-
console.rgb["bg"] //= 4
168+
game.state_tools.draw_previous_state(self, console)
173169
for i, item in enumerate(self.items):
174170
is_selected = i == self.selected
175171
console.print(

0 commit comments

Comments
 (0)