From a59110067e352d300a8b1dee2d00b1daa9a1492e Mon Sep 17 00:00:00 2001 From: spatialfree Date: Fri, 8 Nov 2024 22:01:21 -0500 Subject: [PATCH] smooth snake --- src/Arts.cs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/Arts.cs b/src/Arts.cs index c0d7416..bc06113 100644 --- a/src/Arts.cs +++ b/src/Arts.cs @@ -76,6 +76,7 @@ static class Arts } // snake + float snake_t = Maths.smooth_stop((float)Mono.step_t); bool food_next = (Mono.snake[0] + Mono.snake_dir) == Mono.food; if (!food_next) { @@ -93,13 +94,13 @@ static class Arts meshes[face].Draw( mat_mono, Matrix.TRS( - Mono.snake[0].ToVec3 + fall, + Mono.snake[0].ToVec3 - (Mono.snake_dir.ToVec3 * (float)(1.0 - snake_t) * 0.3f), Quat.LookDir(Mono.snake_dir.ToVec3), - V.XYZ(1, 1, 1)// * (float)(Mono.step_t)) + V.XYZ(1, 1, (float)(snake_t)) ) ); - for (int i = 1; i < Mono.snake_len; i++) + for (int i = 1; i < Mono.snake_len - 1; i++) { float scale = 1.0f; if ((int)((Time.Total - Mono.eat_timestamp) * Mono.snake_len / Mono.step_step) == i) @@ -109,12 +110,24 @@ static class Arts meshes["Segment"].Draw( mat_mono, Matrix.TRS( - Mono.snake[i].ToVec3 + fall, + Mono.snake[i].ToVec3, Quat.LookAt(Mono.snake[i].ToVec3, Mono.snake[i - 1].ToVec3), scale ) ); } + // tail + if (Mono.grow_buffer > 0) { snake_t = 0.0f; } + int i_tail = Mono.snake_len - 1; + Vec3 tail_dir = Vec3.Direction(Mono.snake[i_tail - 1].ToVec3, Mono.snake[i_tail].ToVec3); + meshes["Segment"].Draw( + mat_mono, + Matrix.TRS( + Mono.snake[i_tail].ToVec3 + (tail_dir * (float)(snake_t) * 0.7f), + Quat.LookDir(tail_dir), + V.XYZ(1, 1, (float)(1.0 - snake_t)) + ) + ); // holes foreach (KeyValuePair hole in Mono.holes)