diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2024-01-28 03:01:13 +0100 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2024-01-28 15:17:49 +0100 |
| commit | fd53c7da8c5f2b79b87f624e313ff508072361ad (patch) | |
| tree | db569413cd3d42034a22368a7980aa99d7d55235 /src/camera | |
| parent | e49e3073c67af785447ddb0ecbdc521b68cf3ea9 (diff) | |
| download | jancity-fd53c7da8c5f2b79b87f624e313ff508072361ad.tar.gz | |
Big rushed update
Diffstat (limited to 'src/camera')
| -rw-r--r-- | src/camera/inc/camera.h | 3 | ||||
| -rw-r--r-- | src/camera/src/camera.c | 25 | ||||
| -rw-r--r-- | src/camera/src/mouse.c | 52 | ||||
| -rw-r--r-- | src/camera/src/pad.c | 2 |
4 files changed, 57 insertions, 25 deletions
diff --git a/src/camera/inc/camera.h b/src/camera/inc/camera.h index 27efe2e..96a64d5 100644 --- a/src/camera/inc/camera.h +++ b/src/camera/inc/camera.h @@ -18,7 +18,7 @@ struct camera long w, h; } dim; - int x, y, x_speed, y_speed; + long x, y, x_speed, y_speed; unsigned xt, yt; bool pan; @@ -28,6 +28,7 @@ struct camera enum { CURSOR_STATE_IDLE, + CURSOR_STATE_HOVERING, CURSOR_STATE_PRESSED } state; struct diff --git a/src/camera/src/camera.c b/src/camera/src/camera.c index 9d3d062..5e658a5 100644 --- a/src/camera/src/camera.c +++ b/src/camera/src/camera.c @@ -55,9 +55,13 @@ int cursor_render(const struct cursor *const c) case CURSOR_STATE_IDLE: break; - case CURSOR_STATE_PRESSED: + case CURSOR_STATE_HOVERING: s->u += CAMERA_CURSOR_WIDTH; break; + + case CURSOR_STATE_PRESSED: + s->u += CAMERA_CURSOR_WIDTH * 2; + break; } const int ret = sprite_sort(s); @@ -89,23 +93,24 @@ void cursor_init(struct cursor *const c) void camera_update_pos(struct camera *const cam) { - const int x = cam->x + cam->x_speed; + const struct camera_dim *const d = &cam->dim; + + if (!d->w || !d->h) + return; - cam->x = x; + cam->x += cam->x_speed; if (cam->x > 0) cam->x = 0; - else if (cam->x < -cam->dim.w) - cam->x = -cam->dim.w; - - const int y = cam->y + cam->y_speed; + else if (cam->x < -d->w + screen_w) + cam->x = -d->w + screen_w; - cam->y = y; + cam->y += cam->y_speed; if (cam->y > 0) cam->y = 0; - else if (cam->y < -cam->dim.h) - cam->y = -cam->dim.h; + else if (cam->y < -d->h + screen_h) + cam->y = -d->h + screen_h; } bool camera_translate(const struct camera *const cam, const struct util_rect *const dim, diff --git a/src/camera/src/mouse.c b/src/camera/src/mouse.c index 30fedb9..e7b144b 100644 --- a/src/camera/src/mouse.c +++ b/src/camera/src/mouse.c @@ -13,9 +13,14 @@ static void cursor_update(struct cursor *const c, const struct mouse *const m) c->x = m->x; c->y = m->y; - c->state = mouse_pressed(m, MOUSE_BUTTON_LEFT) || - mouse_pressed(m, MOUSE_BUTTON_RIGHT) ? - CURSOR_STATE_PRESSED: CURSOR_STATE_IDLE; + + if (mouse_pressed(m, MOUSE_BUTTON_LEFT) + || mouse_pressed(m, MOUSE_BUTTON_RIGHT)) + c->state = CURSOR_STATE_PRESSED; + else if (m->hovering) + c->state = CURSOR_STATE_HOVERING; + else + c->state = CURSOR_STATE_IDLE; } static void update_speed(struct camera *const cam, const struct mouse *const m) @@ -24,34 +29,55 @@ static void update_speed(struct camera *const cam, const struct mouse *const m) { MAX_SPEED = 10, STEP = 1, - THRESHOLD_X = CAMERA_CURSOR_WIDTH / 2, - THRESHOLD_Y = CAMERA_CURSOR_HEIGHT / 2 + T_STEP = 10, + THRESHOLD_X = CAMERA_CURSOR_WIDTH, + THRESHOLD_Y = CAMERA_CURSOR_HEIGHT }; const struct cursor *const c = &cam->cursor; if (c->x >= screen_w - THRESHOLD_X) { - if (cam->x_speed - STEP > -MAX_SPEED) - cam->x_speed -= STEP; + if (++cam->xt >= T_STEP) + { + cam->xt = 0; + + if (cam->x_speed - STEP > -MAX_SPEED) + cam->x_speed -= STEP; + } } else if (c->x < THRESHOLD_X) { - if (cam->x_speed + STEP < MAX_SPEED) - cam->x_speed += STEP; + if (++cam->xt >= T_STEP) + { + cam->xt = 0; + + if (cam->x_speed + STEP < MAX_SPEED) + cam->x_speed += STEP; + } } else cam->x_speed = 0; if (c->y >= screen_h - THRESHOLD_Y) { - if (cam->y_speed - STEP > -MAX_SPEED) - cam->y_speed -= STEP; + if (++cam->yt >= T_STEP) + { + cam->yt = 0; + + if (cam->y_speed - STEP > -MAX_SPEED) + cam->y_speed -= STEP; + } } else if (c->y < THRESHOLD_Y) { - if (cam->y_speed + STEP < MAX_SPEED) - cam->y_speed += STEP; + if (++cam->yt >= T_STEP) + { + cam->yt = 0; + + if (cam->y_speed + STEP < MAX_SPEED) + cam->y_speed += STEP; + } } else cam->y_speed = 0; diff --git a/src/camera/src/pad.c b/src/camera/src/pad.c index f3af527..b5dac1a 100644 --- a/src/camera/src/pad.c +++ b/src/camera/src/pad.c @@ -48,7 +48,7 @@ static void update_speed(struct camera *const cam, { MAX_SPEED = 10, STEP = 1, - T_STEP = 3 + T_STEP = 2 }; const struct cursor *const c = &cam->cursor; |
