From 739a3e4f95c037c759c86b13e654e923bbf63f58 Mon Sep 17 00:00:00 2001 From: cha0s Date: Mon, 21 Oct 2024 02:36:41 -0500 Subject: [PATCH] refactor: entity $$extends --- app/ecs/ecs.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/app/ecs/ecs.js b/app/ecs/ecs.js index dcda2b9..a17f7ae 100644 --- a/app/ecs/ecs.js +++ b/app/ecs/ecs.js @@ -204,8 +204,23 @@ export default class Ecs { return entityIds; } const creating = {}; + const extendedSpecificsList = []; for (let i = 0; i < specificsList.length; i++) { - const [entityId, components] = specificsList[i]; + const [entityId, rawComponents] = specificsList[i]; + let { + $$extends, + ...components + } = rawComponents; + if ($$extends) { + components = { + ...this.readJson($$extends), + ...components, + }; + } + extendedSpecificsList.push([entityId, components]); + } + for (let i = 0; i < extendedSpecificsList.length; i++) { + const [entityId, components] = extendedSpecificsList[i]; if (!this.$$detached.has(entityId)) { this.deferredChanges[entityId] = []; } @@ -227,8 +242,8 @@ export default class Ecs { for (const i in creating) { this.Components[i].createMany(creating[i]) } - for (let i = 0; i < specificsList.length; i++) { - const [entityId, components] = specificsList[i]; + for (let i = 0; i < extendedSpecificsList.length; i++) { + const [entityId, components] = extendedSpecificsList[i]; this.rebuild(entityId, () => Object.keys(components)); if (this.$$detached.has(entityId)) { continue;