From 93e6954fb1ca33453d2b8d43c4f04326ca7362b3 Mon Sep 17 00:00:00 2001 From: Orkuncakilkaya Date: Mon, 28 Sep 2026 12:09:52 +0300 Subject: [PATCH] ludic.things: things_spare_warm - spare records made up front, so play takes them from the first placement Co-Authored-By: Claude Opus 5.5 --- packages/ludic.things/spare.ludic | 6 ++++++ packages/ludic.things/tests/things_test.ludic | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/packages/ludic.things/spare.ludic b/packages/ludic.things/spare.ludic index e3bf70ad..a1c010b6 100644 --- a/packages/ludic.things/spare.ludic +++ b/packages/ludic.things/spare.ludic @@ -62,3 +62,9 @@ export function thing_slot(t: Thing) -> int { if t == null or t.ent < 0 { return -1 } return t.ent & ECS_SLOT } + +# spare records made now, up to `n` waiting: a world that will place Things in play takes them +# from the first placement instead of making new ones until enough have been removed +export function things_spare_warm(things_st: mut ThingsState, n: int) -> void { + while things_spare_count(things_st) < n { push(things_st.th_spare, new Thing) } +} diff --git a/packages/ludic.things/tests/things_test.ludic b/packages/ludic.things/tests/things_test.ludic index a0bb5433..806c1ecd 100644 --- a/packages/ludic.things/tests/things_test.ludic +++ b/packages/ludic.things/tests/things_test.ludic @@ -240,5 +240,10 @@ program ThingsTest { expect(things_spare_count(things_st) <= 33) things_reserve(things_st, 5000) expect_eq(things_verify(things_st), 0) + things_spare_warm(things_st, 96) + expect_eq(things_spare_count(things_st), 96) + let warm = thing_put(things_st, TH_SIGN, "sign", 9.0, 9.0, 0.0, 0.0, 2.0, 2) + expect_eq(things_spare_count(things_st), 95) + expect_eq(thing_nearest(things_st, TH_SIGN, 9.0, 9.0).uid, warm.uid) } }