import {resource} from '@avocado/resource'; import {normalize} from '@avocado/s13n'; import {Latus} from '@latus/core'; import {expect} from 'chai'; let latus; let Entity; beforeEach(async () => { latus = Latus.mock({ '@avocado/entity': require('../src'), '@avocado/resource': require('@avocado/resource'), '@avocado/traits': require('@avocado/traits'), '@latus/socket': require('@latus/socket'), }); await Promise.all(latus.invokeFlat('@latus/core/starting')); ({fromResourceType: {Entity}} = resource(latus)); }); describe('Directional', () => { let entity; beforeEach(async () => { entity = await Entity.load({ traits: { Directional: { params: { directionCount: 4, }, }, }, }); }); it('exists', async () => { expect(entity.is('Directional')).to.be.true; }); it('tracks movement', async () => { entity.emit('movementRequest', [1, 0]); expect(entity.direction).to.equal(1); entity.emit('movementRequest', [0, 1]); expect(entity.direction).to.equal(2); entity.emit('movementRequest', [-1, 0]); expect(entity.direction).to.equal(3); entity.emit('movementRequest', [0, -1]); expect(entity.direction).to.equal(0); }); it('generates and accepts direction packets', async () => { entity.direction = 2; const packets = normalize(latus, entity.trait('Directional').packets()); expect(packets).to.have.lengthOf(1); expect(packets[0].constructor.type).to.equal('TraitUpdateDirectionalDirection'); expect(packets[0].data).to.equal(2); const entity2 = await Entity.load({ traits: { Directional: {}, }, }); expect(entity2.direction).to.equal(0); entity2.trait('Directional').acceptPacket(packets[0]); expect(entity2.direction).to.equal(2); }); });