/** * Options accepted by {@link Entity#addComponent} for each built-in component beyond what its * component class declares - option names that are not component properties (see * {@link ComponentSystem#extraDataProperties}), callbacks, and properties that also accept a plain * array or plain data. Each property replaces the same-named property of the options derived from * the component class; {@link ComponentOptions} applies them. Keyed by component name, like the * systems in this registry. */ export type ComponentOptionsOverrides = { /** * - Overrides of the `anim` component. */ anim: AnimComponentOptionsOverrides; /** * - Overrides of the `button` component. */ button: ButtonComponentOptionsOverrides; /** * - Overrides of the `camera` component. */ camera: CameraComponentOptionsOverrides; /** * - Overrides of the `collision` component. */ collision: CollisionComponentOptionsOverrides; /** * - Overrides of the `element` component. */ element: ElementComponentOptionsOverrides; /** * - Overrides of the `gsplat` component. */ gsplat: GSplatComponentOptionsOverrides; /** * - Overrides of the `layoutgroup` component. */ layoutgroup: LayoutGroupComponentOptionsOverrides; /** * - Overrides of the `light` component. */ light: LightComponentOptionsOverrides; /** * - Overrides of the `model` component. */ model: ModelComponentOptionsOverrides; /** * - Overrides of the `particlesystem` component. */ particlesystem: ParticleSystemComponentOptionsOverrides; /** * - Overrides of the `render` component. */ render: RenderComponentOptionsOverrides; /** * - Overrides of the `rigidbody` component. */ rigidbody: RigidBodyComponentOptionsOverrides; /** * - Overrides of the `screen` component. */ screen: ScreenComponentOptionsOverrides; /** * - Overrides of the `script` component. */ script: ScriptComponentOptionsOverrides; /** * - Overrides of the `scrollview` component. */ scrollview: ScrollViewComponentOptionsOverrides; /** * - Overrides of the `sound` component. */ sound: SoundComponentOptionsOverrides; /** * - Overrides of the `sprite` component. */ sprite: SpriteComponentOptionsOverrides; }; /** * @import { AnimationComponentSystem } from './animation/system.js' * @import { AnimComponentOptionsOverrides } from './anim/system.js' * @import { AnimComponentSystem } from './anim/system.js' * @import { AudioListenerComponentSystem } from './audio-listener/system.js' * @import { ButtonComponentOptionsOverrides } from './button/system.js' * @import { ButtonComponentSystem } from './button/system.js' * @import { CameraComponentOptionsOverrides } from './camera/system.js' * @import { CameraComponentSystem } from './camera/system.js' * @import { CollisionComponentOptionsOverrides } from './collision/system.js' * @import { CollisionComponentSystem } from './collision/system.js' * @import { ComponentSystem } from './system.js' * @import { ElementComponentOptionsOverrides } from './element/system.js' * @import { ElementComponentSystem } from './element/system.js' * @import { Entity } from '../entity.js' * @import { GSplatComponentOptionsOverrides } from './gsplat/system.js' * @import { GSplatComponentSystem } from './gsplat/system.js' * @import { JointComponentSystem } from './joint/system.js' * @import { LayoutChildComponentSystem } from './layout-child/system.js' * @import { LayoutGroupComponentOptionsOverrides } from './layout-group/system.js' * @import { LayoutGroupComponentSystem } from './layout-group/system.js' * @import { LightComponentOptionsOverrides } from './light/system.js' * @import { LightComponentSystem } from './light/system.js' * @import { ModelComponentOptionsOverrides } from './model/system.js' * @import { ModelComponentSystem } from './model/system.js' * @import { ParticleSystemComponentOptionsOverrides } from './particle-system/system.js' * @import { ParticleSystemComponentSystem } from './particle-system/system.js' * @import { RenderComponentOptionsOverrides } from './render/system.js' * @import { RenderComponentSystem } from './render/system.js' * @import { RigidBodyComponentOptionsOverrides } from './rigid-body/system.js' * @import { RigidBodyComponentSystem } from './rigid-body/system.js' * @import { ScreenComponentOptionsOverrides } from './screen/system.js' * @import { ScreenComponentSystem } from './screen/system.js' * @import { ScriptComponentOptionsOverrides } from './script/system.js' * @import { ScriptComponentSystem } from './script/system.js' * @import { ScrollbarComponentSystem } from './scrollbar/system.js' * @import { ScrollViewComponentOptionsOverrides } from './scroll-view/system.js' * @import { ScrollViewComponentSystem } from './scroll-view/system.js' * @import { SoundComponentOptionsOverrides } from './sound/system.js' * @import { SoundComponentSystem } from './sound/system.js' * @import { SpriteComponentOptionsOverrides } from './sprite/system.js' * @import { SpriteComponentSystem } from './sprite/system.js' * @import { ZoneComponentSystem } from './zone/system.js' */ /** * Options accepted by {@link Entity#addComponent} for each built-in component beyond what its * component class declares - option names that are not component properties (see * {@link ComponentSystem#extraDataProperties}), callbacks, and properties that also accept a plain * array or plain data. Each property replaces the same-named property of the options derived from * the component class; {@link ComponentOptions} applies them. Keyed by component name, like the * systems in this registry. * * @typedef {object} ComponentOptionsOverrides * @property {AnimComponentOptionsOverrides} anim - Overrides of the `anim` component. * @property {ButtonComponentOptionsOverrides} button - Overrides of the `button` component. * @property {CameraComponentOptionsOverrides} camera - Overrides of the `camera` component. * @property {CollisionComponentOptionsOverrides} collision - Overrides of the `collision` component. * @property {ElementComponentOptionsOverrides} element - Overrides of the `element` component. * @property {GSplatComponentOptionsOverrides} gsplat - Overrides of the `gsplat` component. * @property {LayoutGroupComponentOptionsOverrides} layoutgroup - Overrides of the `layoutgroup` component. * @property {LightComponentOptionsOverrides} light - Overrides of the `light` component. * @property {ModelComponentOptionsOverrides} model - Overrides of the `model` component. * @property {ParticleSystemComponentOptionsOverrides} particlesystem - Overrides of the `particlesystem` component. * @property {RenderComponentOptionsOverrides} render - Overrides of the `render` component. * @property {RigidBodyComponentOptionsOverrides} rigidbody - Overrides of the `rigidbody` component. * @property {ScreenComponentOptionsOverrides} screen - Overrides of the `screen` component. * @property {ScriptComponentOptionsOverrides} script - Overrides of the `script` component. * @property {ScrollViewComponentOptionsOverrides} scrollview - Overrides of the `scrollview` component. * @property {SoundComponentOptionsOverrides} sound - Overrides of the `sound` component. * @property {SpriteComponentOptionsOverrides} sprite - Overrides of the `sprite` component. * @ignore */ /** * The ComponentSystemRegistry manages the instances of an application's {@link ComponentSystem}s. * {@link AppBase} maintains a single instance of this class which can be accessed via * {@link AppBase#systems}. * * ```javascript * // Set the gravity to zero * app.systems.rigidbody.gravity = new Vec3(0, 0, 0); * * // Set the volume to 50% * app.systems.sound.volume = 0.5; * ``` * * @category Framework */ export class ComponentSystemRegistry extends EventHandler { /** * Gets the {@link AnimComponentSystem} from the registry. * * @type {AnimComponentSystem|undefined} * @readonly */ readonly anim: AnimComponentSystem | undefined; /** * Gets the {@link AnimationComponentSystem} from the registry. * * @type {AnimationComponentSystem|undefined} * @readonly */ readonly animation: AnimationComponentSystem | undefined; /** * Gets the {@link AudioListenerComponentSystem} from the registry. * * @type {AudioListenerComponentSystem|undefined} * @readonly */ readonly audiolistener: AudioListenerComponentSystem | undefined; /** * Gets the {@link ButtonComponentSystem} from the registry. * * @type {ButtonComponentSystem|undefined} * @readonly */ readonly button: ButtonComponentSystem | undefined; /** * Gets the {@link CameraComponentSystem} from the registry. * * @type {CameraComponentSystem|undefined} * @readonly */ readonly camera: CameraComponentSystem | undefined; /** * Gets the {@link CollisionComponentSystem} from the registry. * * @type {CollisionComponentSystem|undefined} * @readonly */ readonly collision: CollisionComponentSystem | undefined; /** * Gets the {@link ElementComponentSystem} from the registry. * * @type {ElementComponentSystem|undefined} * @readonly */ readonly element: ElementComponentSystem | undefined; /** * Gets the {@link GSplatComponentSystem} from the registry. * * @type {GSplatComponentSystem|undefined} * @readonly */ readonly gsplat: GSplatComponentSystem | undefined; /** * Gets the {@link JointComponentSystem} from the registry. * * @type {JointComponentSystem|undefined} * @readonly * @alpha */ readonly joint: JointComponentSystem | undefined; /** * Gets the {@link LayoutChildComponentSystem} from the registry. * * @type {LayoutChildComponentSystem|undefined} * @readonly */ readonly layoutchild: LayoutChildComponentSystem | undefined; /** * Gets the {@link LayoutGroupComponentSystem} from the registry. * * @type {LayoutGroupComponentSystem|undefined} * @readonly */ readonly layoutgroup: LayoutGroupComponentSystem | undefined; /** * Gets the {@link LightComponentSystem} from the registry. * * @type {LightComponentSystem|undefined} * @readonly */ readonly light: LightComponentSystem | undefined; /** * Gets the {@link ModelComponentSystem} from the registry. * * @type {ModelComponentSystem|undefined} * @readonly */ readonly model: ModelComponentSystem | undefined; /** * Gets the {@link ParticleSystemComponentSystem} from the registry. * * @type {ParticleSystemComponentSystem|undefined} * @readonly */ readonly particlesystem: ParticleSystemComponentSystem | undefined; /** * Gets the {@link RenderComponentSystem} from the registry. * * @type {RenderComponentSystem|undefined} * @readonly */ readonly render: RenderComponentSystem | undefined; /** * Gets the {@link RigidBodyComponentSystem} from the registry. * * @type {RigidBodyComponentSystem|undefined} * @readonly */ readonly rigidbody: RigidBodyComponentSystem | undefined; /** * Gets the {@link ScreenComponentSystem} from the registry. * * @type {ScreenComponentSystem|undefined} * @readonly */ readonly screen: ScreenComponentSystem | undefined; /** * Gets the {@link ScriptComponentSystem} from the registry. * * @type {ScriptComponentSystem|undefined} * @readonly */ readonly script: ScriptComponentSystem | undefined; /** * Gets the {@link ScrollbarComponentSystem} from the registry. * * @type {ScrollbarComponentSystem|undefined} * @readonly */ readonly scrollbar: ScrollbarComponentSystem | undefined; /** * Gets the {@link ScrollViewComponentSystem} from the registry. * * @type {ScrollViewComponentSystem|undefined} * @readonly */ readonly scrollview: ScrollViewComponentSystem | undefined; /** * Gets the {@link SoundComponentSystem} from the registry. * * @type {SoundComponentSystem|undefined} * @readonly */ readonly sound: SoundComponentSystem | undefined; /** * Gets the {@link SpriteComponentSystem} from the registry. * * @type {SpriteComponentSystem|undefined} * @readonly */ readonly sprite: SpriteComponentSystem | undefined; /** * Gets the {@link ZoneComponentSystem} from the registry. * * @type {ZoneComponentSystem|undefined} * @readonly * @ignore */ readonly zone: ZoneComponentSystem | undefined; /** * @type {ComponentSystem[]} * @ignore */ list: ComponentSystem[]; /** * Add a component system to the registry. * * @param {ComponentSystem} system - The ComponentSystem instance. * @ignore */ add(system: ComponentSystem): void; /** * Remove a component system from the registry. * * @param {ComponentSystem} system - The ComponentSystem instance. * @ignore */ remove(system: ComponentSystem): void; /** * Destroys all registered component systems. * * @ignore */ destroy(): void; } import type { AnimComponentOptionsOverrides } from './anim/system.js'; import type { ButtonComponentOptionsOverrides } from './button/system.js'; import type { CameraComponentOptionsOverrides } from './camera/system.js'; import type { CollisionComponentOptionsOverrides } from './collision/system.js'; import type { ElementComponentOptionsOverrides } from './element/system.js'; import type { GSplatComponentOptionsOverrides } from './gsplat/system.js'; import type { LayoutGroupComponentOptionsOverrides } from './layout-group/system.js'; import type { LightComponentOptionsOverrides } from './light/system.js'; import type { ModelComponentOptionsOverrides } from './model/system.js'; import type { ParticleSystemComponentOptionsOverrides } from './particle-system/system.js'; import type { RenderComponentOptionsOverrides } from './render/system.js'; import type { RigidBodyComponentOptionsOverrides } from './rigid-body/system.js'; import type { ScreenComponentOptionsOverrides } from './screen/system.js'; import type { ScriptComponentOptionsOverrides } from './script/system.js'; import type { ScrollViewComponentOptionsOverrides } from './scroll-view/system.js'; import type { SoundComponentOptionsOverrides } from './sound/system.js'; import type { SpriteComponentOptionsOverrides } from './sprite/system.js'; import { EventHandler } from '../../core/event-handler.js'; import type { AnimComponentSystem } from './anim/system.js'; import type { AnimationComponentSystem } from './animation/system.js'; import type { AudioListenerComponentSystem } from './audio-listener/system.js'; import type { ButtonComponentSystem } from './button/system.js'; import type { CameraComponentSystem } from './camera/system.js'; import type { CollisionComponentSystem } from './collision/system.js'; import type { ElementComponentSystem } from './element/system.js'; import type { GSplatComponentSystem } from './gsplat/system.js'; import type { JointComponentSystem } from './joint/system.js'; import type { LayoutChildComponentSystem } from './layout-child/system.js'; import type { LayoutGroupComponentSystem } from './layout-group/system.js'; import type { LightComponentSystem } from './light/system.js'; import type { ModelComponentSystem } from './model/system.js'; import type { ParticleSystemComponentSystem } from './particle-system/system.js'; import type { RenderComponentSystem } from './render/system.js'; import type { RigidBodyComponentSystem } from './rigid-body/system.js'; import type { ScreenComponentSystem } from './screen/system.js'; import type { ScriptComponentSystem } from './script/system.js'; import type { ScrollbarComponentSystem } from './scrollbar/system.js'; import type { ScrollViewComponentSystem } from './scroll-view/system.js'; import type { SoundComponentSystem } from './sound/system.js'; import type { SpriteComponentSystem } from './sprite/system.js'; import type { ZoneComponentSystem } from './zone/system.js'; import type { ComponentSystem } from './system.js';