import {PerspectiveCamera, Scene, WebGLRenderer} from "three";
import Signal from "../../core/events/signal/Signal";
import Vector2 from "../../core/geom/Vector2";
import Vector3 from "../../core/geom/Vector3";
import View from "../../view/View";
import {MaterialManager} from "./material/manager/MaterialManager.js";
import {RenderLayerManager} from "./render/layers/RenderLayerManager";

interface IGraphicsEngineSignals {
    readonly preRender: Signal
    readonly postRender: Signal
}

export class GraphicsEngine {
    readonly scene: Scene
    readonly camera: PerspectiveCamera

    readonly viewport: View

    /**
     * @deprecated
     */
    readonly layers: RenderLayerManager

    readonly on: IGraphicsEngineSignals

    get domElement(): HTMLCanvasElement

    public needDraw: boolean
    public autoDraw: boolean

    render(): void

    normalizeViewportPoint(input: Vector3 | Vector2, result: Vector2 | Vector3): void

    viewportProjectionRay(x: number, y: number, source: Vector3, direction: Vector3): void

    getRenderer(): WebGLRenderer

    getMaterialManager():MaterialManager
}
