This repository has been archived on 2025-02-14. You can view files and clone it, but cannot push or open issues or pull requests.
quack-twn/data/scripts/game.lua
2025-02-02 03:28:19 +03:00

79 lines
2.0 KiB
Lua

-- called every frame, with constant delta time
local capture = false
local trig = require "trig"
local Vector3l = require "vector3"
local function Vector3(x, y, z)
if y == nil then
return {x = x, y = x, z = x}
end
return {x = x, y = y, z = z}
end
local rot = 0
local rot_spd = 0.05
local spd = 0.07
local pos = Vector3(0)
local function Vector2(x, y)
if y == nil then
return {x = x, y = x}
end
return {x = x, y = y}
end
local function wrap(value, min, max)
local range = max - min
if value == 0 then
return min
end
local result = value - (range * math.floor((value - min) / range))
if result == max then
return min
end
return result
end
local function b2n(value)
return value and 1 or 0
end
function game_tick()
-- ctx.initialization_needed is true first frame and every time dynamic reload is performed
if ctx.initialization_needed then
-- ctx.udata persists on reload
ctx.udata = {}
end
ctx.mouse_capture = capture
input_action{name="quit", control="SPACE"}
input_action{name = "left", control = "A"}
input_action{name = "right", control = "D"}
input_action{name = "forward", control = "W"}
input_action{name = "back", control = "S"}
if input_action_just_pressed{name = "quit"} then
if not capture then
capture = true
else
capture = false
end
end
local dir = draw_camera_from_principal_axes{position = pos, yaw = rot}.direction
dir.y = 0
dir = trig.v3_normalized(dir)
local rot_d = b2n(input_action_pressed{name = "right"}) - b2n(input_action_pressed{name = "left"})
rot = rot + rot_d * rot_spd
local mov_d = b2n(input_action_pressed{name = "forward"}) - b2n(input_action_pressed{name = "back"})
pos = trig.v3_add(pos, trig.v3_mult(dir, spd * mov_d))
draw_billboard{position = Vector3(5, 0, 0), size = Vector2(1, 1), texture = "images/duck.png"}
end