From 74254717f13b1d4c1de638da87b94af903904c59 Mon Sep 17 00:00:00 2001 From: Ukendio Date: Sun, 22 Feb 2026 16:42:49 +0100 Subject: [PATCH] Add deserialize --- modules/deserialize.luau | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 modules/deserialize.luau diff --git a/modules/deserialize.luau b/modules/deserialize.luau new file mode 100644 index 0000000..3d9a08f --- /dev/null +++ b/modules/deserialize.luau @@ -0,0 +1,47 @@ +local jecs = require("@jecs") + +local function ecs_ensure_entity(world: jecs.World, id: jecs.Entity, ctx: {[jecs.Entity]: jecs.Entity}) + local e = 0 + + local ser_id = id + + local deser_id = ctx[ser_id] + if not deser_id then + if not world:exists(ser_id) + or (world:contains(ser_id) and not world:get(ser_id, jecs.Name)) + then + deser_id = world:entity(id) + else + if world:contains(ser_id) then + if world:has(ser_id, jecs.Name) then + deser_id = ser_id + else + deser_id = world:entity(ser_id) + end + else + if world:exists(ser_id) then + deser_id = world:entity() + else + deser_id = world:entity(ser_id) + end + end + end + ctx[ser_id] = deser_id + end + + e = deser_id + + return e +end + +local function ecs_deser_pairs(world: jecs.World, rel, tgt, ctx) + rel = ecs_ensure_entity(world, rel, ctx) + tgt = ecs_ensure_entity(world, tgt, ctx) + + return jecs.pair(rel, tgt) +end + +return { + ecs_ensure_entity = ecs_ensure_entity, + ecs_deser_pairs = ecs_deser_pairs, +}