Initial commit
This commit is contained in:
37
src/engine/camera.h
Normal file
37
src/engine/camera.h
Normal file
@@ -0,0 +1,37 @@
|
||||
#ifndef JNR_CAMERA_H
|
||||
#define JNR_CAMERA_H
|
||||
|
||||
#include "util/vec2.h"
|
||||
#include "config.h"
|
||||
|
||||
typedef struct Camera {
|
||||
Vec2 pos; /* world position of top-left corner */
|
||||
Vec2 viewport; /* screen dimensions in game pixels */
|
||||
Vec2 bounds_min; /* level bounds (top-left) */
|
||||
Vec2 bounds_max; /* level bounds (bottom-right) */
|
||||
float smoothing; /* higher = slower follow (0=instant) */
|
||||
Vec2 deadzone; /* half-size of deadzone rect */
|
||||
Vec2 look_ahead; /* pixels to lead in move direction */
|
||||
/* Screen shake */
|
||||
float shake_timer; /* remaining shake time */
|
||||
float shake_intensity; /* current max pixel offset */
|
||||
Vec2 shake_offset; /* current frame shake displacement */
|
||||
} Camera;
|
||||
|
||||
void camera_init(Camera *c, float vp_w, float vp_h);
|
||||
void camera_set_bounds(Camera *c, float world_w, float world_h);
|
||||
void camera_follow(Camera *c, Vec2 target, Vec2 velocity, float dt);
|
||||
|
||||
/* Convert world position to screen position */
|
||||
Vec2 camera_world_to_screen(const Camera *c, Vec2 world_pos);
|
||||
|
||||
/* Convert screen position to world position */
|
||||
Vec2 camera_screen_to_world(const Camera *c, Vec2 screen_pos);
|
||||
|
||||
/* Trigger screen shake (intensity in pixels, duration in seconds) */
|
||||
void camera_shake(Camera *c, float intensity, float duration);
|
||||
|
||||
/* Update shake (call once per frame, after camera_follow) */
|
||||
void camera_update_shake(Camera *c, float dt);
|
||||
|
||||
#endif /* JNR_CAMERA_H */
|
||||
Reference in New Issue
Block a user