import {resource} from '@avocado/resource'; import {Latus} from '@latus/core'; import {normalize} from '@latus/socket'; 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 = entity.trait('Directional').packets(); expect(packets).to.have.lengthOf(1); expect(packets[0][0]).to.equal('TraitUpdateDirectionalDirection'); expect(packets[0][1]).to.equal(2); const entity2 = await Entity.load({ traits: { Directional: {}, }, }); expect(entity2.direction).to.equal(0); entity2.trait('Directional').acceptPacket(normalize(latus, packets[0])); expect(entity2.direction).to.equal(2); }); });