53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
|
import {expect, test} from 'vitest';
|
||
|
|
||
|
import Components from '@/ecs/components/index.js';
|
||
|
import Ecs from '@/ecs/ecs.js';
|
||
|
|
||
|
import Emitter from './emitter.js';
|
||
|
|
||
|
test('emits particles at once', async () => {
|
||
|
const ecs = new Ecs({
|
||
|
Components,
|
||
|
});
|
||
|
const emitter = new Emitter(ecs);
|
||
|
const stream = emitter.emit({
|
||
|
count: 5,
|
||
|
frequency: 0,
|
||
|
entity: {},
|
||
|
});
|
||
|
expect(await stream.scan((r) => r + 1, 0).toPromise()).to.equal(5);
|
||
|
});
|
||
|
|
||
|
test('emits particles over time', async () => {
|
||
|
const ecs = new Ecs({
|
||
|
Components,
|
||
|
});
|
||
|
const emitter = new Emitter(ecs);
|
||
|
const stream = emitter.emit({
|
||
|
count: 2,
|
||
|
frequency: 0.1,
|
||
|
});
|
||
|
const current = stream.toProperty();
|
||
|
expect(await new Promise((resolve) => {
|
||
|
current.onValue(resolve);
|
||
|
}))
|
||
|
.to.deep.include({id: 1});
|
||
|
expect(ecs.get(1))
|
||
|
.to.not.be.undefined;
|
||
|
expect(ecs.get(2))
|
||
|
.to.be.undefined;
|
||
|
emitter.tick(0.06);
|
||
|
expect(await new Promise((resolve) => {
|
||
|
current.onValue(resolve);
|
||
|
}))
|
||
|
.to.deep.include({id: 1});
|
||
|
emitter.tick(0.06);
|
||
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
||
|
expect(await new Promise((resolve) => {
|
||
|
current.onValue(resolve);
|
||
|
}))
|
||
|
.to.deep.include({id: 2});
|
||
|
expect(ecs.get(2))
|
||
|
.to.not.be.undefined;
|
||
|
});
|