From: Randy McShandy Date: Sat, 15 Jun 2024 19:52:41 +0000 (-0500) Subject: FPS independent movement, orb color transition, bigger map X-Git-Url: http://git.mcshandy.xyz/gitweb.cgi?a=commitdiff_plain;h=1300e591ffe8450a59e4034e86f3b7a09d632bdc;p=barrow_crawler FPS independent movement, orb color transition, bigger map --- diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT new file mode 100644 index 0000000..b61a4c6 --- /dev/null +++ b/CHANGELOG.TXT @@ -0,0 +1,7 @@ +0.0.1 + - First look release with Windows build + +0.0.2 + - Transition to FPS-independent movement + - Nicer orb color transitions + - Increase generated barrow size diff --git a/README.TXT b/README.TXT new file mode 100644 index 0000000..da7fb62 --- /dev/null +++ b/README.TXT @@ -0,0 +1,7 @@ +This is an early prototype. + +wasd/hjkl movement via tank controls. +1/2/3 swap orb color. +m displays debug info and the active barrow map. + +If the central chamber you begin in has no obvious ways out, restart the game and generate a new barrow. Or check with m to verify the rest of the map is inaccessible. diff --git a/build_win.sh b/build_win.sh index 9d6a2bc..aa12d56 100755 --- a/build_win.sh +++ b/build_win.sh @@ -27,7 +27,8 @@ cp -r src/shaders $OUTDIR/src/ cp -r assets $OUTDIR/ cp LICENSES.TXT $OUTDIR/ cp README.TXT $OUTDIR/ +cp CHANGELOG.TXT $OUTDIR/ # package things up zip -r zipfile $OUTDIR/* -mv zipfile.zip ./release/barrow_0.0.1_win.zip +mv zipfile.zip ./release/barrow_0.0.2_win.zip diff --git a/src/main.c b/src/main.c index ec96a38..dd18531 100755 --- a/src/main.c +++ b/src/main.c @@ -19,7 +19,7 @@ int main(int argc, char** argv) #define ENABLE_BARROWGEN 1 #if ENABLE_BARROWGEN barrow.max_iterations *= 1; - IVec2 grid_size = {.x = GRID_X*1.5, .y = GRID_Y * 1.5}; + IVec2 grid_size = {.x = GRID_X*2.0, .y = GRID_Y * 2.0}; GeneratorArgs gargs = { .worker_count = 8, diff --git a/src/render_raylib.c b/src/render_raylib.c index dac0778..429fc82 100644 --- a/src/render_raylib.c +++ b/src/render_raylib.c @@ -64,17 +64,18 @@ Vector3 player_rotation; Vector3 player_angles; Vector3 map_center; -float forward_speed = 0.015f; +float forward_speed = 0.015f; float forward_speed_decay = 0.05f; -float rotate_speed = 0.8f; -float rotate_speed_decay = 0.10f; +float rotate_speed = 0.8f; +float rotate_speed_decay = 0.10f; Vector3 vec3_unit = {1.0f, 1.0f, 1.0f}; Vector3 vec3_010 = {0.0f, 1.0f, 0.0f}; -Vector3 vec3_up = {0.0f, 1.0f, 0.0f}; +Vector3 vec3_up = {0.0f, 1.0f, 0.0f}; Vector3 vec3_down = {0.0f, -1.0f, 0.0f}; Color orb_color = BLUE; +Color orb_target_color = BLUE; Vector4 orb_normal_color; float orb_intensity = 1.0f; /* TODO: normalized distance from center, but lighting shader already has this. */ Vector3 orb_directionality = {1.0f, 1.0f, 1.0f}; @@ -87,6 +88,18 @@ typedef void(*controlfunc)(); renderfunc renderfuncs[MAX_RENDERFUNCS]; controlfunc controlfuncs[MAX_RENDERFUNCS]; +Color ColorLerp(Color c1, Color c2, float amount) +{ + Color new_color; + + new_color.r = Lerp(c1.r, c2.r, amount); + new_color.g = Lerp(c1.g, c2.g, amount); + new_color.b = Lerp(c1.b, c2.b, amount); + new_color.a = Lerp(c1.a, c2.a, amount); + + return new_color; +} + /* Render the regular game mode. NOTE: Only call inside a Raylib BeginDrawing() block! */ @@ -126,6 +139,7 @@ void drawing_game_mode() DrawText(TextFormat("tgt x %f\ntgt y %f\ntgt z %f", cam.target.x, cam.target.y, cam.target.z), 0, 128+64, 16, GREEN); DrawText(TextFormat("rot x %f\nrot y %f\nrot z %f", player_angles.x, player_angles.y, player_angles.z), 0, 128+(64*2), 16, GREEN); DrawText(TextFormat("ray hit %d\nlength %f", player_collision.hit, player_collision.distance), 0, 128+(64*3), 16, GREEN); + DrawText(TextFormat("vel x %f\nvel y %f\nvel z %f", player_velocity.x, player_velocity.y, player_velocity.z), 0, 128+(64*4), 16, GREEN); } } @@ -179,6 +193,8 @@ void drawing_resource_wait_mode() void control_game_mode() { + const float frame_time = GetFrameTime(); + Vector3 new_player_velocity = player_velocity; Vector3 new_player_rotation = player_rotation; @@ -187,20 +203,20 @@ void control_game_mode() { if (IsKeyDown(KEY_W) || IsKeyDown(KEY_K)) { - new_player_velocity.x = forward_speed; + new_player_velocity.x = forward_speed * frame_time; } else if (IsKeyDown(KEY_S) || IsKeyDown(KEY_J)) { - new_player_velocity.x = -forward_speed; + new_player_velocity.x = -forward_speed * frame_time; } if (IsKeyDown(KEY_A) || IsKeyDown(KEY_H)) { - new_player_rotation.x = -rotate_speed; + new_player_rotation.x = -rotate_speed * frame_time; } else if (IsKeyDown(KEY_D) || IsKeyDown(KEY_L)) { - new_player_rotation.x = rotate_speed; + new_player_rotation.x = rotate_speed * frame_time; } if (IsKeyDown(KEY_T)) @@ -212,21 +228,20 @@ void control_game_mode() cam.target.y -= DEG2RAD * 20.0; } + map_visible = 0; if (IsKeyDown(KEY_M)) { map_visible = 1; } - else - { - map_visible = 0; - } if (IsKeyReleased(KEY_ONE)) - orb_color = RED; + orb_target_color = RED; if (IsKeyReleased(KEY_TWO)) - orb_color = BLUE; + orb_target_color = BLUE; if (IsKeyReleased(KEY_THREE)) - orb_color = GREEN; + orb_target_color = GREEN; + + orb_color = ColorLerp(orb_color, orb_target_color, frame_time * 2); /* Collision test */ /* Cast straight up */ @@ -350,6 +365,14 @@ void initialize_renderer() cam.fovy = 90.0f; cam.projection = CAMERA_PERSPECTIVE; + /* + I know these are good at 60 fps. Per-second speed to move to FPS/independent movement. + */ + forward_speed *= 60; + forward_speed_decay *= 60; + rotate_speed *= 60; + rotate_speed_decay *= 60; + DisableCursor(); SetWindowState(FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE); } @@ -418,9 +441,10 @@ void start_render_loop() renderfuncs[func_idx](); EndDrawing(); + const float frame_time = GetFrameTime(); /* Decay forward velocity and rotation */ - player_velocity.x = Lerp(player_velocity.x, 0.0f, forward_speed_decay); - player_rotation.x = Lerp(player_rotation.x, 0.0f, rotate_speed_decay); + player_velocity.x = Lerp(player_velocity.x, 0.0f, forward_speed_decay * frame_time); + player_rotation.x = Lerp(player_rotation.x, 0.0f, rotate_speed_decay * frame_time); } should_quit = 1;