diff options
Diffstat (limited to 'src/rb.c')
| -rw-r--r-- | src/rb.c | 65 |
1 files changed, 35 insertions, 30 deletions
@@ -3,7 +3,12 @@ #include <allegro5/allegro_primitives.h> #include <stdlib.h> #include <stdio.h> + #include <rb.h> +#include <spaceship.h> + +long frames; +long score; ALLEGRO_DISPLAY * init_allegro_display(struct rb *rb) @@ -112,6 +117,21 @@ register_events(struct rb *rb) } void +rb_draw_status(struct rb *rb, struct spaceship *sp, + float x, float y, float dx, float dy) +{ + ALLEGRO_TRANSFORM transform; + al_identity_transform(&transform); + al_rotate_transform(&transform, 0); + al_translate_transform(&transform, 0, 0); + al_use_transform(&transform); + al_draw_textf(rb->font, al_map_rgb(255, 255, 255), + 0, 0, 0, + "X: %.1f Y: %.1f DX: %f DY: %f HDG: %f", + sp->x, sp->y, dx, dy, sp->heading); +} + +void start_game(struct rb *rb) { #define KEY_SEEN 1 @@ -123,6 +143,10 @@ start_game(struct rb *rb) float dx, dy; /* mouse velocity - change in coordinate since prev event*/ ALLEGRO_EVENT event; unsigned char key[ALLEGRO_KEY_MAX]; + struct spaceship sp = {0}; + + rb_ship_init(&sp); + memset(key, 0, sizeof(key)); @@ -140,25 +164,13 @@ start_game(struct rb *rb) x += dx; y += dy; - if (x < 0) { - x *= -1; - dx *= -1; - } - - if (x > rb->width) { - x -= (x - rb->width) * 2; - dx *= -1; - } + if(key[ALLEGRO_KEY_UP]) + rb_ship_accelerate(&sp); - if (y < 0) { - y *= -1; - dy *= -1; - } - - if (y > rb->height) { - y -= (y - rb->height) * 2; - dy *= -1; - } + if(key[ALLEGRO_KEY_LEFT]) + rb_ship_rotate_left(&sp); + if(key[ALLEGRO_KEY_RIGHT]) + rb_ship_rotate_right(&sp); if (key[ALLEGRO_KEY_ESCAPE]) done = true; @@ -175,8 +187,6 @@ start_game(struct rb *rb) case ALLEGRO_EVENT_MOUSE_AXES: dx += event.mouse.dx * 0.1; dy += event.mouse.dy * 0.1; - al_set_mouse_xy(rb->display, RB_X_CENTER, RB_Y_CENTER); - break; case ALLEGRO_EVENT_KEY_DOWN: key[event.keyboard.keycode] = KEY_SEEN | KEY_DOWN; @@ -185,20 +195,18 @@ start_game(struct rb *rb) key[event.keyboard.keycode] &= ~KEY_DOWN; break; -#if 0 case ALLEGRO_EVENT_KEY_CHAR: if (event.keyboard.keycode == ALLEGRO_KEY_UP) - y--; + rb_ship_accelerate(&sp); if (event.keyboard.keycode == ALLEGRO_KEY_DOWN) y++; if (event.keyboard.keycode == ALLEGRO_KEY_LEFT) - x--; + rb_ship_rotate_left(&sp); if (event.keyboard.keycode == ALLEGRO_KEY_RIGHT) - x++; + rb_ship_rotate_right(&sp); if (event.keyboard.keycode != ALLEGRO_KEY_ESCAPE) break; -#endif case ALLEGRO_EVENT_DISPLAY_CLOSE: done = true; @@ -210,11 +218,8 @@ start_game(struct rb *rb) if (redraw && al_is_event_queue_empty(rb->event_queue)) { 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 DX: %f DY: %f", x, y, dx, dy); - al_draw_filled_rectangle(x, y, x+40, y+120, - al_map_rgb(255, 0, 0)); + rb_draw_status(rb, &sp, x, y, dx, dy); + rb_draw_ship(&sp); al_flip_display(); redraw = false; |
