some camera movement

This commit is contained in:
veclavtalica 2025-01-28 07:25:28 +03:00
parent efed1e8cc3
commit 23c6822191
4 changed files with 84 additions and 4 deletions

View File

@ -11,21 +11,59 @@ function start_blasting(track)
audio_play(ctx.udata.blast)
end
function process_player(state)
input_action { name = "up", control = "W" }
input_action { name = "left", control = "A" }
input_action { name = "down", control = "S" }
input_action { name = "right", control = "D" }
local right = vec3_norm(vec3_cross(state.player.camera_direction, { x=0, y=1, z=0 }))
local up = { x = right.z, y = right.y, z = -right.x }
local direction = { x = 0, y = 0 , z = 0 }
if input_action_pressed { name = "up" } then
direction = vec3_add(direction, up)
end
if input_action_pressed { name = "down" } then
direction = vec3_sub(direction, up)
end
if input_action_pressed { name = "right" } then
direction = vec3_add(direction, right)
end
if input_action_pressed { name = "left" } then
direction = vec3_sub(direction, right)
end
if vec3_length(direction) > 0 then
direction = vec3_norm(direction)
end
state.player.position = vec3_add(state.player.position, vec3_scale(direction, state.player.speed / (60 / state.blast.bpm)))
end
function game_tick()
if ctx.initialization_needed then
ctx.udata = {
time = 0,
beat = 0,
player = {
position = { x=3, y=0, z=0 },
speed = 0.06, -- tiles per beat
camera_direction = { x=-math.sin(math.pi / 4), y=-1, z=math.cos(math.pi / 4) },
}
start_blasting("mod22")
}
start_blasting("mod171")
end
local state = ctx.udata
process_player(state)
draw_camera {
position = { x=0, y=0, z=0 },
-- direction = { x=-math.sin(math.pi / 4), y=-1, z=math.cos(math.pi / 4) },
direction = { x=-math.sin(ctx.frame_number / 100), y=-1, z=math.cos(ctx.frame_number / 100) },
position = state.player.position,
direction = state.player.camera_direction,
-- direction = { x=-math.sin(ctx.frame_number / 100), y=-1, z=math.cos(ctx.frame_number / 100) },
up = { x=0, y=1, z=0 },
fov = 0,
zoom = 0.15 + math.sin(ctx.frame_number / 100) / 20,

View File

@ -11,4 +11,10 @@ return {
bpm = 177 / 2,
loops = true,
},
mod171 = {
audio = "traxx/mod171.xm",
bpm = 125,
loops = true,
},
}

View File

@ -28,3 +28,39 @@ end
function sinease(c, t, d, b)
return -c*math.cos(t/d*(math.pi/2)) + c + b
end
function vec3_cross(a, b)
return {
x = a.y * b.z - a.z * b.y,
y = a.z * b.x - a.x * b.z,
z = a.x * b.y - a.y * b.x,
}
end
function vec3_dot(a, b)
return a.x * b.x + a.y * b.y + a.z * b.z
end
function vec3_scale(a, s)
return {
x = a.x * s,
y = a.y * s,
z = a.z * s,
}
end
function vec3_norm(a)
return vec3_scale(a, 1.0 / math.sqrt(vec3_dot(a, a)))
end
function vec3_add(a, b)
return { x = a.x + b.x, y = a.y + b.y, z = a.z + b.z }
end
function vec3_sub(a, b)
return { x = a.x - b.x, y = a.y - b.y, z = a.z - b.z }
end
function vec3_length(a)
return math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z)
end

BIN
data/traxx/mod171.xm Executable file

Binary file not shown.