From 9dc84ba910368f893356d073abf7a987b73f3508 Mon Sep 17 00:00:00 2001 From: cha0s Date: Fri, 5 Jan 2024 20:02:38 -0600 Subject: [PATCH] refactor: mixin --- packages/behavior/src/index.js | 17 ++++++++++++- packages/behavior/src/resources/script.js | 2 +- packages/behavior/src/traits/behaved.js | 6 ++--- packages/dialog/src/index.js | 21 +++++++++++++--- .../dialog/src/traits/decorators/initiator.js | 2 +- packages/dialog/src/traits/dialog.js | 2 +- packages/dialog/src/wordize.js | 2 +- packages/entity/src/full-entity.js | 4 +-- .../persea/controllers/entity/component.jsx | 2 +- .../persea/controllers/entity/from-buffer.js | 2 +- .../persea/controllers/entity/to-buffer.js | 2 +- .../controllers/entity/traits/index.jsx | 4 +-- packages/entity/src/resources/entity-list.js | 8 +++--- packages/entity/src/resources/entity.js | 14 +++++------ packages/entity/src/traits/alive.js | 4 +-- packages/entity/src/traits/spawner.js | 2 +- packages/entity/test/alive.js | 2 +- packages/entity/test/directional.js | 2 +- packages/entity/test/entity.js | 10 ++++---- packages/entity/test/json.js | 2 +- packages/entity/test/mobile.js | 2 +- packages/entity/test/perishable.js | 2 +- packages/entity/test/positioned.js | 2 +- packages/entity/test/spawner.js | 2 +- packages/input/src/traits/interactive.js | 2 +- .../physics/src/persea/traits/emitter.jsx | 2 +- .../src/persea/traits/emitter/particle.jsx | 2 +- packages/physics/src/traits/collider.js | 2 +- packages/physics/src/traits/emitted.js | 2 +- packages/physics/src/traits/emitter.js | 6 ++--- packages/resource/src/index.js | 7 ++++-- .../persea/hooks/use-resource-controller.js | 2 +- packages/resource/src/persea/index.js | 20 ++++++++++++++- packages/s13n/src/synchronized/client.js | 2 +- .../components/animation-visualization.jsx | 2 +- .../src/persea/traits/animated/animation.jsx | 2 +- packages/timing/src/traits/animated.js | 2 +- .../src/persea/controllers/room/component.jsx | 6 ++--- packages/topdown/src/persea/index.js | 25 ++++++++++++++++--- .../persea/room-sides/tiles-side/index.jsx | 2 +- packages/topdown/src/resources/room.js | 4 +-- packages/topdown/test/layer.js | 2 +- packages/topdown/test/tiles.js | 12 ++++----- packages/traits/src/index.js | 17 ++++++++++++- packages/traits/src/persea/index.js | 23 ++++++++++++++--- 45 files changed, 181 insertions(+), 81 deletions(-) diff --git a/packages/behavior/src/index.js b/packages/behavior/src/index.js index b97f218..8577a28 100644 --- a/packages/behavior/src/index.js +++ b/packages/behavior/src/index.js @@ -12,7 +12,22 @@ export const hooks = { cache.reset(); } }, + '@flecks/core.mixin': (Flecks) => ( + class FlecksWithAvocadoBehavior extends Flecks { + + constructor(...args) { + super(...args); + if (!this.avocado) { + this.avocado = {}; + } + this.avocado.behavior = { + globals: {}, + }; + } + + } + ), '@flecks/core.starting': async (flecks) => { - flecks.set('$avocado/behavior.globals', flecks.invokeMerge('@avocado/behavior.globals')); + flecks.avocado.behavior.globals = flecks.invokeMerge('@avocado/behavior.globals'); }, }; diff --git a/packages/behavior/src/resources/script.js b/packages/behavior/src/resources/script.js index 594dc65..72fe8fa 100644 --- a/packages/behavior/src/resources/script.js +++ b/packages/behavior/src/resources/script.js @@ -49,7 +49,7 @@ export default (flecks) => { } return { [Populated]: true, - ...flecks.get('$avocado/behavior.globals'), + ...flecks.avocado.behavior, ...locals, }; } diff --git a/packages/behavior/src/traits/behaved.js b/packages/behavior/src/traits/behaved.js index 380d475..6be0b14 100644 --- a/packages/behavior/src/traits/behaved.js +++ b/packages/behavior/src/traits/behaved.js @@ -31,7 +31,7 @@ export default (flecks) => class Behaved extends decorate(Trait) { ({ currentRoutine: this.$$currentRoutine, } = this.constructor.defaultState()); - const {Script} = flecks.avocado.Resources; + const {Script} = flecks.avocado.resource.Resources; this.$$context = Script.createContext(); } @@ -79,7 +79,7 @@ export default (flecks) => class Behaved extends decorate(Trait) { static async loadScripts(scripts, context) { return mapValuesAsync(scripts, async (codeOrUri) => { - const {Script} = flecks.avocado.Resources; + const {Script} = flecks.avocado.resource.Resources; const script = await Script.load(codeOrUri); script.context = context; return script; @@ -88,7 +88,7 @@ export default (flecks) => class Behaved extends decorate(Trait) { async load(json) { await super.load(json); - const {Script} = flecks.avocado.Resources; + const {Script} = flecks.avocado.resource.Resources; this.$$context = Script.createContext({ entity: this.entity, }); diff --git a/packages/dialog/src/index.js b/packages/dialog/src/index.js index 1e99987..045d7e9 100644 --- a/packages/dialog/src/index.js +++ b/packages/dialog/src/index.js @@ -10,11 +10,26 @@ export const hooks = { Flecks.decorate(require.context('./traits/decorators', false, /\.js$/)) ), '@avocado/traits.traits': Flecks.provide(require.context('./traits', false, /\.js$/)), + '@flecks/core.mixin': (Flecks) => ( + class FlecksWithAvocadoDialog extends Flecks { + + constructor(...args) { + super(...args); + if (!this.avocado) { + this.avocado = {}; + } + this.avocado.dialog = { + parser: undefined, + }; + } + + } + ), '@flecks/core.starting': (flecks) => { const dialogFunctions = flecks.invokeMerge('@avocado/dialog.functions'); const resolver = (type) => (dialogFunctions[type] ? dialogFunctions[type] : (i) => i); - flecks.set('$avocado/dialog.parser', async (text) => { - const {Entity} = flecks.avocado.Resources; + flecks.avocado.dialog.parser = async (text) => { + const {Entity} = flecks.avocado.resource.Resources; const letters = await Promise.all( parse(text, resolver) .map((letter) => Entity.load({traits: letter})), @@ -23,7 +38,7 @@ export const hooks = { letters, words: await wordize(letters, flecks), }; - }); + }; }, '@flecks/socket.packets': Flecks.provide(require.context('./packets', false, /\.js$/)), }; diff --git a/packages/dialog/src/traits/decorators/initiator.js b/packages/dialog/src/traits/decorators/initiator.js index 5327dd0..da19eab 100644 --- a/packages/dialog/src/traits/decorators/initiator.js +++ b/packages/dialog/src/traits/decorators/initiator.js @@ -38,7 +38,7 @@ export default (Trait, flecks) => class DialogInitiator extends Trait { openDialog: async (text) => { if ('web' === process.env.FLECKS_CORE_BUILD_TARGET) { - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; if (!this.entity.list) { return; } diff --git a/packages/dialog/src/traits/dialog.js b/packages/dialog/src/traits/dialog.js index 79b87a4..2e0bcb1 100644 --- a/packages/dialog/src/traits/dialog.js +++ b/packages/dialog/src/traits/dialog.js @@ -43,7 +43,7 @@ export default (flecks) => { ({ letters: this.$$letters, words: this.$$words, - } = await flecks.get('$avocado/dialog.parser')( + } = await flecks.avocado.dialog.parser( `${text}`, )); if (this.$$letters.length > 0) { diff --git a/packages/dialog/src/wordize.js b/packages/dialog/src/wordize.js index 8b7699f..50177de 100644 --- a/packages/dialog/src/wordize.js +++ b/packages/dialog/src/wordize.js @@ -1,5 +1,5 @@ const createWord = async (letters, flecks) => { - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; const word = await Entity.load({ traits: { DomNode: { diff --git a/packages/entity/src/full-entity.js b/packages/entity/src/full-entity.js index 396cad2..ae599f1 100644 --- a/packages/entity/src/full-entity.js +++ b/packages/entity/src/full-entity.js @@ -1,6 +1,6 @@ export default async (flecks) => { - const {Entity} = flecks.avocado.Resources; - const Traits = flecks.get('$avocado/traits.traits'); + const {Entity} = flecks.avocado.resource.Resources; + const {Traits} = flecks.avocado.traits; const AllTraits = Object.fromEntries( Object.entries(Traits) .filter(([key]) => !Number.isInteger(parseInt(key, 10))), diff --git a/packages/entity/src/persea/controllers/entity/component.jsx b/packages/entity/src/persea/controllers/entity/component.jsx index 73c847d..5af3656 100644 --- a/packages/entity/src/persea/controllers/entity/component.jsx +++ b/packages/entity/src/persea/controllers/entity/component.jsx @@ -25,7 +25,7 @@ const EntityComponent = ({ uri, }) => { const flecks = useFlecks(); - const {Entity, EntityList} = flecks.avocado.Resources; + const {Entity, EntityList} = flecks.avocado.resource.Resources; const [entity, setEntity] = useState(); const dep = uri ? join(uri, path) : path; useEffect(() => { diff --git a/packages/entity/src/persea/controllers/entity/from-buffer.js b/packages/entity/src/persea/controllers/entity/from-buffer.js index 0d6e5d7..ab7bd22 100644 --- a/packages/entity/src/persea/controllers/entity/from-buffer.js +++ b/packages/entity/src/persea/controllers/entity/from-buffer.js @@ -1,7 +1,7 @@ import {JsonController} from '@avocado/resource/persea'; export default (buffer, flecks) => { - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; const json = Entity.withDefaults(JsonController.fromBuffer(buffer)); return { ...json, diff --git a/packages/entity/src/persea/controllers/entity/to-buffer.js b/packages/entity/src/persea/controllers/entity/to-buffer.js index fedb318..d90188a 100644 --- a/packages/entity/src/persea/controllers/entity/to-buffer.js +++ b/packages/entity/src/persea/controllers/entity/to-buffer.js @@ -1,7 +1,7 @@ import {JsonController} from '@avocado/resource/persea'; export default (resource, flecks) => { - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; const json = Entity.withoutDefaults(resource); return JsonController.toBuffer({ ...json, diff --git a/packages/entity/src/persea/controllers/entity/traits/index.jsx b/packages/entity/src/persea/controllers/entity/traits/index.jsx index 219fd68..3e88016 100644 --- a/packages/entity/src/persea/controllers/entity/traits/index.jsx +++ b/packages/entity/src/persea/controllers/entity/traits/index.jsx @@ -60,14 +60,14 @@ const Traits = ({ )); - const Traits = flecks.get('$avocado/traits.traits'); + const {Traits} = flecks.avocado.traits; const suggestible = difference( Object.entries(Traits) .filter(([key]) => !Number.isInteger(parseInt(key, 10))) .map(([, {type}]) => type), types, ); - const Components = flecks.get('$avocado/traits/persea.components'); + const {Components} = flecks.avocado.traits.persea; const tabPanels = types.map((type) => { const Component = Components[type] || JsonTraitComponent; return ( diff --git a/packages/entity/src/resources/entity-list.js b/packages/entity/src/resources/entity-list.js index 1a313ea..9427381 100644 --- a/packages/entity/src/resources/entity-list.js +++ b/packages/entity/src/resources/entity-list.js @@ -26,7 +26,7 @@ export default (flecks) => { await super.acceptPacket(packet); const {s13nType} = packet; if ('create' === s13nType) { - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; const {id} = packet.data.synchronized; const entity = this.synchronized(Entity.resourceId, id); if (entity) { @@ -85,7 +85,7 @@ export default (flecks) => { return; } await this.destroyEntities(); - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; const entityInstances = await Promise.all(json.map((entity) => Entity.load(entity))); for (let i = 0; i < entityInstances.length; i++) { this.addEntity(entityInstances[i]); @@ -105,7 +105,7 @@ export default (flecks) => { packetsFor(informed) { const packets = []; - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; // Visible entities. const {areaToInform} = informed; const previousVisibleEntities = this.$$informedEntities.get(informed); @@ -202,7 +202,7 @@ export default (flecks) => { } toJSON() { - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; const json = []; for (let i = 0; i < this.$$flatEntities.length; i++) { const entity = this.$$flatEntities[i]; diff --git a/packages/entity/src/resources/entity.js b/packages/entity/src/resources/entity.js index 38b517d..cc2449f 100644 --- a/packages/entity/src/resources/entity.js +++ b/packages/entity/src/resources/entity.js @@ -74,7 +74,7 @@ export default (flecks) => { } async $$addTrait(type, json = {}) { - const {[type]: Trait} = flecks.get('$avocado/traits.traits'); + const {[type]: Trait} = flecks.avocado.traits.Traits; if (!Trait) { // eslint-disable-next-line no-console console.error(`Tried to add trait "${type}" which isn't registered!`); @@ -150,7 +150,7 @@ export default (flecks) => { } async addTraits(traits) { - const Traits = flecks.get('$avocado/traits.traits'); + const {Traits} = flecks.avocado.traits; const reorganized = {}; const add = (type) => { const deps = Traits[type]?.dependencies() || []; @@ -192,7 +192,7 @@ export default (flecks) => { } createContext(locals = {}) { - const {Script} = flecks.avocado.Resources; + const {Script} = flecks.avocado.resource.Resources; return Script.createContext({ ...this.contextOrDefault, ...locals, @@ -200,7 +200,7 @@ export default (flecks) => { } static dependencyTree(types) { - const Traits = flecks.get('$avocado/traits.traits'); + const {Traits} = flecks.avocado.traits; const tree = new Set(types); const checking = types; while (checking.length > 0) { @@ -330,7 +330,7 @@ export default (flecks) => { const implementation = this.$$hooks[hook].find(({type: hookType}) => hookType === type); this.$$hooks[hook].splice(this.$$hooks[hook].indexOf(implementation), 1); } - const {[type]: Trait} = flecks.get('$avocado/traits.traits'); + const {[type]: Trait} = flecks.avocado.traits.Traits; const properties = enumerateTraitAccessorKeys(Trait.prototype); for (let i = 0; i < properties.length; ++i) { const property = properties[i]; @@ -453,7 +453,7 @@ export default (flecks) => { } static withDefaults(json = {}) { - const Traits = flecks.get('$avocado/traits.traits'); + const {Traits} = flecks.avocado.traits; return { ...json, traits: Object.entries(json.traits) @@ -467,7 +467,7 @@ export default (flecks) => { } static withoutDefaults(json) { - const Traits = flecks.get('$avocado/traits.traits'); + const {Traits} = flecks.avocado.traits; const without = { ...json, traits: Object.entries(json.traits) diff --git a/packages/entity/src/traits/alive.js b/packages/entity/src/traits/alive.js index fd73845..b0a9fa6 100644 --- a/packages/entity/src/traits/alive.js +++ b/packages/entity/src/traits/alive.js @@ -68,7 +68,7 @@ export default (flecks) => class Alive extends decorate(Trait) { async die() { this.entity.emit('startedDying'); - const {Script} = flecks.avocado.Resources; + const {Script} = flecks.avocado.resource.Resources; const deathScript = await Script.load(this.params.deathScript, this.entity.contextOrDefault); await this.entity.addTickingPromise(deathScript.tickingPromise()); const died = this.entity.invokeHookFlat('died'); @@ -117,7 +117,7 @@ export default (flecks) => class Alive extends decorate(Trait) { async load(json) { await super.load(json); - const {Script} = flecks.avocado.Resources; + const {Script} = flecks.avocado.resource.Resources; this.$$deathCheck = await Script.load(this.params.deathCheck, this.entity.contextOrDefault); } diff --git a/packages/entity/src/traits/spawner.js b/packages/entity/src/traits/spawner.js index 4bd7d64..e8a78d3 100644 --- a/packages/entity/src/traits/spawner.js +++ b/packages/entity/src/traits/spawner.js @@ -224,7 +224,7 @@ export default (flecks) => class Spawner extends decorate(Trait) { const childIndex = this.$$children.length; this.$$children.push(null); const list = this.destinationEntityList(); - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; const child = await Entity.load(json); this.$$children[childIndex] = child; // Listen for destroy event. diff --git a/packages/entity/test/alive.js b/packages/entity/test/alive.js index 0b63083..60956a1 100644 --- a/packages/entity/test/alive.js +++ b/packages/entity/test/alive.js @@ -19,7 +19,7 @@ beforeEach(async () => { }, }); await Promise.all(flecks.invokeFlat('@flecks/core.starting')); - ({Entity} = flecks.avocado.Resources); + ({Entity} = flecks.avocado.resource.Resources); }); afterEach(() => { flecks.destroy(); diff --git a/packages/entity/test/directional.js b/packages/entity/test/directional.js index 7d8504f..e5bce3d 100644 --- a/packages/entity/test/directional.js +++ b/packages/entity/test/directional.js @@ -18,7 +18,7 @@ beforeEach(async () => { }, }); await Promise.all(flecks.invokeFlat('@flecks/core.starting')); - ({Entity} = flecks.avocado.Resources); + ({Entity} = flecks.avocado.resource.Resources); }); afterEach(() => { flecks.destroy(); diff --git a/packages/entity/test/entity.js b/packages/entity/test/entity.js index 812dacc..d8ef0a6 100644 --- a/packages/entity/test/entity.js +++ b/packages/entity/test/entity.js @@ -17,7 +17,7 @@ beforeEach(async () => { }, }); await Promise.all(flecks.invokeFlat('@flecks/core.starting')); - ({Entity} = flecks.avocado.Resources); + ({Entity} = flecks.avocado.resource.Resources); }); afterEach(() => { flecks.destroy(); @@ -36,7 +36,7 @@ it('can add and remove traits', async () => { } }; - flecks.set('$avocado/traits.traits.TestTrait', TestTrait); + flecks.avocado.traits.Traits['TestTrait'] = TestTrait; await entity.addTrait('TestTrait'); expect(entity.is('TestTrait')).to.be.true; entity.removeTrait('TestTrait'); @@ -55,7 +55,7 @@ it('can add traits asynchronously', async () => { } } - flecks.set('$avocado/traits.traits.Async', AsyncTrait); + flecks.avocado.traits.Traits['Async'] = AsyncTrait; const start = Date.now(); await Entity.load({ traits: { @@ -95,8 +95,8 @@ it('can invoke hooks', async () => { } } - flecks.set('$avocado/traits.traits.AnotherTrait', AnotherTrait); - flecks.set('$avocado/traits.traits.YetAnotherTrait', YetAnotherTrait); + flecks.avocado.traits.Traits['AnotherTrait'] = AnotherTrait; + flecks.avocado.traits.Traits['YetAnotherTrait'] = YetAnotherTrait; const entity = new Entity(); await entity.addTrait('AnotherTrait'); await entity.addTrait('YetAnotherTrait'); diff --git a/packages/entity/test/json.js b/packages/entity/test/json.js index bb1c653..f711462 100644 --- a/packages/entity/test/json.js +++ b/packages/entity/test/json.js @@ -17,7 +17,7 @@ beforeEach(async () => { }, }); await Promise.all(flecks.invokeFlat('@flecks/core.starting')); - ({Entity} = flecks.avocado.Resources); + ({Entity} = flecks.avocado.resource.Resources); }); afterEach(() => { flecks.destroy(); diff --git a/packages/entity/test/mobile.js b/packages/entity/test/mobile.js index 47e426e..a7aff23 100644 --- a/packages/entity/test/mobile.js +++ b/packages/entity/test/mobile.js @@ -17,7 +17,7 @@ beforeEach(async () => { }, }); await Promise.all(flecks.invokeFlat('@flecks/core.starting')); - ({Entity} = flecks.avocado.Resources); + ({Entity} = flecks.avocado.resource.Resources); }); afterEach(() => { flecks.destroy(); diff --git a/packages/entity/test/perishable.js b/packages/entity/test/perishable.js index 3b6b55e..13fb618 100644 --- a/packages/entity/test/perishable.js +++ b/packages/entity/test/perishable.js @@ -17,7 +17,7 @@ beforeEach(async () => { }, }); await Promise.all(flecks.invokeFlat('@flecks/core.starting')); - ({Entity} = flecks.avocado.Resources); + ({Entity} = flecks.avocado.resource.Resources); }); afterEach(() => { flecks.destroy(); diff --git a/packages/entity/test/positioned.js b/packages/entity/test/positioned.js index e8ed8e6..bdec516 100644 --- a/packages/entity/test/positioned.js +++ b/packages/entity/test/positioned.js @@ -17,7 +17,7 @@ beforeEach(async () => { }, }); await Promise.all(flecks.invokeFlat('@flecks/core.starting')); - ({Entity} = flecks.avocado.Resources); + ({Entity} = flecks.avocado.resource.Resources); }); afterEach(() => { flecks.destroy(); diff --git a/packages/entity/test/spawner.js b/packages/entity/test/spawner.js index a1bb5ac..be6c70a 100644 --- a/packages/entity/test/spawner.js +++ b/packages/entity/test/spawner.js @@ -19,7 +19,7 @@ beforeEach(async () => { }, }); await Promise.all(flecks.invokeFlat('@flecks/core.starting')); - ({Entity, EntityList} = flecks.avocado.Resources); + ({Entity, EntityList} = flecks.avocado.resource.Resources); }); afterEach(() => { flecks.destroy(); diff --git a/packages/input/src/traits/interactive.js b/packages/input/src/traits/interactive.js index 7e3a3eb..d7ac14f 100644 --- a/packages/input/src/traits/interactive.js +++ b/packages/input/src/traits/interactive.js @@ -31,7 +31,7 @@ export default (flecks) => class Interactive extends decorate(Trait) { return { interact: async (initiator) => { - const {Script} = flecks.avocado.Resources; + const {Script} = flecks.avocado.resource.Resources; const script = await Script.load(this.params.interactScript, { entity: this.entity, initiator, diff --git a/packages/physics/src/persea/traits/emitter.jsx b/packages/physics/src/persea/traits/emitter.jsx index b1a32e0..337d718 100644 --- a/packages/physics/src/persea/traits/emitter.jsx +++ b/packages/physics/src/persea/traits/emitter.jsx @@ -17,7 +17,7 @@ const Emitter = memo(({ path, }) => { const flecks = useFlecks(); - const {Emitted} = flecks.get('$avocado/traits.traits'); + const {Emitted} = flecks.avocado.traits.Traits; return (
{ const flecks = useFlecks(); const patch = useJsonPatcher(); - const {EntityList} = flecks.avocado.Resources; + const {EntityList} = flecks.avocado.resource.Resources; const entityList = new EntityList(); const entityListView = new EntityListView(entityList); entityList.addEntity(entity); diff --git a/packages/physics/src/traits/collider.js b/packages/physics/src/traits/collider.js index fdc9041..d0ebad6 100644 --- a/packages/physics/src/traits/collider.js +++ b/packages/physics/src/traits/collider.js @@ -145,7 +145,7 @@ export default (flecks) => class Collider extends decorate(Trait) { } async pushCollisionTickingPromise(codeOrUri, other, incident) { - const {Script} = flecks.avocado.Resources; + const {Script} = flecks.avocado.resource.Resources; this.entity.addTickingPromise(Script.loadTickingPromise(codeOrUri, { ...this.entity.contextOrDefault, incident, diff --git a/packages/physics/src/traits/emitted.js b/packages/physics/src/traits/emitted.js index 31ae03b..eb0bb4c 100644 --- a/packages/physics/src/traits/emitted.js +++ b/packages/physics/src/traits/emitted.js @@ -108,7 +108,7 @@ export default (flecks) => class Emitted extends decorate(Trait) { if (!this.params.onDead) { return; } - const {Script} = flecks.avocado.Resources; + const {Script} = flecks.avocado.resource.Resources; this.entity.addTickingPromise(Script.loadTickingPromise(this.params.onDead, { ...this.entity.contextOrDefault, })); diff --git a/packages/physics/src/traits/emitter.js b/packages/physics/src/traits/emitter.js index 33bd71f..db49833 100644 --- a/packages/physics/src/traits/emitter.js +++ b/packages/physics/src/traits/emitter.js @@ -59,7 +59,7 @@ export default (flecks) => class Emitter extends decorate(Trait) { } async emitParticleJson(json) { - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; let entity; if (this.$$pool.length > 0) { entity = this.$$pool.pop(); @@ -282,7 +282,7 @@ export default (flecks) => class Emitter extends decorate(Trait) { } static withDefaults(json = {}) { - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; return { params: { ...this.defaultParamsWith(json.params || {}), @@ -297,7 +297,7 @@ export default (flecks) => class Emitter extends decorate(Trait) { } static withoutDefaults(json) { - const {Entity} = flecks.avocado.Resources; + const {Entity} = flecks.avocado.resource.Resources; return { params: { ...this.defaultParamsWith(json.params || {}), diff --git a/packages/resource/src/index.js b/packages/resource/src/index.js index 15a435d..899f655 100644 --- a/packages/resource/src/index.js +++ b/packages/resource/src/index.js @@ -18,13 +18,16 @@ export const hooks = { if (!this.avocado) { this.avocado = {}; } - this.avocado.Resources = {}; + if (!this.avocado.resource) { + this.avocado.resource = {}; + } + this.avocado.resource.Resources = {}; } } ), '@flecks/core.starting': (flecks) => { - flecks.avocado.Resources = flecks.gather( + flecks.avocado.resource.Resources = flecks.gather( '@avocado/resource.resources', { idProperty: 'resourceId', diff --git a/packages/resource/src/persea/hooks/use-resource-controller.js b/packages/resource/src/persea/hooks/use-resource-controller.js index b8410d6..7bc3036 100644 --- a/packages/resource/src/persea/hooks/use-resource-controller.js +++ b/packages/resource/src/persea/hooks/use-resource-controller.js @@ -2,6 +2,6 @@ import {useFlecks} from '@flecks/react'; export default (uri) => ( useFlecks() - .get('$avocado/resource/persea.controllers') + .avocado.resource.persea.Controllers .find(({matcher}) => uri.match(matcher)) ); diff --git a/packages/resource/src/persea/index.js b/packages/resource/src/persea/index.js index a772688..6337af4 100644 --- a/packages/resource/src/persea/index.js +++ b/packages/resource/src/persea/index.js @@ -22,6 +22,24 @@ export { }; export const hooks = { + '@flecks/core.mixin': (Flecks) => ( + class FlecksWithAvocadoResourcePersea extends Flecks { + + constructor(...args) { + super(...args); + if (!this.avocado) { + this.avocado = {}; + } + if (!this.avocado.resource) { + this.avocado.resource = {}; + } + this.avocado.resource.persea = { + Controllers: {}, + }; + } + + } + ), '@flecks/core.starting': async (flecks) => { const Controllers = ( await flecks.invokeSequentialAsync('@avocado/resource/persea.controllers') @@ -31,7 +49,7 @@ export const hooks = { TextController, BinaryController, ); - flecks.set('$avocado/resource/persea.controllers', Controllers); + this.avocado.resource.persea.Controllers = Controllers; }, '@flecks/redux.reducers': () => reducer, }; diff --git a/packages/s13n/src/synchronized/client.js b/packages/s13n/src/synchronized/client.js index b6bb692..1d8ab10 100644 --- a/packages/s13n/src/synchronized/client.js +++ b/packages/s13n/src/synchronized/client.js @@ -30,7 +30,7 @@ export default (flecks) => (Resource) => ( } async createSynchronized(type, id, json) { - const {[type]: Resource} = flecks.avocado.Resources; + const {[type]: Resource} = flecks.avocado.resource.Resources; if (!(type in this.$$synchronized)) { this.$$synchronized[type] = {}; } diff --git a/packages/timing/src/persea/components/animation-visualization.jsx b/packages/timing/src/persea/components/animation-visualization.jsx index d72f82e..b30de31 100644 --- a/packages/timing/src/persea/components/animation-visualization.jsx +++ b/packages/timing/src/persea/components/animation-visualization.jsx @@ -18,7 +18,7 @@ import { const AnimationVisualization = ({json}) => { const flecks = useFlecks(); // const {uuid} = useParams(); - const {Animation} = flecks.avocado.Resources; + const {Animation} = flecks.avocado.resource.Resources; const [animations, setAnimations] = useState([]); const [container] = useState(new Container()); useEffect(() => { diff --git a/packages/timing/src/persea/traits/animated/animation.jsx b/packages/timing/src/persea/traits/animated/animation.jsx index 5b94757..57fa72c 100644 --- a/packages/timing/src/persea/traits/animated/animation.jsx +++ b/packages/timing/src/persea/traits/animated/animation.jsx @@ -29,7 +29,7 @@ const Animation = ({ if (!fullJson) { return; } - const {Animation} = flecks.avocado.Resources; + const {Animation} = flecks.avocado.resource.Resources; const loadJson = async () => { const animationView = new AnimationView(await Animation.load(fullJson)); const drawCross = (primitives, origin, color) => { diff --git a/packages/timing/src/traits/animated.js b/packages/timing/src/traits/animated.js index ee89072..8f4929e 100644 --- a/packages/timing/src/traits/animated.js +++ b/packages/timing/src/traits/animated.js @@ -192,7 +192,7 @@ export default (flecks) => class Animated extends decorate(Trait) { async load(json) { await super.load(json); if (Object.keys(this.params.animations).length > 0) { - const {Animation} = flecks.avocado.Resources; + const {Animation} = flecks.avocado.resource.Resources; const animations = await mapValuesAsync( this.params.animations, (json) => Animation.load(json), diff --git a/packages/topdown/src/persea/controllers/room/component.jsx b/packages/topdown/src/persea/controllers/room/component.jsx index 125c6f0..35a6d87 100644 --- a/packages/topdown/src/persea/controllers/room/component.jsx +++ b/packages/topdown/src/persea/controllers/room/component.jsx @@ -41,14 +41,14 @@ const RoomComponent = ({ const {uri, uuid} = useContext(Context); const dispatch = useDispatch(); const flecks = useFlecks(); - const {Room, Tiles} = flecks.avocado.Resources; + const {Room, Tiles} = flecks.avocado.resource.Resources; const previousResource = usePrevious(resource); const [events, setEvents] = useState(); const [scale, setScale] = useState(3); const [side, setSide] = useState(0); const [room, setRoom] = useState(); const [roomRenderable, setRoomRenderable] = useState(); - const roomSides = flecks.get('$avocado/topdown/persea.room-sides'); + const {RoomSides} = flecks.avocado.topdown.persea; // Stage event stream. const onRef = useCallback((stage) => { setEvents(stage?.events()); @@ -236,7 +236,7 @@ const RoomComponent = ({
{ React.createElement( - roomSides[side], + RoomSides[side], { active: true, events, diff --git a/packages/topdown/src/persea/index.js b/packages/topdown/src/persea/index.js index 016aaa6..8b09e2d 100644 --- a/packages/topdown/src/persea/index.js +++ b/packages/topdown/src/persea/index.js @@ -10,11 +10,28 @@ export const hooks = { '@avocado/resource/persea.controllers': () => [ RoomController, ], + '@flecks/core.mixin': (Flecks) => ( + class FlecksWithAvocadoTopdownPersea extends Flecks { + + constructor(...args) { + super(...args); + if (!this.avocado) { + this.avocado = {}; + } + if (!this.avocado.topdown) { + this.avocado.topdown = {}; + } + this.avocado.topdown.persea = { + RoomSides: {}, + }; + } + + } + ), '@flecks/core.starting': (flecks) => { - flecks.set( - '$avocado/topdown/persea.room-sides', - flecks.invokeFlat('@avocado/topdown/persea.room-sides').flat(), - ); + flecks.avocado.topdown.persea.RoomSides = flecks.invokeFlat( + '@avocado/topdown/persea.room-sides', + ).flat(); }, '@avocado/topdown/persea.room-sides': () => [ TilesSide, diff --git a/packages/topdown/src/persea/room-sides/tiles-side/index.jsx b/packages/topdown/src/persea/room-sides/tiles-side/index.jsx index e6b1d8e..db69bf7 100644 --- a/packages/topdown/src/persea/room-sides/tiles-side/index.jsx +++ b/packages/topdown/src/persea/room-sides/tiles-side/index.jsx @@ -448,7 +448,7 @@ function TilesPage({ { - const {Tiles} = flecks.avocado.Resources; + const {Tiles} = flecks.avocado.resource.Resources; // Create new tiles. const newTiles = new Tiles(); newTiles.area = newArea; diff --git a/packages/topdown/src/resources/room.js b/packages/topdown/src/resources/room.js index 87ffd74..16e5cbd 100644 --- a/packages/topdown/src/resources/room.js +++ b/packages/topdown/src/resources/room.js @@ -24,7 +24,7 @@ export default (flecks) => { constructor() { super(); this.$$s13nId = s13nId++; - const {EntityList} = flecks.avocado.Resources; + const {EntityList} = flecks.avocado.resource.Resources; this.entityList = new EntityList(); this.entityList.on('entityAdded', this.onEntityAdded, this); this.entityList.on('entityRemoved', this.onEntityRemoved, this); @@ -66,7 +66,7 @@ export default (flecks) => { } async loadTiles(tiles) { - const {Tiles} = flecks.avocado.Resources; + const {Tiles} = flecks.avocado.resource.Resources; this.removeAllTiles(); (await Promise.all(tiles.map((json, i) => Tiles.load({s13nId: i, ...json})))) .forEach((tiles) => { diff --git a/packages/topdown/test/layer.js b/packages/topdown/test/layer.js index c49cc9a..e315acb 100644 --- a/packages/topdown/test/layer.js +++ b/packages/topdown/test/layer.js @@ -13,7 +13,7 @@ // await Promise.all(flecks.invokeFlat('@flecks/core/starting')); // }); // it('has sane defaults', async () => { -// const {Layer} = flecks.avocado.Resources; +// const {Layer} = flecks.avocado.resource.Resources; // const layer = new Layer(); // expect(Object.keys(layer.entities).length).to.equal(0); // expect(layer.tiles.size).to.deep.equal([0, 0]); diff --git a/packages/topdown/test/tiles.js b/packages/topdown/test/tiles.js index 84f7c99..0ca6a77 100644 --- a/packages/topdown/test/tiles.js +++ b/packages/topdown/test/tiles.js @@ -11,13 +11,13 @@ // await Promise.all(flecks.invokeFlat('@flecks/core/starting')); // }); // it("has sane defaults", async () => { -// const {Tiles} = flecks.avocado.Resources; +// const {Tiles} = flecks.avocado.resource.Resources; // const tiles = new Tiles(); // expect(tiles.size).to.deep.equal([0, 0]); // expect(tiles.data.length).to.equal(0); // }); // it("gets and sets tile data", async () => { -// const {Tiles} = flecks.avocado.Resources; +// const {Tiles} = flecks.avocado.resource.Resources; // const tiles = new Tiles({data: [0, 1, 2, 3], size: [2, 2]}); // expect(tiles.tileAt([0, 0])).to.equal(0); // expect(tiles.tileAt([1, 0])).to.equal(1); @@ -30,7 +30,7 @@ // expect(tiles.data).to.deep.equal([69, 420, 311, 42]); // }); // it("can get a data slice", async () => { -// const {Tiles} = flecks.avocado.Resources; +// const {Tiles} = flecks.avocado.resource.Resources; // const tiles = new Tiles( // { // data: [ @@ -50,7 +50,7 @@ // expect(tiles.slice([1, 1, 0, 0])).to.deep.equal([]); // }); // it("can get convex hulls around indices", () => { -// const {Tiles} = flecks.avocado.Resources; +// const {Tiles} = flecks.avocado.resource.Resources; // const hulls = [ // [ // [2, 0], @@ -81,7 +81,7 @@ // expect(tiles.indexHulls(new Set([1]))).to.deep.equal(hulls); // }); // it("can stamp at", async () => { -// const {Tiles} = flecks.avocado.Resources; +// const {Tiles} = flecks.avocado.resource.Resources; // const tiles = new Tiles( // { // data: [ @@ -112,7 +112,7 @@ // ]); // }); // it("can handle pathological hulls", () => { -// const {Tiles} = flecks.avocado.Resources; +// const {Tiles} = flecks.avocado.resource.Resources; // const hulls = [ // [ // [ 0, 0 ], diff --git a/packages/traits/src/index.js b/packages/traits/src/index.js index e274a58..937b201 100644 --- a/packages/traits/src/index.js +++ b/packages/traits/src/index.js @@ -2,7 +2,22 @@ export {default as Trait} from './trait'; export {default as StateProperty} from './state-property'; export const hooks = { + '@flecks/core.mixin': (Flecks) => ( + class FlecksWithAvocadoTraitrs extends Flecks { + + constructor(...args) { + super(...args); + if (!this.avocado) { + this.avocado = {}; + } + this.avocado.traits = { + Traits: {}, + }; + } + + } + ), '@flecks/core.starting': (flecks) => { - flecks.set('$avocado/traits.traits', flecks.gather('@avocado/traits.traits')); + flecks.avocado.traits.Traits = flecks.gather('@avocado/traits.traits'); }, }; diff --git a/packages/traits/src/persea/index.js b/packages/traits/src/persea/index.js index 4d2bb50..c3b9373 100644 --- a/packages/traits/src/persea/index.js +++ b/packages/traits/src/persea/index.js @@ -1,8 +1,25 @@ export const hooks = { + '@flecks/core.mixin': (Flecks) => ( + class FlecksWithAvocadoTraitrs extends Flecks { + + constructor(...args) { + super(...args); + if (!this.avocado) { + this.avocado = {}; + } + if (!this.avocado.traits) { + this.avocado.traits = {}; + } + this.avocado.traits.persea = { + Components: {}, + }; + } + + } + ), '@flecks/core.starting': async (flecks) => { - flecks.set( - '$avocado/traits/persea.components', - flecks.invokeMerge('@avocado/traits/persea.components'), + flecks.avocado.traits.persea.Components = flecks.invokeMerge( + '@avocado/traits/persea.components', ); }, };