]> git.mcshandy.xyz Git - barrow_crawler/commitdiff
FPS independent movement, orb color transition, bigger map
authorRandy McShandy <randy@mcshandy.xyz>
Sat, 15 Jun 2024 19:52:41 +0000 (14:52 -0500)
committerRandy McShandy <randy@mcshandy.xyz>
Sat, 15 Jun 2024 19:52:41 +0000 (14:52 -0500)
CHANGELOG.TXT [new file with mode: 0644]
README.TXT [new file with mode: 0644]
build_win.sh
src/main.c
src/render_raylib.c

diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT
new file mode 100644 (file)
index 0000000..b61a4c6
--- /dev/null
@@ -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 (file)
index 0000000..da7fb62
--- /dev/null
@@ -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.
index 9d6a2bcac652379b819668997289409488498390..aa12d560660bc8e6d8882654f3d3c02746161d46 100755 (executable)
@@ -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
index ec96a3849fd5140e2e534420d2a5c022f9e46c99..dd185318ca79fd6f9382a158233be5340923877e 100755 (executable)
@@ -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,
index dac0778dda71f479a60f50e44f25b46813edcebd..429fc82af5a89414f2b5d94b6d8744fdc3c558fa 100644 (file)
@@ -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;