This commit is contained in:
aaron 2023-08-07 13:12:36 +01:00
parent 6f9e86c5c7
commit d0fc816460
4 changed files with 34 additions and 25 deletions

View file

@ -167,18 +167,22 @@ local function update_springs(dt: number)
local new_time = data.duration + dt local new_time = data.duration + dt
local new_alpha = solve(data.period, data.damping_ratio, data.initial_velocity, new_time) local new_alpha = solve(data.period, data.damping_ratio, data.initial_velocity, new_time)
local new_velocity = -(new_alpha - data.alpha)/dt
data.velocity = -(new_alpha - data.alpha)/dt local acceleration = (new_velocity - data.velocity)/dt
data.velocity = new_velocity
data.alpha = new_alpha data.alpha = new_alpha
data.duration = new_time data.duration = new_time
local value = lerp(initial_position, target_position, new_alpha) local value = lerp(initial_position, target_position, new_alpha)
set(output, value) if math.abs(acceleration) < 0.01 then
table.insert(remove_queue, data)
-- if new_alpha > 0.9 then set(output, target_position)
-- table.insert(remove_queue, data) else
-- end set(output, value)
end
end end
for _, data in next, remove_queue do for _, data in next, remove_queue do

View file

@ -131,11 +131,11 @@ BENCH("indexes() no change", function()
local state = vide.source(data) local state = vide.source(data)
local _list = vide.values(state, function(v, i) local _list = vide.indexes(state, function(v, i)
return {} return {}
end) end)
state(state()) -- fill double buffer --state(state()) -- fill double buffer
START(N) START(N)
@ -152,11 +152,11 @@ BENCH("indexes() all change", function()
local state = vide.source(data) local state = vide.source(data)
local _list = vide.values(state, function(v, i) local _list = vide.indexes(state, function(v, i)
return {} return {}
end) end)
state(state()) -- fill double buffer --state(state()) -- fill double buffer
for i, v in data do for i, v in data do
data[i] = v + 1 data[i] = v + 1
@ -176,7 +176,7 @@ BENCH("indexes() all remove", function()
local state = vide.source(data) local state = vide.source(data)
local _list = vide.values(state, function(v, i) local _list = vide.indexes(state, function(v, i)
return {} return {}
end) end)

View file

@ -1147,7 +1147,10 @@ TEST("spring()", function()
local output = spring(input) local output = spring(input)
input(1) input(1)
vide.step(1e9) -- spring alpha at ~1 vide.step(0.05)
CHECK(output() ~= input()) -- check spring is moving
vide.step(6) -- spring finished, should be internally removed from queue
CHECK(output() == input()) -- check spring is at target
local count = -1 local count = -1
watch(function() watch(function()
@ -1155,15 +1158,14 @@ TEST("spring()", function()
count += 1 count += 1
end) end)
vide.step(1) -- spring should be internally removed from spring queue vide.step(1) -- attempt to cause another spring update
CHECK(count == 0) CHECK(count == 1) -- check no update occurs as spring is finished
-- --
gc() -- perform full gc gc() -- perform full gc
input(2) -- spring should be re-added to spring queue input(2) -- spring should be re-added to spring queue
vide.step(0) -- process spring queue vide.step(0) -- process spring queue
CHECK(count == 1) -- check spring was rescheduled correctly CHECK(count == 2) -- check spring was rescheduled correctly
end end
end) end)

21
todo.md
View file

@ -1,13 +1,16 @@
# todo # todo
- cleanup codebase
- setup site, improve docs
- cleanup within `values()` and `indexes()`
- strict mode - strict mode
- warn when map returns primitive - better error reporting
- warn when `values()` returns primitive
- Implement from solid - Implement from solid
- onCleanup - [x] onCleanup > `cleanup()`
- Index - [x] Index > `indexes()`
- For - [x] For > `values()`
- untrack - [ ] untrack
- batch - [ ] batch
- async/loading/suspense - [ ] async/loading/suspense
- define order with nested properties - define order with nested properties