#pragma once

#include "player.h"
#include "types.h"


#ifdef __cplusplus
extern "C" {
#endif


typedef struct _App App;

typedef struct {
	App              *super;
	Component_Player *player;

	Box2   screen;       // Screen box, e.g. 1280x720 origin (0,0)
	Box2   cam, *target; // Current & target camera
	double speed;        // Fraction of distance between cam & target to be covered in 1 sec
} System_Camera;

System_Camera *camera_NewSystem(App *super);
void           camera_DeleteSystem(System_Camera *sys);

void camera_AddEntity(System_Camera *sys, Entity *e);
void camera_DeleteEntity(System_Camera *sys, uintptr_t id);

void camera_Advance(System_Camera *sys, Duration deltaTime);

Vec2 camera_TransformVec2(System_Camera *sys, Vec2 world);     // Transform a Point, accounted for offset
Box2 camera_TransformBox2(System_Camera *sys, Box2 world);     // Transform a Rect, accounted for offset & zoom
Vec2 camera_TransformSize(System_Camera *sys, Vec2 worldSize); // Transform a certain size, accounted for only zoom


#ifdef __cplusplus
}
#endif