add args to cursor clip set, stop rounding screen size to even number

This commit is contained in:
jacob 2024-03-15 17:35:42 -05:00
parent 744a6f8d65
commit 8b5b32ba76
5 changed files with 38 additions and 38 deletions

View File

@ -5,6 +5,7 @@
* system. */ * system. */
#define RESOURCES_EMBEDDED !(DEVELOPER) #define RESOURCES_EMBEDDED !(DEVELOPER)
#define ASPECT_RATIO (16.0 / 9.0)
#define PIXELS_PER_UNIT 256 #define PIXELS_PER_UNIT 256
#define GAME_FPS 30 #define GAME_FPS 30

View File

@ -468,8 +468,8 @@ INTERNAL void game_update(void)
ent->camera_target_xform.og = target_pos; ent->camera_target_xform.og = target_pos;
#else #else
/* "Look" style camera */ /* "Look" style camera */
f32 ratio_x = 0.33f;
f32 ratio_y = 0.33f; f32 ratio_y = 0.33f;
f32 ratio_x = 0.33f;
struct v2 camera_focus_dir = v2_mul_v2(follow->player_aim, V2(ratio_x, ratio_y)); struct v2 camera_focus_dir = v2_mul_v2(follow->player_aim, V2(ratio_x, ratio_y));
struct v2 camera_focus_pos = v2_add(follow->world_xform.og, camera_focus_dir); struct v2 camera_focus_pos = v2_add(follow->world_xform.og, camera_focus_dir);
ent->camera_target_xform.og = camera_focus_pos; ent->camera_target_xform.og = camera_focus_pos;

View File

@ -293,8 +293,8 @@ u64 sys_window_get_internal_handle(struct sys_window *sys_window);
void sys_window_cursor_set_pos(struct sys_window *sys_window, struct v2 pos); void sys_window_cursor_set_pos(struct sys_window *sys_window, struct v2 pos);
void sys_window_cursor_show(struct sys_window *sys_window); void sys_window_cursor_show(struct sys_window *sys_window);
void sys_window_cursor_hide(struct sys_window *sys_window); void sys_window_cursor_hide(struct sys_window *sys_window);
void sys_window_cursor_enable_keep_in_window(struct sys_window *sys_window); void sys_window_cursor_enable_clip(struct sys_window *sys_window, struct rect bounds);
void sys_window_cursor_disable_keep_in_window(struct sys_window *sys_window); void sys_window_cursor_disable_clip(struct sys_window *sys_window);
/* ========================== * /* ========================== *
* Mutex * Mutex

View File

@ -37,8 +37,8 @@ enum win32_window_cursor_set_flag {
WIN32_WINDOW_CURSOR_SET_FLAG_POSITION = 0x1, WIN32_WINDOW_CURSOR_SET_FLAG_POSITION = 0x1,
WIN32_WINDOW_CURSOR_SET_FLAG_HIDE = 0x2, WIN32_WINDOW_CURSOR_SET_FLAG_HIDE = 0x2,
WIN32_WINDOW_CURSOR_SET_FLAG_SHOW = 0x4, WIN32_WINDOW_CURSOR_SET_FLAG_SHOW = 0x4,
WIN32_WINDOW_CURSOR_SET_FLAG_ENABLE_KEEP_IN_WINDOW = 0X8, WIN32_WINDOW_CURSOR_SET_FLAG_ENABLE_CLIP = 0X8,
WIN32_WINDOW_CURSOR_SET_FLAG_DISABLE_KEEP_IN_WINDOW = 0X10 WIN32_WINDOW_CURSOR_SET_FLAG_DISABLE_CLIP = 0X10
}; };
struct win32_window { struct win32_window {
@ -61,6 +61,7 @@ struct win32_window {
u32 cursor_set_flags; u32 cursor_set_flags;
struct v2 cursor_set_position; struct v2 cursor_set_position;
struct rect cursor_clip_bounds;
b32 event_thread_shutdown; b32 event_thread_shutdown;
struct sys_thread event_thread; struct sys_thread event_thread;
@ -565,17 +566,6 @@ INTERNAL void window_thread_entry_point(void *arg)
MSG msg = {0}; MSG msg = {0};
GetMessage(&msg, 0, 0, 0); GetMessage(&msg, 0, 0, 0);
switch (msg.message) {
case WM_QUIT: {
win32_window_process_event(window, (struct sys_event) { .kind = SYS_EVENT_KIND_QUIT });
} break;
default: {
TranslateMessage(&msg);
DispatchMessage(&msg);
} break;
}
/* Update cursor */ /* Update cursor */
if (GetFocus() == window->hwnd) { if (GetFocus() == window->hwnd) {
u32 cursor_flags = window->cursor_set_flags; u32 cursor_flags = window->cursor_set_flags;
@ -599,23 +589,38 @@ INTERNAL void window_thread_entry_point(void *arg)
} }
/* Stop keep in window */ /* Stop keep in window */
if (cursor_flags & WIN32_WINDOW_CURSOR_SET_FLAG_DISABLE_KEEP_IN_WINDOW) { if (cursor_flags & WIN32_WINDOW_CURSOR_SET_FLAG_DISABLE_CLIP) {
ClipCursor(NULL); ClipCursor(NULL);
} }
/* Start keep in window */ /* Clip cursor in window window */
if (cursor_flags & WIN32_WINDOW_CURSOR_SET_FLAG_ENABLE_KEEP_IN_WINDOW) { if (cursor_flags & WIN32_WINDOW_CURSOR_SET_FLAG_ENABLE_CLIP) {
i32 left = window->x + math_round(window->cursor_clip_bounds.x);
i32 right = left + math_round(window->cursor_clip_bounds.width);
i32 top = window->y + math_round(window->cursor_clip_bounds.y);
i32 bottom = top + math_round(window->cursor_clip_bounds.height);
RECT clip = { RECT clip = {
.left = window->x, .left = clamp_i32(left, window->x, window->x + window->width),
.right = window->x + window->width, .right = clamp_i32(right, window->x, window->x + window->width),
.top = window->y, .top = clamp_i32(top, window->y, window->y + window->height),
.bottom = window->y + window->height .bottom = clamp_i32(bottom, window->y, window->y + window->height)
}; };
ClipCursor(&clip); ClipCursor(&clip);
} }
window->cursor_set_flags = 0; window->cursor_set_flags = 0;
} }
switch (msg.message) {
case WM_QUIT: {
win32_window_process_event(window, (struct sys_event) { .kind = SYS_EVENT_KIND_QUIT });
} break;
default: {
TranslateMessage(&msg);
DispatchMessage(&msg);
} break;
}
} }
@ -1115,17 +1120,18 @@ void sys_window_cursor_hide(struct sys_window *sys_window)
win32_window_wake(window); win32_window_wake(window);
} }
void sys_window_cursor_enable_keep_in_window(struct sys_window *sys_window) void sys_window_cursor_enable_clip(struct sys_window *sys_window, struct rect bounds)
{ {
struct win32_window *window = (struct win32_window *)sys_window->handle; struct win32_window *window = (struct win32_window *)sys_window->handle;
window->cursor_set_flags |= WIN32_WINDOW_CURSOR_SET_FLAG_ENABLE_KEEP_IN_WINDOW; window->cursor_clip_bounds = bounds;
window->cursor_set_flags |= WIN32_WINDOW_CURSOR_SET_FLAG_ENABLE_CLIP;
win32_window_wake(window); win32_window_wake(window);
} }
void sys_window_cursor_disable_keep_in_window(struct sys_window *sys_window) void sys_window_cursor_disable_clip(struct sys_window *sys_window)
{ {
struct win32_window *window = (struct win32_window *)sys_window->handle; struct win32_window *window = (struct win32_window *)sys_window->handle;
window->cursor_set_flags |= WIN32_WINDOW_CURSOR_SET_FLAG_DISABLE_KEEP_IN_WINDOW; window->cursor_set_flags |= WIN32_WINDOW_CURSOR_SET_FLAG_DISABLE_CLIP;
win32_window_wake(window); win32_window_wake(window);
} }

View File

@ -343,12 +343,6 @@ INTERNAL void user_update(void)
/* Get screen dimensions */ /* Get screen dimensions */
L.screen_size = sys_window_get_size(L.window); L.screen_size = sys_window_get_size(L.window);
/* Make screen_size an even number */
L.screen_size = V2(math_round(L.screen_size.x), math_round(L.screen_size.y));
L.screen_size = V2(
math_round(L.screen_size.x) % 2 == 0 ? L.screen_size.x : L.screen_size.x + 1,
math_round(L.screen_size.y) % 2 == 0 ? L.screen_size.y : L.screen_size.y + 1
);
L.screen_center = v2_mul(L.screen_size, 0.5); L.screen_center = v2_mul(L.screen_size, 0.5);
/* ========================== * /* ========================== *
@ -533,7 +527,7 @@ INTERNAL void user_update(void)
} }
if (L.debug_camera) { if (L.debug_camera) {
sys_window_cursor_disable_keep_in_window(L.window); sys_window_cursor_disable_clip(L.window);
sys_window_cursor_show(L.window); sys_window_cursor_show(L.window);
/* Pan view */ /* Pan view */
@ -575,7 +569,7 @@ INTERNAL void user_update(void)
} else { } else {
/* Keep cursor invisible and in screen */ /* Keep cursor invisible and in screen */
sys_window_cursor_hide(L.window); sys_window_cursor_hide(L.window);
sys_window_cursor_enable_keep_in_window(L.window); sys_window_cursor_enable_clip(L.window, RECT(0, 0, L.screen_size.x, L.screen_size.y));
struct v2 center = active_camera->world_xform.og; struct v2 center = active_camera->world_xform.og;
f32 rot = xform_get_rotation(active_camera->world_xform); f32 rot = xform_get_rotation(active_camera->world_xform);
@ -852,12 +846,11 @@ INTERNAL void user_update(void)
} }
/* Queue cmd */ /* Queue cmd */
struct game_cmd movement_cmd = (struct game_cmd) { queue_game_cmd(&cmd_list, (struct game_cmd) {
.kind = GAME_CMD_KIND_PLAYER_MOVE, .kind = GAME_CMD_KIND_PLAYER_MOVE,
.move_dir = input_move_dir, .move_dir = input_move_dir,
.aim = input_aim .aim = input_aim
}; });
queue_game_cmd(&cmd_list, movement_cmd);
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */