diff options
author | Paul Duncan <pabs@pablotron.org> | 2019-01-16 12:09:25 -0500 |
---|---|---|
committer | Paul Duncan <pabs@pablotron.org> | 2019-01-16 12:09:25 -0500 |
commit | df812e3dcd0af5ba932264d7ca1e0131a4a43019 (patch) | |
tree | f9718070c6084079ac2ceb80b7f2b678787ed7aa /src | |
parent | 11fe11568e27e5fc7d5d58ee64cb83b185240daf (diff) | |
download | sok-df812e3dcd0af5ba932264d7ca1e0131a4a43019.tar.bz2 sok-df812e3dcd0af5ba932264d7ca1e0131a4a43019.zip |
animate failed moves
Diffstat (limited to 'src')
-rw-r--r-- | src/sdl/draw.c | 4 | ||||
-rw-r--r-- | src/sdl/draw.h | 2 | ||||
-rw-r--r-- | src/sdl/main.c | 5 |
3 files changed, 10 insertions, 1 deletions
diff --git a/src/sdl/draw.c b/src/sdl/draw.c index 762976f..37d9ba2 100644 --- a/src/sdl/draw.c +++ b/src/sdl/draw.c @@ -10,6 +10,8 @@ #define M_2_PI (2.0 * 3.1415926) +#define BUMP_TIME 300 + static size_t get_cell_size( const draw_ctx_t * const draw_ctx @@ -145,6 +147,8 @@ get_home_angle( return 5 * sin(draw_ctx->ticks * M_2_PI / 2000.0); } else if (sok_ctx_is_done(draw_ctx->ctx)) { return 10 * sin(draw_ctx->ticks * M_2_PI / 1000.0); + } else if ((draw_ctx->ticks - draw_ctx->bump_ticks) < BUMP_TIME) { + return 10 * sin(draw_ctx->ticks * M_2_PI / (BUMP_TIME / 2.0)); } else { return 0; } diff --git a/src/sdl/draw.h b/src/sdl/draw.h index f947a70..919f362 100644 --- a/src/sdl/draw.h +++ b/src/sdl/draw.h @@ -27,7 +27,7 @@ typedef struct { // render offset int render_ofs_x, render_ofs_y; - Uint32 ticks; + Uint32 ticks, bump_ticks; const theme_t * const theme; diff --git a/src/sdl/main.c b/src/sdl/main.c index 82d6682..123b1d7 100644 --- a/src/sdl/main.c +++ b/src/sdl/main.c @@ -165,6 +165,7 @@ int main(int argc, char *argv[]) { .renderer = renderer, .zoom = &zoom, .theme = theme_get_default(), + .bump_ticks = SDL_GetTicks() - 5000, }; // set level @@ -184,6 +185,7 @@ int main(int argc, char *argv[]) { bool is_fullscreen = false; bool done = false; while (!done) { + const Uint32 ticks = SDL_GetTicks(); SDL_Event ev; // read events @@ -201,12 +203,14 @@ int main(int argc, char *argv[]) { break; case ACTION_MOVE: if (!sok_ctx_move(&ctx, (sok_dir_t) action.data)) { + draw_ctx.bump_ticks = ticks; warn("move %s failed", SOK_DIR_TO_STR((sok_dir_t) action.data)); } break; case ACTION_UNDO: if (!sok_ctx_undo(&ctx)) { + draw_ctx.bump_ticks = ticks; warn("undo failed"); } @@ -219,6 +223,7 @@ int main(int argc, char *argv[]) { // set level set_level(&draw_ctx, &ctx, level_num); } else { + draw_ctx.bump_ticks = ticks; warn("cannot advance to next level"); } |