28 lines
738 B
JavaScript
28 lines
738 B
JavaScript
import Arbitrary from '@/ecs/arbitrary.js';
|
|
import Base from '@/ecs/base.js';
|
|
import Schema from '@/ecs/schema.js';
|
|
import gather from '@/engine/gather.js';
|
|
|
|
const specificationsOrClasses = gather(
|
|
import.meta.glob('./*.js', {eager: true, import: 'default'}),
|
|
);
|
|
|
|
const Components = {};
|
|
for (const name in specificationsOrClasses) {
|
|
const specificationOrClass = specificationsOrClasses[name];
|
|
if (specificationOrClass instanceof Base) {
|
|
Components[name] = specificationOrClass;
|
|
}
|
|
else {
|
|
Components[name] = class Component extends Arbitrary {
|
|
static name = name;
|
|
static schema = new Schema({
|
|
type: 'object',
|
|
properties: specificationOrClass,
|
|
});
|
|
};
|
|
}
|
|
}
|
|
|
|
export default Components;
|