diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2015-02-18 16:09:10 -0500 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2015-02-18 16:09:10 -0500 |
| commit | d86f31a5f428a3937b56d34e026a88ed737eb7bf (patch) | |
| tree | e86d34a36e92cd14b7b8c54a9cfe31f21786f451 /apps | |
| parent | 3fbc39f482df596c832cf4ffcf3956a20e71cb38 (diff) | |
| download | kappa-d86f31a5f428a3937b56d34e026a88ed737eb7bf.zip kappa-d86f31a5f428a3937b56d34e026a88ed737eb7bf.tar.gz kappa-d86f31a5f428a3937b56d34e026a88ed737eb7bf.tar.bz2 kappa-d86f31a5f428a3937b56d34e026a88ed737eb7bf.tar.xz | |
support modifier keys
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/plugin.c | 8 | ||||
| -rw-r--r-- | apps/plugin.h | 1 | ||||
| -rw-r--r-- | apps/xracer/graphics.c | 2 | ||||
| -rw-r--r-- | apps/xracer/graphics.h | 1 | ||||
| -rw-r--r-- | apps/xracer/main.c | 51 | ||||
| -rw-r--r-- | apps/xracer/xracer.h | 2 |
6 files changed, 57 insertions, 8 deletions
diff --git a/apps/plugin.c b/apps/plugin.c index fcb659d..cdca4c5 100644 --- a/apps/plugin.c +++ b/apps/plugin.c @@ -28,6 +28,11 @@ static int button_get(void) return ps2kbd_button_get(); } +static int modifier_get(void) +{ + return ps2kbd_modifier_get(); +} + static const struct plugin_api kappa_api = { &plugin_clear, &plugin_hline, @@ -47,7 +52,8 @@ static const struct plugin_api kappa_api = { &gfx_fillcircle, &gfx_update, &gfx_putsxy, - &button_get + &button_get, + &modifier_get, }; void plugin_load(enum plugin_status (*plugin)(const struct plugin_api*)) diff --git a/apps/plugin.h b/apps/plugin.h index 849dda9..e9c790c 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -51,6 +51,7 @@ struct plugin_api { void (*lcd_putsxy)(int x, int y, const char*); int (*button_get)(void); + int (*modifier_get)(void); }; /* defined by the plugin */ diff --git a/apps/xracer/graphics.c b/apps/xracer/graphics.c index d523343..9b67663 100644 --- a/apps/xracer/graphics.c +++ b/apps/xracer/graphics.c @@ -228,7 +228,7 @@ void render(struct camera_t *camera, struct road_segment *road, unsigned int roa /* interpolate so as to prevent jumpy camera movement on hills */ camera->pos.y = INTERPOLATE(base->p1_y, base->p2_y, base_percent) + camera_height; - for(int i = 0; i < DRAW_DIST; ++i) + for(int i = 0; i < camera->draw_dist; ++i) { struct road_segment *seg = &road[(base->idx + i) % road_length]; diff --git a/apps/xracer/graphics.h b/apps/xracer/graphics.h index aeecf0b..486db67 100644 --- a/apps/xracer/graphics.h +++ b/apps/xracer/graphics.h @@ -33,6 +33,7 @@ struct point_3d { struct camera_t { struct point_3d pos; int depth; + int draw_dist; }; struct point_2d { diff --git a/apps/xracer/main.c b/apps/xracer/main.c index 5c88c4f..29b2a7e 100644 --- a/apps/xracer/main.c +++ b/apps/xracer/main.c @@ -87,6 +87,8 @@ enum plugin_status do_flythrough(void) /* y is automatically calculated */ camera.pos.z = 0; + camera.draw_dist = DRAW_DIST; + //generate_test_road(); //road_length = load_map(road, MAX_ROAD_LENGTH, loop_map, ARRAYLEN(loop_map)); @@ -104,25 +106,64 @@ enum plugin_status do_flythrough(void) while(1) { int button = rb->button_get(); + int mod = rb->modifier_get(); switch(button) { case BUTTON_UP: - camera_height += MANUAL_SPEED; + switch(mod) + { + case MODIFIER_NONE: + camera_height += MANUAL_SPEED; + break; + case MODIFIER_CTRL: + camera.depth += 1; + break; + case MODIFIER_ALT: + camera.pos.z += MANUAL_SPEED; + break; + } break; case BUTTON_DOWN: - camera_height -= MANUAL_SPEED; + switch(mod) + { + case MODIFIER_NONE: + camera_height -= MANUAL_SPEED; + break; + case MODIFIER_CTRL: + camera.depth -= 1; + break; + case MODIFIER_ALT: + camera.pos.z -= MANUAL_SPEED; + break; + } break; case BUTTON_LEFT: - camera.pos.x -= MANUAL_SPEED; + switch(mod) + { + case MODIFIER_NONE: + camera.pos.x -= MANUAL_SPEED; + break; + case MODIFIER_CTRL: + camera.draw_dist -= 8; + break; + } break; case BUTTON_RIGHT: - camera.pos.x += MANUAL_SPEED; + switch(mod) + { + case MODIFIER_NONE: + camera.pos.x += MANUAL_SPEED; + break; + case MODIFIER_CTRL: + camera.draw_dist += 8; + break; + } break; } camera.pos.z += 512; /* loop the track right before going off the "end" */ - camera.pos.z %= (road_length - DRAW_DIST) * SEGMENT_LENGTH; + camera.pos.z %= (road_length - camera.draw_dist) * SEGMENT_LENGTH; render(&camera, road, road_length, camera_height); diff --git a/apps/xracer/xracer.h b/apps/xracer/xracer.h index 804bf39..28b02f4 100644 --- a/apps/xracer/xracer.h +++ b/apps/xracer/xracer.h @@ -39,7 +39,7 @@ /* road parameters */ #define ROAD_WIDTH (LCD_WIDTH/2) /* actually half the road width for easier math */ -#define MAX_ROAD_LENGTH 4096 +#define MAX_ROAD_LENGTH 16384 #define SEGMENT_LENGTH (LCD_WIDTH * 12) /* road generator parameters */ |