diff options
Diffstat (limited to 'src/rb.c')
| -rw-r--r-- | src/rb.c | 44 |
1 files changed, 33 insertions, 11 deletions
@@ -108,6 +108,7 @@ register_events(struct rb *rb) al_register_event_source(rb->event_queue, al_get_mouse_event_source()); al_hide_mouse_cursor(rb->display); + al_grab_mouse(rb->display); } void @@ -119,11 +120,14 @@ start_game(struct rb *rb) bool done = false; bool redraw = true; float x, y; + float dx, dy; /* mouse velocity - change in coordinate since prev event*/ ALLEGRO_EVENT event; unsigned char key[ALLEGRO_KEY_MAX]; memset(key, 0, sizeof(key)); + dx = 0; + dy = 0; x = 100; y = 100; al_start_timer(rb->timer); @@ -133,18 +137,35 @@ start_game(struct rb *rb) switch(event.type) { case ALLEGRO_EVENT_TIMER: - if (key[ALLEGRO_KEY_UP]) - y--; - if (key[ALLEGRO_KEY_DOWN]) - y++; - if (key[ALLEGRO_KEY_LEFT]) - x--; - if (key[ALLEGRO_KEY_RIGHT]) - x++; + x += dx; + y += dy; + + if (x < 0) { + x *= -1; + dx *= -1; + } + + if (x > rb->width) { + x -= (x - rb->width) * 2; + dx *= -1; + } + + if (y < 0) { + y *= -1; + dy *= -1; + } + + if (y > rb->height) { + y -= (y - rb->height) * 2; + dy *= -1; + } if (key[ALLEGRO_KEY_ESCAPE]) done = true; + dx *= 0.9; + dy *= 0.9; + for (int i = 0; i < ALLEGRO_KEY_MAX; i++) key[i] &= ~KEY_SEEN; @@ -152,8 +173,9 @@ start_game(struct rb *rb) break; case ALLEGRO_EVENT_MOUSE_AXES: - x = event.mouse.x; - y = event.mouse.y; + dx += event.mouse.dx * 0.1; + dy += event.mouse.dy * 0.1; + al_set_mouse_xy(rb->display, 320, 240); break; case ALLEGRO_EVENT_KEY_DOWN: @@ -190,7 +212,7 @@ start_game(struct rb *rb) al_clear_to_color(al_map_rgb(0, 0, 0)); al_draw_textf(rb->font, al_map_rgb(255, 255, 255), 0, 0, 0, - "X: %.1f Y: %.1f", x, y); + "X: %.1f Y: %.1f DX: %f DY: %f", x, y, dx, dy); al_draw_filled_rectangle(x, y, x+40, y+120, al_map_rgb(255, 0, 0)); al_flip_display(); |
