import {resource} from '@avocado/resource'; import {Latus} from '@latus/core'; import {expect} from 'chai'; const {name} = require('../package.json'); describe(name, () => { let latus; let Entity; let EntityList; beforeEach(async () => { latus = Latus.mock([ ['@avocado/entity', `${__dirname}/../src`], '@avocado/resource', '@avocado/traits', ]); await Promise.all(latus.invokeFlat('@latus/core/starting')); ({fromResourceType: {Entity, EntityList}} = resource(latus)); }); describe('Traits', () => { describe('Spawner', () => { let entity; let list; beforeEach(async () => { entity = await Entity.load({ traits: { Listed: {}, Spawner: { params: { spawns: { testy: { traits: { Alive: {}, Listed: {}, Positioned: {}, }, }, }, }, }, }, }); list = new EntityList(); list.addEntity(entity); }); it('exists', async () => { expect(entity.is('Spawner')).to.be.true; }); it('can spawn from key', async () => { const spawned = await entity.spawn('testy'); expect(spawned.is('Alive')).to.be.true; const spawned2 = await entity.spawn('testy', { traits: { Alive: { state: { life: 50, }, }, }, }); expect(spawned2.life).to.equal(50); const spawned3 = await entity.spawnAt('testy', [69, 420]); expect(spawned3.position).to.deep.equal([69, 420]); }); it('can spawn from arbitrary JSON', async () => { const spawned = await entity.spawnRaw({ traits: { Listed: {}, Mobile: {}, }, }); expect(spawned.is('Mobile')).to.be.true; const spawned2 = await entity.spawnRawAt( { traits: { Listed: {}, Mobile: {}, }, }, [311, 200], ); expect(spawned2.position).to.deep.equal([311, 200]); }); it('can kill all children', async () => { const COUNT = 15; for (let i = 0; i < COUNT; ++i) { await entity.spawnRaw({ traits: { Existent: {}, Listed: {}, Mobile: {}, }, }); } expect(Object.keys(list.entities)).to.have.lengthOf(COUNT + 1); entity.killAllChildren(); expect(Object.keys(list.entities)).to.have.lengthOf(1); }); }); }); });