Skip to content

Commit 30d5125

Browse files
committed
Refactor menu items to use on_draw
1 parent 83142d2 commit 30d5125

1 file changed

Lines changed: 8 additions & 12 deletions

File tree

game/states.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,12 @@ class MenuItem(Protocol):
9292

9393
__slots__ = ()
9494

95-
@property
96-
def label(self) -> str:
97-
"""Label for the menu item."""
98-
9995
def on_event(self, event: tcod.event.Event) -> StateResult:
10096
"""Handle events passed to the menu item."""
10197

98+
def on_draw(self, console: tcod.console.Console, x: int, y: int, highlight: bool) -> None:
99+
"""Draw is item at the given position."""
100+
102101

103102
@attrs.define()
104103
class SelectItem(MenuItem):
@@ -117,6 +116,10 @@ def on_event(self, event: tcod.event.Event) -> StateResult:
117116
case _:
118117
return None
119118

119+
def on_draw(self, console: tcod.console.Console, x: int, y: int, highlight: bool) -> None:
120+
"""Render this items label."""
121+
console.print(x, y, self.label, fg=(255, 255, 255), bg=(64, 64, 64) if highlight else (0, 0, 0))
122+
120123

121124
@attrs.define(eq=False)
122125
class ListMenu(State):
@@ -167,14 +170,7 @@ def on_draw(self, console: tcod.console.Console) -> None:
167170
"""Render the menu."""
168171
game.state_tools.draw_previous_state(self, console)
169172
for i, item in enumerate(self.items):
170-
is_selected = i == self.selected
171-
console.print(
172-
self.x,
173-
self.y + i,
174-
item.label,
175-
fg=(255, 255, 255),
176-
bg=(64, 64, 64) if is_selected else (0, 0, 0),
177-
)
173+
item.on_draw(console, x=self.x, y=self.y + i, highlight=i == self.selected)
178174

179175

180176
class MainMenu(ListMenu):

0 commit comments

Comments
 (0)