diff --git a/src/spring.luau b/src/spring.luau index e60e3ae..024da91 100644 --- a/src/spring.luau +++ b/src/spring.luau @@ -200,7 +200,7 @@ local function spring(source: () -> T, period: number?, damping_ratio: number return function() track(output) return output.cache - end + end, data end local function step_springs(dt: number) @@ -224,6 +224,9 @@ local function step_springs(dt: number) local ff_123 = u_123*-c local ff_456 = u_456*-c + + --assert(math.abs(fs_123.X) >= (math.abs(ff_123.X)), "damping exceeds restoring") + -- calculate acceleration step local dv_123 = (fs_123 + ff_123)*dt local dv_456 = (fs_456 + ff_456)*dt diff --git a/test/spring-test.luau b/test/spring-test.luau index c22d955..233c91c 100644 --- a/test/spring-test.luau +++ b/test/spring-test.luau @@ -40,7 +40,7 @@ local function main() local effect = vide.effect local value = source(MAX) - local sprung = spring(value, 1, 0.3) + local sprung, data = (spring :: any)(value, 1, 19.16) effect(function() local v = sprung() @@ -48,14 +48,15 @@ local function main() 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)) - print(reset .. offset .. bar) + local num = "\n" .. v + print(reset .. offset .. bar .. num) end) - - local elapsed = 0 + + local T = 1.5 + local elapsed = T/2 repeat local dt = step() vide.step(dt) - local T = 3 elapsed += dt while elapsed >= T do elapsed -= T