feat: extend rig-format with texture/z_order/scale/anchor fields
Additive extension to build_rig output, preserving backward-compat with existing rigs that lack the new fields: - bone.texture: optional atlas-id (string) for sprite-mode rendering; resolved to a texture-handle by puppet.load_textures(). When absent the bone falls back to colored-rect render via draw_rect_rotated. - bone.z_order: render-sort key (lower = back, higher = front); default 0. - bone.scale: [sx, sy] pair; default [1, 1]; negative components mirror the sprite. - bone.anchor: optional [x, y] override of the atlas-supplied anchor. - rig.asset_pack: alias-key into the consumer module's asset_aliases manifest field; lets puppet.load_textures resolve atlas-ids to texture-handles via the asset-lib. - rig.bones_z_sorted: array of bones pre-sorted by z_order; render walks this once per frame. Version bumped to 0.2.0. Subsequent commits add multi-level parent- chain transform, sprite-mode render, and load_textures.
This commit is contained in:
16
init.lua
16
init.lua
@@ -1,4 +1,4 @@
|
|||||||
-- lib-core.puppet v0.1.0
|
-- lib-core.puppet v0.2.0
|
||||||
-- Skeletal animation: skeleton + bones + tracks + rest + keyframe
|
-- Skeletal animation: skeleton + bones + tracks + rest + keyframe
|
||||||
-- + procedural + look-at constraint. No footplant in v0.1.
|
-- + procedural + look-at constraint. No footplant in v0.1.
|
||||||
|
|
||||||
@@ -67,6 +67,11 @@ function M.build_rig(rig_table)
|
|||||||
},
|
},
|
||||||
look_at = (b.look_at == true),
|
look_at = (b.look_at == true),
|
||||||
color = b.color or { 200, 200, 200 },
|
color = b.color or { 200, 200, 200 },
|
||||||
|
texture = b.texture, -- optional atlas-id (string) or nil
|
||||||
|
z_order = b.z_order or 0, -- render-sort key; default 0
|
||||||
|
scale = b.scale or { 1.0, 1.0 }, -- [sx, sy]; negative = mirror
|
||||||
|
anchor = b.anchor, -- optional [x, y] override of atlas-anchor; resolved in load_textures
|
||||||
|
texture_handle = nil, -- populated by load_textures
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -110,12 +115,21 @@ function M.build_rig(rig_table)
|
|||||||
tracks_by_id[t.id] = { id = t.id, bones = bones_in_track }
|
tracks_by_id[t.id] = { id = t.id, bones = bones_in_track }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Build z-sorted bone list (lower z_order first = back, higher = front).
|
||||||
|
local bones_z_sorted = {}
|
||||||
|
for _, b_src in ipairs(rig_table.bones) do
|
||||||
|
bones_z_sorted[#bones_z_sorted + 1] = bones_by_id[b_src.id]
|
||||||
|
end
|
||||||
|
table.sort(bones_z_sorted, function(a, b) return a.z_order < b.z_order end)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id = rig_table.id or "anonymous",
|
id = rig_table.id or "anonymous",
|
||||||
|
asset_pack = rig_table.asset_pack, -- optional alias-key into module's asset_aliases
|
||||||
bones = rig_table.bones, -- keep original-order array
|
bones = rig_table.bones, -- keep original-order array
|
||||||
bones_by_id = bones_by_id,
|
bones_by_id = bones_by_id,
|
||||||
tracks_by_id = tracks_by_id,
|
tracks_by_id = tracks_by_id,
|
||||||
bone_to_track = bone_to_track,
|
bone_to_track = bone_to_track,
|
||||||
|
bones_z_sorted = bones_z_sorted,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"id": "lib-core.puppet",
|
"id": "lib-core.puppet",
|
||||||
"version": "0.1.0",
|
"version": "0.2.0",
|
||||||
"api_min": "0.1",
|
"api_min": "0.1",
|
||||||
"deps": []
|
"deps": []
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user