projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
improved smooth movement animation for classic BD scheduling types
[rocksndiamonds.git]
/
src
/
game_bd
/
bd_gameplay.c
diff --git
a/src/game_bd/bd_gameplay.c
b/src/game_bd/bd_gameplay.c
index 7a4d889c051d49dcc237bef31f3181496f00f2d8..085dad08f6f0201c9aa6f65d79982df4ab521514 100644
(file)
--- a/
src/game_bd/bd_gameplay.c
+++ b/
src/game_bd/bd_gameplay.c
@@
-122,6
+122,8
@@
static void load_cave(GdGame *game)
game->milliseconds_anim = 0;
game->milliseconds_game = 0; // set game timer to zero, too
game->milliseconds_anim = 0;
game->milliseconds_game = 0; // set game timer to zero, too
+ game->cycle_counter = 0;
+
// create new element buffer
game->element_buffer = gd_cave_map_new(game->cave, int);
// create new element buffer
game->element_buffer = gd_cave_map_new(game->cave, int);
@@
-188,6
+190,13
@@
GdGame *gd_game_new(const int cave, const int level)
return game;
}
return game;
}
+boolean check_iteration_reached(GdGame *game)
+{
+ int millisecs_elapsed = 20;
+
+ return (game->milliseconds_game + millisecs_elapsed >= game->cave->speed);
+}
+
static void iterate_cave(GdGame *game, GdDirection player_move, boolean fire)
{
boolean suicide = FALSE;
static void iterate_cave(GdGame *game, GdDirection player_move, boolean fire)
{
boolean suicide = FALSE;
@@
-388,17
+397,22
@@
static GdGameState gd_game_main_int(GdGame *game, boolean allow_iterate, boolean
}
}
}
}
- // store last maximum number of cycles (to force redraw if changed)
+ // store last maximum number of cycle
frame
s (to force redraw if changed)
game->itermax_last = game->itermax;
game->itermax_last = game->itermax;
- //
update maximum number of cycles (frame) per cave iteration
- game->itermax = game->itercycle;
+ //
store maximum number of cycle frames separately for even and odd cycles
+ game->itermax
2[game->cycle_counter % 2]
= game->itercycle;
- // reset cycle (frame) counter for the next cave iteration
+ // update maximum number of cycle frames per cave iteration
+ game->itermax = game->itermax2[!(game->cycle_counter % 2)];
+
+ // reset cycle frame counter for the next cave iteration
game->itercycle = 0;
iterate_cave(game, game->player_move, game->player_fire);
game->itercycle = 0;
iterate_cave(game, game->player_move, game->player_fire);
+ game->cycle_counter++;
+
if (game->player_move == GD_MV_STILL)
{
game->player_move_stick = FALSE;
if (game->player_move == GD_MV_STILL)
{
game->player_move_stick = FALSE;
@@
-599,7
+613,7
@@
void play_game_func(GdGame *game, int action)
game->player_fire = fire;
// tell the interrupt "20ms has passed"
game->player_fire = fire;
// tell the interrupt "20ms has passed"
- state = gd_game_main_int(game, !game->out_of_window,
gd_keystate[SDL_SCANCODE_F]
);
+ state = gd_game_main_int(game, !game->out_of_window,
FALSE
);
// state of game, returned by gd_game_main_int
switch (state)
// state of game, returned by gd_game_main_int
switch (state)