Implement zoom.

This commit is contained in:
2026-03-16 21:17:23 +01:00
parent 3d9c211737
commit bb47dcc9f9
4 changed files with 55 additions and 1 deletions

View File

@@ -104,6 +104,13 @@ void set_key(int keycode, int value) {
case ALLEGRO_KEY_P: case ALLEGRO_KEY_P:
keys[KEY_PAUSE] = value; keys[KEY_PAUSE] = value;
break; break;
case ALLEGRO_KEY_LSHIFT:
case ALLEGRO_KEY_RSHIFT:
keys[KEY_SHIFT] = value;
break;
case ALLEGRO_KEY_Z:
keys[KEY_ZOOM] = value;
break;
default: default:
break; break;
} }

View File

@@ -28,7 +28,9 @@ enum {
KEY_RESET = 0x4, KEY_RESET = 0x4,
KEY_FULLSCREEN = 0x5, KEY_FULLSCREEN = 0x5,
KEY_PAUSE = 0x6, KEY_PAUSE = 0x6,
KEY_MAX = 0x7 KEY_ZOOM = 0x7,
KEY_SHIFT = 0x8,
KEY_MAX = 0x9
}; };
/** /**

View File

@@ -39,6 +39,16 @@
# define WINDOW_HEIGHT 600 # define WINDOW_HEIGHT 600
#endif #endif
#ifndef ZOOM_MIN
# define ZOOM_MIN 0.25f
#endif
#ifndef ZOOM_MAX
# define ZOOM_MAX 4.0f
#endif
#ifndef ZOOM_STEP
# define ZOOM_STEP 0.1f
#endif
#include <math.h> #include <math.h>
#ifndef M_PI #ifndef M_PI
# define M_PI 3.14159265f # define M_PI 3.14159265f

View File

@@ -39,6 +39,8 @@ const char *help =
"I - show/hide simulation information\n" "I - show/hide simulation information\n"
"H - show/hide this help information\n" "H - show/hide this help information\n"
"F - toggle fullscreen\n" "F - toggle fullscreen\n"
"Z - zoom in\n"
"SHIFT+Z - zoom out\n"
"Q/ESC - quit"; "Q/ESC - quit";
const char *info_format = const char *info_format =
@@ -51,6 +53,7 @@ const char *info_format =
int main() { int main() {
char title[32]; char title[32];
float zoom = 1.0f;
sprintf(title, "SpaceShipSim v%s", VERSION); sprintf(title, "SpaceShipSim v%s", VERSION);
puts(title); puts(title);
@@ -109,6 +112,7 @@ int main() {
int paused = 0; int paused = 0;
int old_paused = 0; int old_paused = 0;
int just_toggled_fullscreen = 0; int just_toggled_fullscreen = 0;
int zoom_pressed = 0;
while(run) while(run)
{ {
handle_event(); handle_event();
@@ -146,8 +150,39 @@ int main() {
just_toggled_fullscreen = 0; just_toggled_fullscreen = 0;
} }
if(key_is_down(KEY_SHIFT) && key_is_down(KEY_ZOOM) && !zoom_pressed)
{
zoom -= ZOOM_STEP;
if(zoom < ZOOM_MIN)
zoom = ZOOM_MIN;
zoom_pressed = 1;
}
else if(key_is_down(KEY_ZOOM) && !zoom_pressed)
{
zoom += ZOOM_STEP;
if(zoom > ZOOM_MAX)
zoom = ZOOM_MAX;
zoom_pressed = 1;
}
else if(!key_is_down(KEY_ZOOM) && zoom_pressed)
{
zoom_pressed = 0;
}
al_clear_to_color(al_map_rgb(0, 0, 0)); al_clear_to_color(al_map_rgb(0, 0, 0));
ALLEGRO_TRANSFORM transform;
al_identity_transform(&transform);
al_scale_transform(&transform, zoom, zoom);
al_translate_transform(&transform, (WINDOW_WIDTH / 2.0f) * (1.0f - 1.0f / zoom),
(WINDOW_HEIGHT / 2.0f) * (1.0f - 1.0f / zoom));
al_use_transform(&transform);
ship_draw(&ship); ship_draw(&ship);
al_identity_transform(&transform);
al_use_transform(&transform);
if(show_info) if(show_info)
{ {
char info[256]; char info[256];