Skip to content

Commit

Permalink
Make sure there is only one active menu
Browse files Browse the repository at this point in the history
  • Loading branch information
ironsmile committed Mar 13, 2018
1 parent f8b6a3c commit d765802
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 40 deletions.
13 changes: 9 additions & 4 deletions app.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def main(args):
'toggle_fullscreen': None,
'language': None,
'fullscreen': False,
'back_to_main_menu': False,
'new_settings_applied': False,
}

render = Render(fullscreen=cfg.get('fullscreen', False))
Expand All @@ -76,6 +76,7 @@ def main(args):
render.show_fps = True

while 42:
selected['new_settings_applied'] = False
selected = menu.main_menu(cfg, render, available_maps, selected)
if selected['exit']:
break
Expand All @@ -87,11 +88,15 @@ def main(args):
language.select(selected['language'])
selected['language'] = None
continue
if selected['back_to_main_menu']:
selected['back_to_main_menu'] = False
if selected['new_settings_applied']:
continue
pygame.mixer.init(buffer=512)
game_loop(cfg, render, players_count=selected['players_count'], map_name=selected['map'])
game_loop(
cfg,
render,
players_count=selected['players_count'],
map_name=selected['map']
)
pygame.mixer.stop()

render.quit()
Expand Down
63 changes: 27 additions & 36 deletions menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,36 +18,15 @@ def __init__(self, cfg):
self.apply_selected = False
self.game_started = False
self.settings_changed = False
self.back_button_pressed = False
self.selected = {}

def on_select_players(self, render, count, available_maps):
logging.debug('selected %d player', count)
def on_select_players(self, count):
logging.debug('selected %d player(s)', count)
self.selected['players_count'] = count

menu_args = self.get_menu_args(render)
l_menu = pygameMenu.Menu(render.screen, title=_('Select Level'), **menu_args)
l_menu.add_selector(
_('Level:'),
[m for m in zip(available_maps, available_maps)],
None, # onchange
self.on_game_start
)
l_menu.add_option(_('Back'), self.on_back_button)

clck = pygame.time.Clock()
while 42:
clck.tick(60)
events = pygame.event.get()
l_menu.mainloop(events)
if self.game_started:
break
if self.back_button_pressed:
self.back_button_pressed = False
break

def on_back_button(self):
self.back_button_pressed = True
def on_select_map(self, game_map):
logging.debug('selected map: %s', game_map)
self.selected['map'] = game_map

def exitted(self):
return self.exit_pressed
Expand Down Expand Up @@ -82,8 +61,7 @@ def on_language_setting_change(self, c):
self.settings_changed = True
self.selected['language'] = c

def on_game_start(self, selected_map):
self.selected['map'] = selected_map
def on_game_start(self):
self.game_started = True

def get_menu_args(self, render):
Expand Down Expand Up @@ -146,15 +124,27 @@ def main_menu(cfg, render, available_maps, selected):
s_menu.add_option(_('Apply Settings'), mm_obj.on_apply_settings)
s_menu.add_option(_('Back'), PYGAME_MENU_BACK)

m_menu = pygameMenu.Menu(render.screen, title=_('Main Menu'), **menu_args)
m_menu.add_option(
_('1 player'), mm_obj.on_select_players,
render, 1, available_maps
l_menu = pygameMenu.Menu(render.screen, title=_('Select Level'), **menu_args)
l_menu.add_option(_('Start Game'), mm_obj.on_game_start)
l_menu.add_selector(
_('Level:'),
[m for m in zip(available_maps, available_maps)],
mm_obj.on_select_map,
None # onreturn
)
m_menu.add_option(
_('2 players'), mm_obj.on_select_players,
render, 2, available_maps
l_menu.add_selector(
_('Players:'),
[
(_('1 player'), 1),
(_('2 players'), 2),
],
mm_obj.on_select_players,
None # onreturn
)
l_menu.add_option(_('Back'), PYGAME_MENU_BACK)

m_menu = pygameMenu.Menu(render.screen, title=_('Main Menu'), **menu_args)
m_menu.add_option(_('New Game'), l_menu)
m_menu.add_option(s_menu.get_title(), s_menu)
m_menu.add_option(_('Exit'), mm_obj.on_exit)

Expand All @@ -168,12 +158,13 @@ def main_menu(cfg, render, available_maps, selected):
break
if mm_obj.apply_selected:
mm_obj.apply_selected = False
selected['back_to_main_menu'] = True
selected['new_settings_applied'] = True
break
if mm_obj.game_started:
mm_obj.game_started = False
break

m_menu.disable()
selected.update(mm_obj.selected)

return selected
Expand Down

0 comments on commit d765802

Please sign in to comment.