From 70fac5bd724fbe023f85010e9840d3555346e98c Mon Sep 17 00:00:00 2001 From: Sven Balzer <4653051+Kyuusokuna@users.noreply.github.com> Date: Sun, 2 Aug 2026 10:57:23 +0200 Subject: [PATCH] fix clamping character movement to map boundaries --- src/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index fdd3f66..0059ed6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1446,10 +1446,10 @@ static void update_state_game() { if (!player.is_moving && (queued_movement || keyboard_state[SDL_SCANCODE_W] || keyboard_state[SDL_SCANCODE_A] || keyboard_state[SDL_SCANCODE_S] || keyboard_state[SDL_SCANCODE_D])) { switch (queued_movement_direction) { - case DIR_UP: { player.target_position = player.position + ivec2( 0, 1); if (player.target_position != player.position) player.is_moving = true; } break; - case DIR_LEFT: { player.target_position = player.position + ivec2(-1, 0); if (player.target_position != player.position) player.is_moving = true; } break; - case DIR_DOWN: { player.target_position = player.position + ivec2( 0, -1); if (player.target_position != player.position) player.is_moving = true; } break; - case DIR_RIGHT: { player.target_position = player.position + ivec2( 1, 0); if (player.target_position != player.position) player.is_moving = true; } break; + case DIR_UP: { player.target_position = clamp(ivec2(0, 0), player.position + ivec2( 0, 1), current_map.size - ivec2(2, 2)); if (player.target_position != player.position) player.is_moving = true; } break; + case DIR_LEFT: { player.target_position = clamp(ivec2(0, 0), player.position + ivec2(-1, 0), current_map.size - ivec2(2, 2)); if (player.target_position != player.position) player.is_moving = true; } break; + case DIR_DOWN: { player.target_position = clamp(ivec2(0, 0), player.position + ivec2( 0, -1), current_map.size - ivec2(2, 2)); if (player.target_position != player.position) player.is_moving = true; } break; + case DIR_RIGHT: { player.target_position = clamp(ivec2(0, 0), player.position + ivec2( 1, 0), current_map.size - ivec2(2, 2)); if (player.target_position != player.position) player.is_moving = true; } break; } } queued_movement = false;