summaryrefslogtreecommitdiff
path: root/src/rb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rb.c')
-rw-r--r--src/rb.c65
1 files changed, 35 insertions, 30 deletions
diff --git a/src/rb.c b/src/rb.c
index a478671..fdef5f0 100644
--- a/src/rb.c
+++ b/src/rb.c
@@ -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;