| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { view } from "./view";
- import { cx_ui } from "./cx-ui.js";
- import { selector } from "./selector.js";
- import { phrase } from "./phrase.js";
- import { space_scene } from "./space-scene.js";
- import { controler } from "./controler.js";
- export class space extends view {
- #canvas;
- #context;
- #scene;
- #on_resize;
- #mouse;
- get canvas() {
- return this.#canvas;
- }
- get mouse() {
- return this.#mouse;
- }
- get context() {
- return this.#context;
- }
- #init_canvas() {
- this.#context = this.canvas.getContext("webgl2");
- this.#context = this.#context || this.canvas.getContext("webgl");
- if (this.#context) {
- return;
- }
- throw new MediaError("WebGL is not supported by browser");
- }
- update_size() {
- this.#scene.update_size(window.innerWidth, window.innerHeight);
- }
- show() {
- const ui = cx_ui.div("ui");
- const render = cx_ui.div("render");
- const back = new phrase("selector.return");
- const return_button = cx_ui.push("return", back, () => {
- this.manager.view = selector;
- });
- this.#canvas = cx_ui.canvas("space-render");
- this.#mouse = new controler();
- ui.appendChild(return_button);
- render.appendChild(this.canvas);
- try {
- this.#init_canvas();
- this.#scene = new space_scene(this);
- this.update_size();
- this.#scene.start();
- } catch (fail) {
- const error = cx_ui.div("error");
- const code = cx_ui.p("code", new phrase("error.webgl-support"));
- error.appendChild(code);
- render.appendChild(error);
- this.canvas.remove();
- console.error(fail);
- }
- this.#on_resize = () => { this.update_size(); };
- this.#mouse.enable();
- window.addEventListener("resize", this.#on_resize);
- return cx_ui.div("container", null, (container) => {
- container.appendChild(render);
- container.appendChild(ui);
- });
- }
- destroy() {
- this.#scene.stop();
- this.#mouse.clean();
- window.removeEventListener("resize", this.#on_resize);
- }
- }
|