import {resource} from '@avocado/resource'; import {Latus} from '@latus/core'; import {expect} from 'chai'; let latus; let Entity; let EntityList; beforeEach(async () => { latus = Latus.mock({ '@avocado/behavior': require('@avocado/behavior'), '@avocado/entity': require('../src'), '@avocado/resource': require('@avocado/resource'), '@avocado/traits': require('@avocado/traits'), }); await Promise.all(latus.invokeFlat('@latus/core/starting')); ({fromResourceType: {Entity, EntityList}} = resource(latus)); }); 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); await entity.killAllChildren(); expect(Object.keys(list.entities)).to.have.lengthOf(1); }); });