Source: rendering/renderers/shared/startup/HelloSystem.ts

import { ExtensionType } from '../../../../extensions/Extensions';
import { sayHello } from '../../../../utils/sayHello';

import type { Renderer } from '../../types';
import type { System } from '../system/System';

/**
 * Options for the startup system.
 * @ignore
 */
export interface HelloSystemOptions
{
    /** Whether to log the version and type information of renderer to console. */
    hello: boolean;
}
/** A simple system responsible for initiating the renderer. */
export class HelloSystem implements System<HelloSystemOptions>
{
    /** @ignore */
    public static extension = {
        type: [
            ExtensionType.WebGLSystem,
            ExtensionType.WebGPUSystem,
            ExtensionType.CanvasSystem,
        ],
        name: 'hello',
        priority: 0,
    } as const;

    /** @ignore */
    public static defaultOptions: HelloSystemOptions = {
        /**
         * hello
         * @default false
         */
        hello: false,
    };

    private readonly _renderer: Renderer;

    constructor(renderer: Renderer)
    {
        this._renderer = renderer;
    }

    /**
     * It all starts here! This initiates every system, passing in the options for any system by name.
     * @param options - the config for the renderer and all its systems
     */
    public init(options: HelloSystemOptions): void
    {
        if (options.hello)
        {
            // eslint-disable-next-line no-console
            sayHello(this._renderer.name);
        }
    }
}