PyConnect-4/gui/menu_manager.py
2025-08-28 09:31:40 +12:00

47 lines
1.2 KiB
Python

import pygame
class MenuManager:
def __init__(self, display, bg_colour, menus=None):
self.display = display
self.bg_colour = bg_colour
self.menus = menus or {}
self.current_menu = None
def change_menu(self, name):
if name not in self.menus:
raise ValueError(f"Menu '{name}' not registered")
self.current_menu = name
def register_menu(self, name, buttons=None, draw=None):
self.menus[name] = {
"buttons": buttons or [],
"draw": draw
}
def handle_event(self, event):
if not self.current_menu:
return
buttons = self.menus[self.current_menu]["buttons"]
# handle dynamic buttons (function returning list)
if callable(buttons):
buttons = buttons()
for b in buttons:
b.handle_event(event)
def draw(self):
if not self.current_menu:
return
buttons = self.menus[self.current_menu]["buttons"]
draw_callback = self.menus[self.current_menu]["draw"]
if callable(buttons):
buttons = buttons()
for b in buttons:
b.draw(self.display)
if draw_callback:
draw_callback(self.display)