1 /*
2  * This software is licensed under the terms of the MIT License.
3  * See COPYING for further information.
4  * ---
5  * Copyright (c) 2011-2019, Lukas Weber <laochailan@web.de>.
6  * Copyright (c) 2012-2019, Andrei Alexeyev <akari@taisei-project.org>.
7  */
8 
9 #include "taisei.h"
10 
11 #include "menu.h"
12 #include "options.h"
13 #include "stageselect.h"
14 #include "replayview.h"
15 #include "spellpractice.h"
16 #include "stagepractice.h"
17 #include "difficultyselect.h"
18 #include "musicroom.h"
19 #include "global.h"
20 #include "submenus.h"
21 
on_leave_options(CallChainResult ccr)22 static void on_leave_options(CallChainResult ccr) {
23 	MenuData *m = ccr.result;
24 
25 	if(m->state == MS_Dead) {
26 		taisei_commit_persistent_data();
27 	}
28 }
29 
menu_action_enter_options(MenuData * menu,void * arg)30 void menu_action_enter_options(MenuData *menu, void *arg) {
31 	enter_menu(create_options_menu(), CALLCHAIN(on_leave_options, NULL));
32 }
33 
menu_action_enter_stagemenu(MenuData * menu,void * arg)34 void menu_action_enter_stagemenu(MenuData *menu, void *arg) {
35 	enter_menu(create_stage_menu(), NO_CALLCHAIN);
36 }
37 
menu_action_enter_replayview(MenuData * menu,void * arg)38 void menu_action_enter_replayview(MenuData *menu, void *arg) {
39 	enter_menu(create_replayview_menu(), NO_CALLCHAIN);
40 }
41 
menu_action_enter_spellpractice(MenuData * menu,void * arg)42 void menu_action_enter_spellpractice(MenuData *menu, void *arg) {
43 	enter_menu(create_spell_menu(), NO_CALLCHAIN);
44 }
45 
46 static void stgpract_do_choose_stage(CallChainResult ccr);
47 
menu_action_enter_stagepractice(MenuData * menu,void * arg)48 void menu_action_enter_stagepractice(MenuData *menu, void *arg) {
49 	enter_menu(create_difficulty_menu(), CALLCHAIN(stgpract_do_choose_stage, NULL));
50 }
51 
stgpract_do_choose_stage(CallChainResult ccr)52 static void stgpract_do_choose_stage(CallChainResult ccr) {
53 	MenuData *prev_menu = ccr.result;
54 	assert(prev_menu != NULL);
55 
56 	if(prev_menu->selected >= 0) {
57 		enter_menu(create_stgpract_menu(progress.game_settings.difficulty), NO_CALLCHAIN);
58 	}
59 }
60 
menu_action_enter_musicroom(MenuData * menu,void * arg)61 void menu_action_enter_musicroom(MenuData *menu, void *arg) {
62 	enter_menu(create_musicroom_menu(), NO_CALLCHAIN);
63 }
64