silphius/app/ecs-components/index.js

28 lines
783 B
JavaScript
Raw Normal View History

2024-06-14 15:18:55 -05:00
import Arbitrary from '@/ecs/arbitrary.js';
import Base from '@/ecs/base.js';
import Schema from '@/ecs/schema.js';
2024-06-10 22:42:30 -05:00
import gather from '@/engine/gather.js';
2024-06-14 15:18:55 -05:00
const specificationsOrClasses = gather(
import.meta.glob('./*.js', {eager: true, import: 'default'}),
);
const Components = {};
2024-06-15 19:38:49 -05:00
for (const componentName in specificationsOrClasses) {
const specificationOrClass = specificationsOrClasses[componentName];
2024-06-14 15:18:55 -05:00
if (specificationOrClass instanceof Base) {
2024-06-15 19:38:49 -05:00
Components[componentName] = specificationOrClass;
2024-06-14 15:18:55 -05:00
}
else {
2024-06-15 19:38:49 -05:00
Components[componentName] = class Component extends Arbitrary {
static name = componentName;
2024-06-14 15:18:55 -05:00
static schema = new Schema({
type: 'object',
properties: specificationOrClass,
});
};
}
}
export default Components;