This commit is contained in:
MihailRis 2026-08-19 23:50:09 +03:00
parent 834a0e85d8
commit e544d797e2
2 changed files with 15 additions and 11 deletions

View file

@ -110,7 +110,7 @@ local env = {
} }
table.extend(env, math) table.extend(env, math)
local function codegen_track(lines, memoised, keysets) local function codegen_track(raw_track, lines, memoised, keysets)
local code = "" local code = ""
local translation = {false, false, false} local translation = {false, false, false}
local rotation = {false, false, false} local rotation = {false, false, false}
@ -121,8 +121,8 @@ local function codegen_track(lines, memoised, keysets)
elseif line.keys then elseif line.keys then
keysets[i] = line.keys keysets[i] = line.keys
code = code .. string.format( code = code .. string.format(
"\n local l%d = value_at(keysets[%d], t * 3 %% 60, %s)", "\n local l%d = value_at(keysets[%d], t * %s, %s)",
i, i, line.interp) i, i, raw_track.fps, line.interp)
end end
if line.channel == CH_TRANSLATE then if line.channel == CH_TRANSLATE then
@ -241,27 +241,33 @@ function this.compile_track(raw_track, track_name)
local keysets = {} local keysets = {}
for bone, lineset in pairs(raw_track.linesets) do for bone, lineset in pairs(raw_track.linesets) do
local lineset_code = codegen_track(lineset.lines, memoised, keysets) local lineset_code = codegen_track(
raw_track, lineset.lines, memoised, keysets)
code = code .. "\n do" .. lineset_code .. "\n end\n" .. code = code .. "\n do" .. lineset_code .. "\n end\n" ..
" rig:set_matrix(rig:index(" .. string.escape(bone) .. "), dst)\n" " rig:set_matrix(rig:index(" .. string.escape(bone) .. "), dst)\n"
end end
local memoised_code = "" local memoised_code = ""
for name, expression in pairs(memoised) do for name, expression in pairs(memoised) do
memoised_code = memoised_code .. "\n local " .. name .. " = " .. expression memoised_code = memoised_code .. "\n local " .. name .. " = "
.. expression
end end
if #memoised_code > 0 then if #memoised_code > 0 then
code = memoised_code .. "\n" .. code code = memoised_code .. "\n" .. code
end end
local src = "return function(rig, t, m)\n local dst = DST\n" .. code .. "\nend" local src = "return function(rig, t, m)\n local dst = DST\n"
.. code .. "\nend"
if TRACE_CODEGEN then if TRACE_CODEGEN then
debug.log("["..string.escape(track_name or "nil").." codegen trace]:\n"..code) debug.log("["..
string.escape(track_name or "nil").." codegen trace]:\n"..src)
end end
local generator, err = load(src, "<expr>", "bt", table.extend({keysets = keysets}, env)) local generator, err = load(
src, "<expr>", "bt", table.extend({keysets = keysets}, env))
if not generator then if not generator then
error(err) error(err)
end end

View file

@ -1,6 +1,4 @@
local tsf = entity.transform
local rig = entity.skeleton local rig = entity.skeleton
local body = entity.rigidbody
local states = {} local states = {}
@ -37,7 +35,7 @@ function set_state(name, fade_time)
end end
local function update(delta) local function update(delta)
for key, state in pairs(states) do for _, state in pairs(states) do
state.timer = state.timer + delta state.timer = state.timer + delta
local intensity = state.fade_in and 1.0 or 0.0 local intensity = state.fade_in and 1.0 or 0.0