aboutsummaryrefslogtreecommitdiff
path: root/src/camera
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2024-01-28 03:01:13 +0100
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2024-01-28 15:17:49 +0100
commitfd53c7da8c5f2b79b87f624e313ff508072361ad (patch)
treedb569413cd3d42034a22368a7980aa99d7d55235 /src/camera
parente49e3073c67af785447ddb0ecbdc521b68cf3ea9 (diff)
downloadjancity-fd53c7da8c5f2b79b87f624e313ff508072361ad.tar.gz
Big rushed update
Diffstat (limited to 'src/camera')
-rw-r--r--src/camera/inc/camera.h3
-rw-r--r--src/camera/src/camera.c25
-rw-r--r--src/camera/src/mouse.c52
-rw-r--r--src/camera/src/pad.c2
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;