aboutsummaryrefslogtreecommitdiff
path: root/src/tail.odin
diff options
context:
space:
mode:
Diffstat (limited to 'src/tail.odin')
-rw-r--r--src/tail.odin40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/tail.odin b/src/tail.odin
new file mode 100644
index 0000000..2184444
--- /dev/null
+++ b/src/tail.odin
@@ -0,0 +1,40 @@
+package demonchime
+
+import "core:math"
+import "core:math/linalg"
+
+Tail :: struct($N: int) {
+ points: [N]Vec2,
+ point_max_dist: f32,
+ point_rad: f32,
+ color_start: Color,
+ color_end: Color,
+}
+
+set_tail_position :: proc(tail: ^Tail($N), pos: Vec2, dt: f32) {
+ tail.points[0] = pos
+ for i in 1..<len(tail.points) {
+ prev := tail.points[i - 1]
+ cur := &tail.points[i]
+
+ cur.y += 50 * dt
+
+ dist := linalg.length2(prev - cur^)
+ if dist > tail.point_max_dist*tail.point_max_dist {
+ dir := linalg.normalize0(cur^ - prev)
+ cur^ = prev + dir * (tail.point_max_dist - 1)
+ }
+ }
+}
+
+draw_tail :: proc(tail: Tail($N)) {
+ for point, i in tail.points {
+ renderer.tint = linalg.lerp(
+ tail.color_start,
+ tail.color_end,
+ f32(i)/len(tail.points),
+ )
+ draw_circle(point, tail.point_rad)
+ }
+ renderer.tint = {1, 1, 1, 1}
+}