vide/test/spring-test.luau
2023-09-19 23:26:16 +01:00

74 lines
1.8 KiB
Lua

local vide = require "src/init"
local testkit = require("test/testkit")
local program_time = os.clock()
local function step(): number
local FPS = 60
local DT = 1/FPS
repeat until os.clock() - program_time >= DT*10
program_time += DT*10
return DT
end
local function main()
local TERMINAL_HEIGHT = 73 --* REDUCE IF BAR DOES NOT FIT IN TERMINAL
local MIN_ALPHA = 0.3
local MAX_ALPHA = 0.7
local MIN = TERMINAL_HEIGHT * MIN_ALPHA
local MAX = TERMINAL_HEIGHT * MAX_ALPHA
local OFFSET = TERMINAL_HEIGHT - MAX
local BLOCK = ""
local function remainder_to_block(x)
return
if x > 7/8 then ""
elseif x > 6/8 then ""
elseif x > 5/8 then ""
elseif x > 4/8 then ""
elseif x > 3/8 then ""
elseif x > 2/8 then ""
elseif x > 1/8 then ""
else ""
end
local source = vide.source
local spring = vide.spring
local effect = vide.effect
local value = source(MAX)
local sprung, data = (spring :: any)(value, 1, 19.6)
effect(function()
local v = sprung()
local fv = math.floor(v)
local reset = "\27[H\27[2J" -- ANSI clear terminal
local offset = string.rep("\n", MAX - fv + OFFSET)
local bar = testkit.color.gray(remainder_to_block(v - fv) .. "\n" .. string.rep(BLOCK .. "\n", fv))
local num = "\n" .. v
local test = "\n" .. (data.a or 0)
local test2 = "\n" .. (data.b or 0)
print(reset .. offset .. bar .. num .. test .. test2)
end)
local T = 1.5
local elapsed = T/2
repeat local dt = step()
vide.step(dt)
elapsed += dt
while elapsed >= T do
elapsed -= T
value(value() == MAX and MIN or MAX)
end
until false
end
vide.root(main)