Browse Source

adding gradius-style followers

pixelbath 1 year ago
parent
commit
51c056ed27
1 changed files with 66 additions and 0 deletions
  1. 66 0
      awesome/follower.lua

+ 66 - 0
awesome/follower.lua

@@ -0,0 +1,66 @@
+-- title:  follower
+-- author: pixelbath
+-- desc:   reference for Gradius-like option followers
+-- script: lua
+
+local player = {
+    x=50, y=50, spd=1,
+}
+
+local history_length = 100
+
+-- set up path history and fill with current player pos
+player_moving = false
+player_path = {}
+path_idx = 1
+for i=1,history_length do
+    table.insert(player_path, { x=player.x, y=player.y })
+end
+
+-- provides wrapping values
+function get_previous_index(offset)
+    local prev_idx = path_idx - offset
+    if prev_idx <= 0 then prev_idx = history_length + prev_idx end
+    return prev_idx
+end
+function get_next_index()
+    local next_idx = path_idx + 1
+    if next_idx > 100 then return 1 else return next_idx end
+end
+
+function TIC()
+    -- only update when player is moving
+    player_moving = false
+    if btn(0) then
+        player_moving = true
+		player.y=player.y-player.spd
+	end
+	if btn(1) then
+        player_moving = true
+		player.y=player.y+player.spd
+	end
+	if btn(2) then
+        player_moving = true
+		player.x=player.x-player.spd
+	end
+	if btn(3) then
+        player_moving = true
+		player.x=player.x+player.spd
+	end
+
+    local fol_pos = player_path[get_previous_index(10)]
+    local fol_pos2 = player_path[get_previous_index(20)]
+    if player_moving then
+        player_path[path_idx] = { x=player.x, y=player.y }
+        path_idx = get_next_index()
+    end
+
+	cls(0)
+	rect(player.x, player.y, 5, 5, 5)
+    rect(fol_pos.x, fol_pos.y, 5, 5, 6)
+    rect(fol_pos2.x, fol_pos2.y, 5, 5, 7)
+end
+
+-- <PALETTE>
+-- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57
+-- </PALETTE>