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:
keys[KEY_PAUSE] = value;
break;
case ALLEGRO_KEY_LSHIFT:
case ALLEGRO_KEY_RSHIFT:
keys[KEY_SHIFT] = value;
break;
case ALLEGRO_KEY_Z:
keys[KEY_ZOOM] = value;
break;
default:
break;
}

View File

@@ -28,7 +28,9 @@ enum {
KEY_RESET = 0x4,
KEY_FULLSCREEN = 0x5,
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
#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>
#ifndef M_PI
# define M_PI 3.14159265f

View File

@@ -39,6 +39,8 @@ const char *help =
"I - show/hide simulation information\n"
"H - show/hide this help information\n"
"F - toggle fullscreen\n"
"Z - zoom in\n"
"SHIFT+Z - zoom out\n"
"Q/ESC - quit";
const char *info_format =
@@ -51,6 +53,7 @@ const char *info_format =
int main() {
char title[32];
float zoom = 1.0f;
sprintf(title, "SpaceShipSim v%s", VERSION);
puts(title);
@@ -109,6 +112,7 @@ int main() {
int paused = 0;
int old_paused = 0;
int just_toggled_fullscreen = 0;
int zoom_pressed = 0;
while(run)
{
handle_event();
@@ -146,8 +150,39 @@ int main() {
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));
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);
al_identity_transform(&transform);
al_use_transform(&transform);
if(show_info)
{
char info[256];