feat(render): per-entity sprite_scale on the Atlas-UV path

draw_entities path-1 reads an optional sprite_scale (number, default
1.0) and applies it as uniform scaleX/scaleY in
draw_sprite_transform around the visual center. Lets templates whose
native sprite resolution (e.g. TC_Basics 300×300 bed) doesn't match
the project tile-scale (~/sporel_tile_scale.md: 64 px = 0.5 m via the
puppet shoulder anchor) render at credible real-world sizes without
re-baking the atlas.

Consumers compute their per-atlas scale from
atlas_meta.pixels_per_meter (atlas-baker v0.4.0+ output) divided into
their project canonical px/m — one line in M.init, no per-entity
constants in the template.

Unset sprite_scale preserves v0.2.0 behavior — spine-prototype,
map-editor, vagrant's pre-TC_Basics items unaffected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
calic
2026-06-21 11:42:17 +02:00
parent 4b93d7efe8
commit ce88d3c216
3 changed files with 32 additions and 7 deletions

View File

@@ -4,9 +4,9 @@ Colored-quad tile-grid renderer + tag-driven entity-render. Reads
`lib-core.maps`'s tilemap (v0.1: `draw_map`), and `lib-core.composition`'s
tag-index (v0.2: `draw_entities`).
**Version:** 0.2.0
**Version:** 0.3.0
**Lib-ID:** lib-core.render
**Requires:** lib-core.maps v>=0.5.7, lib-core.composition v>=0.1.0
**Requires:** lib-core.maps v>=0.5.7, lib-core.composition v>=0.3.0
**Tags:** render, tiles, draw, colored-quads, entities
## Topology
@@ -62,7 +62,10 @@ Three sprite-property paths are tried per entity, in order:
1. **`sprite_atlas` (string, atlas-texture-path) + `sprite_uv.{x,y,w,h}`
(numbers)** — renders the sub-rectangle of the atlas via
`engine.render.draw_sprite_transform`. Atlas textures are loaded
`engine.render.draw_sprite_transform`. Optional `sprite_scale`
(number, default 1.0) scales the rendered quad uniformly around its
visual center; useful when a sprite-atlas's native pixel size
doesn't match the project tile-scale. Atlas textures are loaded
once and cached internally on first use; no eviction.
2. **`sprite_color` (uint32 0xRRGGBBAA) + `sprite_w` + `sprite_h`
(numbers)** — renders a colored rect via `engine.render.draw_rect`.
@@ -96,6 +99,14 @@ end
## CHANGELOG
### v0.3.0 (2026-06-20)
- Added optional `sprite_scale` (number) on path (1). Defaults to 1.0
when absent — v0.2.0 consumers unchanged. Lets templates whose
native sprite resolution doesn't match the project tile-scale
rescale at render time without re-baking the atlas.
- Composition dep tightened to v0.3.0 (matches current sibling-tree
state; no API impact, just resolution-correctness).
### v0.2.0 (Phase A.2 — 2026-06-09)
- Added `draw_entities(filter)` tag-driven entity-render. Two sprite-
property paths (`sprite_atlas`+`sprite_uv` / `sprite_color`+`sprite_w`+