131 lines
2.9 KiB
C
131 lines
2.9 KiB
C
#include "main.h"
|
|
|
|
extern struct Resources g_resources = { 0 };
|
|
|
|
struct WindowTransform {
|
|
Vector2 offset;
|
|
float scale;
|
|
};
|
|
|
|
static void begin_window_scaling(struct WindowTransform *transform, Vector2 virtual_screen_size)
|
|
{
|
|
Vector2 screen_size = {
|
|
GetScreenWidth(),
|
|
GetScreenHeight()
|
|
};
|
|
|
|
float scale = MIN(
|
|
screen_size.x / virtual_screen_size.x,
|
|
screen_size.y / virtual_screen_size.y
|
|
);
|
|
transform->scale = scale;
|
|
|
|
Vector2 filler_size = Vector2Scale(Vector2Subtract(screen_size, Vector2Scale(virtual_screen_size, transform->scale)), 0.5);
|
|
transform->offset = filler_size;
|
|
|
|
rlPushMatrix();
|
|
rlTranslatef(
|
|
filler_size.x,
|
|
filler_size.y,
|
|
0
|
|
);
|
|
rlScalef(scale, scale, 1);
|
|
}
|
|
|
|
static void end_window_scaling(struct WindowTransform *transform, Color color)
|
|
{
|
|
rlPopMatrix();
|
|
|
|
Vector2 filler_size = transform->offset;
|
|
|
|
DrawRectangleRec(
|
|
(struct Rectangle){
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = GetScreenWidth(),
|
|
.height = filler_size.y
|
|
},
|
|
color
|
|
);
|
|
|
|
DrawRectangleRec(
|
|
(struct Rectangle){
|
|
.x = 0,
|
|
.y = GetScreenHeight() - filler_size.y,
|
|
.width = GetScreenWidth(),
|
|
.height = filler_size.y
|
|
},
|
|
color
|
|
);
|
|
|
|
DrawRectangleRec(
|
|
(struct Rectangle){
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = filler_size.x,
|
|
.height = GetScreenHeight()
|
|
},
|
|
color
|
|
);
|
|
|
|
DrawRectangleRec(
|
|
(struct Rectangle){
|
|
.x = GetScreenWidth() - filler_size.x,
|
|
.y = 0,
|
|
.width = filler_size.x,
|
|
.height = GetScreenHeight()
|
|
},
|
|
color
|
|
);
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
InitWindow(800, 600, "gaem");
|
|
InitAudioDevice();
|
|
SetWindowState(FLAG_WINDOW_RESIZABLE);
|
|
SetTargetFPS(60);
|
|
|
|
resources_init(&g_resources);
|
|
|
|
struct Game game = { 0 };
|
|
game_init(&game);
|
|
|
|
game_debug_init();
|
|
|
|
while (!WindowShouldClose())
|
|
{
|
|
TracyCFrameMark;
|
|
|
|
// TODO: Can this be called every frame? Will it impact performance? Needs research.
|
|
SetWindowMinSize(game.canvas_size.x, game.canvas_size.y);
|
|
|
|
float dt = GetFrameTime();
|
|
BeginDrawing();
|
|
ClearBackground(RAYWHITE);
|
|
|
|
struct WindowTransform transform = { 0 };
|
|
begin_window_scaling(&transform, game.canvas_size);
|
|
Vector2 mouse = GetMousePosition();
|
|
mouse = Vector2Subtract(mouse, transform.offset);
|
|
mouse = Vector2Scale(mouse, 1/transform.scale);
|
|
|
|
game.input = (struct Input){
|
|
.dt = dt,
|
|
.mouse = mouse
|
|
};
|
|
game_tick(&game);
|
|
end_window_scaling(&transform, BLACK);
|
|
|
|
game_debug_show(&game);
|
|
|
|
EndDrawing();
|
|
}
|
|
|
|
game_free(&game);
|
|
game_debug_deinit();
|
|
CloseWindow();
|
|
|
|
return 0;
|
|
}
|