mirror of
https://github.com/centau/vide.git
synced 2026-08-20 14:41:37 +00:00
This commit is contained in:
parent
6f9e86c5c7
commit
d0fc816460
4 changed files with 34 additions and 25 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
21
todo.md
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue