From d8a9b0d8d98a67cd5ef9d58c80128e99f6646a3f Mon Sep 17 00:00:00 2001 From: Valentin Dosimont Date: Thu, 27 Feb 2025 16:40:04 +0100 Subject: [PATCH] fix: recs setEntities now updates component if component exists --- .changeset/chatty-kings-nail.md | 16 ++++++++++++++++ packages/state/src/recs/index.ts | 29 +++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 .changeset/chatty-kings-nail.md diff --git a/.changeset/chatty-kings-nail.md b/.changeset/chatty-kings-nail.md new file mode 100644 index 00000000..563b561c --- /dev/null +++ b/.changeset/chatty-kings-nail.md @@ -0,0 +1,16 @@ +--- +"@dojoengine/state": patch +"template-vite-ts": patch +"@dojoengine/core": patch +"@dojoengine/create-burner": patch +"@dojoengine/create-dojo": patch +"@dojoengine/predeployed-connector": patch +"@dojoengine/react": patch +"@dojoengine/sdk": patch +"@dojoengine/torii-client": patch +"@dojoengine/torii-wasm": patch +"@dojoengine/utils": patch +"@dojoengine/utils-wasm": patch +--- + +fix: recs `setEntities` now updates component if component exists diff --git a/packages/state/src/recs/index.ts b/packages/state/src/recs/index.ts index a7d8136b..8573a84d 100644 --- a/packages/state/src/recs/index.ts +++ b/packages/state/src/recs/index.ts @@ -2,9 +2,12 @@ import { Component, ComponentValue, Entity, + getComponentValue, + hasComponent, Metadata, Schema, setComponent, + updateComponent, } from "@dojoengine/recs"; import { Clause, @@ -405,26 +408,23 @@ export const setEntities = async ( if (logging) console.log("Entities to set:", entities); - for (let key in entities) { + for (const key in entities) { if (!Object.hasOwn(entities, key)) { continue; } - for (let componentName in entities[key]) { + for (const componentName in entities[key]) { if (!Object.hasOwn(entities[key], componentName)) { continue; } - let recsComponent = Object.values(components).find( - (component) => - component.metadata?.namespace + - "-" + - component.metadata?.name === - componentName + const recsComponent = Object.values(components).find( + (component) => component.metadata?.name === componentName ); if (recsComponent) { try { const rawValue = entities[key][componentName]; + if (logging) console.log( `Raw value for ${componentName} on ${key}:`, @@ -448,6 +448,19 @@ export const setEntities = async ( ); } + if (hasComponent(recsComponent, key as Entity)) { + updateComponent( + recsComponent, + key as Entity, + convertedValue as Partial, + getComponentValue(recsComponent, key as Entity) + ); + if (logging) + console.log( + `Update component ${recsComponent.metadata?.name} on ${key}` + ); + continue; + } setComponent(recsComponent, key as Entity, convertedValue); if (logging)