@@ -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 ()
104103class 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 )
122125class 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
180176class MainMenu (ListMenu ):
0 commit comments