projects
/
supertux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- fixed problem with last_menu not being able to handle menues deeper than two submenues
[supertux.git]
/
src
/
gameloop.cpp
diff --git
a/src/gameloop.cpp
b/src/gameloop.cpp
index
5e86022
..
cfdefc1
100644
(file)
--- a/
src/gameloop.cpp
+++ b/
src/gameloop.cpp
@@
-129,6
+129,20
@@
GameSession::start_timers()
}
void
}
void
+GameSession::on_escape_press()
+{
+ if(st_gl_mode == ST_GL_TEST)
+ {
+ exit_status = LEVEL_ABORT;
+ }
+ else if (!Menu::current())
+ {
+ Menu::set_current(game_menu);
+ st_pause_ticks_stop();
+ }
+}
+
+void
GameSession::process_events()
{
Player& tux = *world->get_tux();
GameSession::process_events()
{
Player& tux = *world->get_tux();
@@
-137,168
+151,154
@@
GameSession::process_events()
while (SDL_PollEvent(&event))
{
/* Check for menu-events, if the menu is shown */
while (SDL_PollEvent(&event))
{
/* Check for menu-events, if the menu is shown */
- current_menu->event(event);
-
- switch(event.type)
+ if (Menu::current())
{
{
- case SDL_QUIT: /* Quit event - quit: */
- st_abort("Received window close", "");
- break;
-
- case SDL_KEYDOWN: /* A keypress! */
- {
- SDLKey key = event.key.keysym.sym;
-
- if(tux.key_event(key,DOWN))
+ Menu::current()->event(event);
+ }
+ else
+ {
+ switch(event.type)
+ {
+ case SDL_QUIT: /* Quit event - quit: */
+ st_abort("Received window close", "");
break;
break;
- switch(key)
+ case SDL_KEYDOWN: /* A keypress! */
{
{
- case SDLK_ESCAPE: /* Escape: Open/Close the menu: */
- if(!game_pause)
+ SDLKey key = event.key.keysym.sym;
+
+ if(tux.key_event(key,DOWN))
+ break;
+
+ switch(key)
{
{
- if(st_gl_mode == ST_GL_TEST)
- {
- exit_status = LEVEL_ABORT;
- }
- else if(!show_menu)
- {
- Menu::set_current(game_menu);
- show_menu = 0;
- st_pause_ticks_stop();
- }
- else
- {
- Menu::set_current(game_menu);
- show_menu = 1;
- st_pause_ticks_start();
- }
+ case SDLK_ESCAPE: /* Escape: Open/Close the menu: */
+ on_escape_press();
+ break;
+ default:
+ break;
}
}
- break;
- default:
- break;
}
}
- }
- break;
- case SDL_KEYUP: /* A keyrelease! */
- {
- SDLKey key = event.key.keysym.sym;
-
- if(tux.key_event(key, UP))
break;
break;
-
- switch(key)
+ case SDL_KEYUP: /* A keyrelease! */
{
{
- case SDLK_p:
- if(!show_menu)
+ SDLKey key = event.key.keysym.sym;
+
+ if(tux.key_event(key, UP))
+ break;
+
+ switch(key)
{
{
- if(game_pause)
- {
- game_pause = false;
- st_pause_ticks_stop();
- }
- else
+ case SDLK_p:
+ if(!Menu::current())
{
{
- game_pause = true;
- st_pause_ticks_start();
+ if(game_pause)
+ {
+ game_pause = false;
+ st_pause_ticks_stop();
+ }
+ else
+ {
+ game_pause = true;
+ st_pause_ticks_start();
+ }
}
}
- }
- break;
- case SDLK_TAB:
- if(debug_mode)
- {
- tux.size = !tux.size;
- if(tux.size == BIG)
+ break;
+ case SDLK_TAB:
+ if(debug_mode)
{
{
- tux.base.height = 64;
+ tux.size = !tux.size;
+ if(tux.size == BIG)
+ {
+ tux.base.height = 64;
+ }
+ else
+ tux.base.height = 32;
}
}
+ break;
+ case SDLK_END:
+ if(debug_mode)
+ player_status.distros += 50;
+ break;
+ case SDLK_DELETE:
+ if(debug_mode)
+ tux.got_coffee = 1;
+ break;
+ case SDLK_INSERT:
+ if(debug_mode)
+ tux.invincible_timer.start(TUX_INVINCIBLE_TIME);
+ break;
+ case SDLK_l:
+ if(debug_mode)
+ --player_status.lives;
+ break;
+ case SDLK_s:
+ if(debug_mode)
+ player_status.score += 1000;
+ case SDLK_f:
+ if(debug_fps)
+ debug_fps = false;
else
else
- tux.base.height = 32;
+ debug_fps = true;
+ break;
+ default:
+ break;
}
}
- break;
- case SDLK_END:
- if(debug_mode)
- player_status.distros += 50;
- break;
- case SDLK_DELETE:
- if(debug_mode)
- tux.got_coffee = 1;
- break;
- case SDLK_INSERT:
- if(debug_mode)
- tux.invincible_timer.start(TUX_INVINCIBLE_TIME);
- break;
- case SDLK_l:
- if(debug_mode)
- --player_status.lives;
- break;
- case SDLK_s:
- if(debug_mode)
- player_status.score += 1000;
- case SDLK_f:
- if(debug_fps)
- debug_fps = false;
- else
- debug_fps = true;
- break;
- default:
- break;
}
}
- }
- break;
+ break;
- case SDL_JOYAXISMOTION:
- switch(event.jaxis.axis)
- {
- case JOY_X:
- if (event.jaxis.value < -JOYSTICK_DEAD_ZONE)
+ case SDL_JOYAXISMOTION:
+ switch(event.jaxis.axis)
{
{
- tux.input.left = DOWN;
- tux.input.right = UP;
- }
- else if (event.jaxis.value > JOYSTICK_DEAD_ZONE)
- {
- tux.input.left = UP;
- tux.input.right = DOWN;
- }
- else
- {
- tux.input.left = DOWN;
- tux.input.right = DOWN;
+ case JOY_X:
+ if (event.jaxis.value < -JOYSTICK_DEAD_ZONE)
+ {
+ tux.input.left = DOWN;
+ tux.input.right = UP;
+ }
+ else if (event.jaxis.value > JOYSTICK_DEAD_ZONE)
+ {
+ tux.input.left = UP;
+ tux.input.right = DOWN;
+ }
+ else
+ {
+ tux.input.left = DOWN;
+ tux.input.right = DOWN;
+ }
+ break;
+ case JOY_Y:
+ if (event.jaxis.value > JOYSTICK_DEAD_ZONE)
+ tux.input.down = DOWN;
+ else if (event.jaxis.value < -JOYSTICK_DEAD_ZONE)
+ tux.input.down = UP;
+ else
+ tux.input.down = UP;
+
+ break;
+ default:
+ break;
}
break;
}
break;
- case JOY_Y:
- if (event.jaxis.value > JOYSTICK_DEAD_ZONE)
- tux.input.down = DOWN;
- else if (event.jaxis.value < -JOYSTICK_DEAD_ZONE)
- tux.input.down = UP;
- else
- tux.input.down = UP;
-
- break;
- default:
+ case SDL_JOYBUTTONDOWN:
+ if (event.jbutton.button == JOY_A)
+ tux.input.up = DOWN;
+ else if (event.jbutton.button == JOY_B)
+ tux.input.fire = DOWN;
+ else if (event.jbutton.button == JOY_START)
+ on_escape_press();
+ break;
+ case SDL_JOYBUTTONUP:
+ if (event.jbutton.button == JOY_A)
+ tux.input.up = UP;
+ else if (event.jbutton.button == JOY_B)
+ tux.input.fire = UP;
break;
break;
- }
- break;
- case SDL_JOYBUTTONDOWN:
- if (event.jbutton.button == JOY_A)
- tux.input.up = DOWN;
- else if (event.jbutton.button == JOY_B)
- tux.input.fire = DOWN;
- break;
- case SDL_JOYBUTTONUP:
- if (event.jbutton.button == JOY_A)
- tux.input.up = UP;
- else if (event.jbutton.button == JOY_B)
- tux.input.fire = UP;
-
- break;
-
- default:
- break;
-
- } /* switch */
+ default:
+ break;
+ } /* switch */
+ }
} /* while */
}
} /* while */
}
@@
-325,14
+325,6
@@
GameSession::check_end_conditions()
{ // No more lives!?
if(st_gl_mode != ST_GL_TEST)
drawendscreen();
{ // No more lives!?
if(st_gl_mode != ST_GL_TEST)
drawendscreen();
-
- if(st_gl_mode != ST_GL_TEST)
- {
- // FIXME: highscore soving doesn't make sense in its
- // current form
- //if (player_status.score > hs_score)
- //save_hs(player_status.score);
- }
exit_status = GAME_OVER;
}
exit_status = GAME_OVER;
}
@@
-373,9
+365,10
@@
GameSession::draw()
blue_text->drawf("PAUSE - Press 'P' To Play", 0, 230, A_HMIDDLE, A_TOP, 1);
}
blue_text->drawf("PAUSE - Press 'P' To Play", 0, 230, A_HMIDDLE, A_TOP, 1);
}
- if(
show_menu
)
+ if(
Menu::current()
)
{
{
- menu_process_current();
+ Menu::current()->action();
+ Menu::current()->draw();
mouse_cursor->draw();
}
mouse_cursor->draw();
}
@@
-430,9
+423,9
@@
GameSession::run()
process_events();
process_events();
- if(
show_menu
)
+ if(
Menu::current()
)
{
{
- if(
current_menu
== game_menu)
+ if(
Menu::current()
== game_menu)
{
switch (game_menu->check())
{
{
switch (game_menu->check())
{
@@
-445,18
+438,18
@@
GameSession::run()
break;
}
}
break;
}
}
- else if(
current_menu
== options_menu)
+ else if(
Menu::current()
== options_menu)
{
process_options_menu();
}
{
process_options_menu();
}
- else if(
current_menu
== load_game_menu )
+ else if(
Menu::current()
== load_game_menu )
{
process_load_game_menu();
}
}
// Handle actions:
{
process_load_game_menu();
}
}
// Handle actions:
- if(!game_pause && !
show_menu
)
+ if(!game_pause && !
Menu::current()
)
{
frame_ratio *= game_speed;
frame_ratio += overlap;
{
frame_ratio *= game_speed;
frame_ratio += overlap;
@@
-490,7
+483,7
@@
GameSession::run()
draw();
/* Time stops in pause mode */
draw();
/* Time stops in pause mode */
- if(game_pause ||
show_menu
)
+ if(game_pause ||
Menu::current()
)
{
continue;
}
{
continue;
}
@@
-565,13
+558,7
@@
GameSession::drawstatus()
white_text->draw("SCORE", 0, 0, 1);
gold_text->draw(str, 96, 0, 1);
white_text->draw("SCORE", 0, 0, 1);
gold_text->draw(str, 96, 0, 1);
- if(st_gl_mode != ST_GL_TEST)
- {
- sprintf(str, "%d", hs_score);
- white_text->draw("HIGH", 0, 20, 1);
- gold_text->draw(str, 96, 20, 1);
- }
- else
+ if(st_gl_mode == ST_GL_TEST)
{
white_text->draw("Press ESC To Return",0,20,1);
}
{
white_text->draw("Press ESC To Return",0,20,1);
}