From 43cc2a179ebdc59d4201ea70e94d62b8190da502 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Tue, 10 Feb 2026 22:30:41 +0100 Subject: [PATCH] wolf: move with direction --- picotron/wolfenstein_src/main.lua | 36 ++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/picotron/wolfenstein_src/main.lua b/picotron/wolfenstein_src/main.lua index 81ac757..997645d 100644 --- a/picotron/wolfenstein_src/main.lua +++ b/picotron/wolfenstein_src/main.lua @@ -1,7 +1,7 @@ --[[pod_format="raw",created="2026-02-10 12:09:44",modified="2026-02-10 12:27:08",revision=2]] player = { origin = { - x= nil, + x = nil, y = nil }, dir = nil @@ -9,6 +9,7 @@ player = { col_bg = 1 col_ground = 6 +fov = (120 / 180) * math.pi -- 120 horizontal function _init() for i=0,31 do @@ -16,13 +17,12 @@ function _init() if mget(i,j) == 5 then -- player id player.origin.x = i + 0.5 player.origin.y = j + 0.5 - player.dir = math.pi / 2 + player.dir = 0 break end end if (player.x) break end - print("player: ("..player.origin.x..", "..player.origin.y..")") end function cast_ray(origin, angle) @@ -31,14 +31,23 @@ end function draw_minimap() local tile_size = 4 - map(0, 0, 20, 20, 31, 31, 0x0000, tile_size, tile_size) - circfill(20 + (player.origin.x * tile_size), 20 + (player.origin.y * tile_size), 2, 5) + local offset = 20 + map(0, 0, offset, offset, 31, 31, 0x0000, tile_size, tile_size) + + -- player + local px = offset + (player.origin.x * tile_size) + local py = offset + (player.origin.y * tile_size) + circfill(px, py, 1, 5) + + local len = 3 + local px2 = px + math.cos(player.dir) * len + local py2 = py + math.sin(player.dir) * len + line(px, py, px2, py2, 6) end function _draw() cls(col_bg) rectfill(0, 135, 480, 270, col_ground) - local fov = 120 -- horizontal local angle_step=(fov / 480) / 360 * math.pi for x=0,480-1 do local angle = (player.dir-(fov/2) + x * angle_step) % (2 * math.pi) @@ -48,8 +57,15 @@ function _draw() end function _update() - if (btn(0)) player.origin.x -= 2 - if (btn(1)) player.origin.x += 2 - if (btn(2)) player.origin.y -= 2 - if (btn(3)) player.origin.y += 2 + local speed = 0.1 + if (btn(0)) player.dir -= speed + if (btn(1)) player.dir += speed + if (btn(2)) then + player.origin.x += math.cos(player.dir) * speed + player.origin.y += math.sin(player.dir) * speed + end + if (btn(3)) then + player.origin.x -= math.cos(player.dir) * speed + player.origin.y -= math.sin(player.dir) * speed + end end