#ifndef CAMERA_H_
#define CAMERA_H_
+#include <stdbool.h>
+
#include "color.h"
#include "game/sprite_font.h"
-#include "math/point.h"
+#include "math/vec.h"
#include "math/rect.h"
#include "math/triangle.h"
-typedef struct Camera Camera;
+typedef struct {
+ bool debug_mode;
+ bool blackwhite_mode;
+ Vec2f position;
+ float scale;
+ SDL_Renderer *renderer;
+ Sprite_font *font;
+} Camera;
-Camera *create_camera(SDL_Renderer *renderer,
- Sprite_font *font);
-void destroy_camera(Camera *camera);
+Camera create_camera(SDL_Renderer *renderer,
+ Sprite_font *font);
-int camera_clear_background(Camera *camera,
+int camera_clear_background(const Camera *camera,
Color color);
-int camera_fill_rect(Camera *camera,
+int camera_fill_rect(const Camera *camera,
Rect rect,
Color color);
-int camera_draw_rect(Camera * camera,
+int camera_draw_rect(const Camera *camera,
Rect rect,
Color color);
+int camera_draw_rect_screen(const Camera *camera,
+ Rect rect,
+ Color color);
+
+int camera_draw_thicc_rect_screen(const Camera *camera,
+ Rect rect,
+ Color color,
+ float thiccness);
+
+int camera_draw_line(const Camera *camera,
+ Vec2f begin, Vec2f end,
+ Color color);
+
int camera_draw_triangle(Camera *camera,
Triangle t,
Color color);
-int camera_fill_triangle(Camera *camera,
+int camera_fill_triangle(const Camera *camera,
Triangle t,
Color color);
-int camera_render_text(Camera *camera,
+int camera_render_text(const Camera *camera,
const char *text,
- Vec size,
+ Vec2f size,
Color color,
- Vec position);
+ Vec2f position);
+
+int camera_render_text_screen(const Camera *camera,
+ const char *text,
+ Vec2f size,
+ Color color,
+ Vec2f position);
-int camera_render_debug_text(Camera *camera,
+Rect camera_text_boundary_box(const Camera *camera,
+ Vec2f position,
+ Vec2f scale,
+ const char *text);
+
+int camera_render_debug_text(const Camera *camera,
const char *text,
- Vec position);
+ Vec2f position);
-int camera_render_debug_rect(Camera *camera,
+int camera_render_debug_rect(const Camera *camera,
Rect rect,
Color color);
-void camera_center_at(Camera *camera, Point position);
+void camera_center_at(Camera *camera, Vec2f position);
void camera_scale(Camera *came, float scale);
void camera_toggle_debug_mode(Camera *camera);
void camera_disable_debug_mode(Camera *camera);
-void camera_toggle_blackwhite_mode(Camera *camera);
-
-int camera_is_point_visible(const Camera *camera, Point p);
+int camera_is_point_visible(const Camera *camera, Vec2f p);
int camera_is_text_visible(const Camera *camera,
- Vec size,
- Vec position,
+ Vec2f size,
+ Vec2f position,
const char *text);
Rect camera_view_port(const Camera *camera);
-Vec camera_map_screen(const Camera *camera,
+Rect camera_view_port_screen(const Camera *camera);
+
+Vec2f camera_map_screen(const Camera *camera,
Sint32 x, Sint32 y);
+Vec2f camera_point(const Camera *camera, const Vec2f p);
+Rect camera_rect(const Camera *camera, const Rect rect);
+
+int camera_fill_rect_screen(const Camera *camera,
+ Rect rect,
+ Color color);
+
+const Sprite_font *camera_font(const Camera *camera);
+
#endif // CAMERA_H_