ksuprynowiczVoxel UI code cleanup3df9d664 years agoHistory
291 lines · 10.9 KB · JavaScript
RawDownload
//  gridControls.js////  Created by Ryan Huffman on 6 Nov 2014//  Copyright 2014 High Fidelity, Inc.//  Copyright 2022 Overte e.V.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html var createAppModeValue = "";var voxelEditModeValue = ""; function loaded() {    openEventBridge(function() {        elCreateAppModeMenu = document.getElementById("create-app-mode");        elEditModeObject = document.getElementById("edit-mode-object");        elEditModeVoxel = document.getElementById("edit-mode-voxel");        elVoxelEditModeMenu = document.getElementById("voxel-edit-mode");        elVoxelEditModeSingle = document.getElementById("voxel-edit-mode-single");        elVoxelEditModeSphere = document.getElementById("voxel-edit-mode-sphere");        elVoxelEditModeCube = document.getElementById("voxel-edit-mode-cube");        elMenuBackgroundOverlay = document.getElementById("menuBackgroundOverlay");        elVoxelHelpButton = document.getElementById("voxel-help-button");        elVoxelHelpPopup = document.getElementById("voxel-help-popup");         elVoxelSphereSize = document.getElementById("voxel-sphere-size");        elVoxelRemove = document.getElementById("voxel-remove");                elPosY = document.getElementById("horiz-y");        elMinorSpacing = document.getElementById("minor-spacing");        elMajorSpacing = document.getElementById("major-spacing");        elSnapToGrid = document.getElementById("snap-to-grid");        elHorizontalGridVisible = document.getElementById("horiz-grid-visible");        elMoveToSelection = document.getElementById("move-to-selection");        elMoveToAvatar = document.getElementById("move-to-avatar");         elCreateAppModeMenu.onclick = function() {            document.getElementById("menuBackgroundOverlay").style.display = "block";            document.getElementById("edit-mode-menu").style.display = "block";        };         elVoxelEditModeMenu.onclick = function() {            document.getElementById("menuBackgroundOverlay").style.display = "block";            document.getElementById("voxel-edit-mode-menu").style.display = "block";        };         elVoxelHelpButton.onclick = function() {            document.getElementById("menuBackgroundOverlay").style.display = "block";            document.getElementById("voxel-help-popup").style.display = "block";        };         elMenuBackgroundOverlay.onclick = function() {            closeAllEntityListMenu();        };         elEditModeObject.onclick = function() {            createAppModeValue = "object";            elCreateAppModeMenu.value = "Object mode\u25BE";            emitUpdateEditTools();            closeAllEntityListMenu();        };         elEditModeVoxel.onclick = function() {            createAppModeValue = "voxel";            elCreateAppModeMenu.value = "Voxel edit mode\u25BE";            emitUpdateEditTools();            closeAllEntityListMenu();        };                elVoxelEditModeSingle.onclick = function() {            voxelEditModeValue = "single";            elVoxelEditModeMenu.value = "Single voxels\u25BE";            emitUpdateEditTools();            closeAllEntityListMenu();        };         elVoxelEditModeSphere.onclick = function() {            voxelEditModeValue = "sphere";            elVoxelEditModeMenu.value = "Spheres\u25BE";            emitUpdateEditTools();            closeAllEntityListMenu();        };         elVoxelEditModeCube.onclick = function() {            voxelEditModeValue = "cube";            elVoxelEditModeMenu.value = "Cubes\u25BE";            emitUpdateEditTools();            closeAllEntityListMenu();        };         elVoxelHelpPopup.onclick = function() {            closeAllEntityListMenu();        };         if (window.EventBridge !== undefined) {            EventBridge.scriptEventReceived.connect(function(data) {                data = JSON.parse(data);                 if (data.createAppMode !== undefined) {                    if (data.createAppMode === "object") {                        createAppModeValue = data.createAppMode;                        elCreateAppModeMenu.value = "Object mode\u25BE";                    }                    if (data.createAppMode === "voxel") {                        createAppModeValue = data.createAppMode;                        elCreateAppModeMenu.value = "Voxel edit mode\u25BE";                    }                }                 if (data.voxelEditMode !== undefined) {                    if (data.voxelEditMode === "single") {                        voxelEditModeValue = data.voxelEditMode;                        elVoxelEditModeMenu.value = "Single voxels\u25BE";                    }                    if (data.voxelEditMode === "sphere") {                        voxelEditModeValue = data.voxelEditMode;                        elVoxelEditModeMenu.value = "Spheres\u25BE";                    }                    if (data.voxelEditMode === "cube") {                        voxelEditModeValue = data.voxelEditMode;                        elVoxelEditModeMenu.value = "Cubes\u25BE";                    }                }                 if (data.voxelSphereSize !== undefined) {                    elVoxelSphereSize.value = data.voxelSphereSize;                }                 if (data.voxelRemove !== undefined) {                    elVoxelRemove.checked = data.voxelRemove == true;                }                 if (data.origin) {                    var origin = data.origin;                    elPosY.value = origin.y;                }                 if (data.minorGridEvery !== undefined) {                    elMinorSpacing.value = data.minorGridEvery;                }                 if (data.majorGridEvery !== undefined) {                    elMajorSpacing.value = data.majorGridEvery;                }                 if (data.gridColor) {                    gridColor = data.gridColor;                }                 if (data.snapToGrid !== undefined) {                    elSnapToGrid.checked = data.snapToGrid == true;                }                 if (data.visible !== undefined) {                    elHorizontalGridVisible.checked = data.visible == true;                }            });             function emitUpdate() {                EventBridge.emitWebEvent(JSON.stringify({                    type: "update",                    origin: {                        y: elPosY.value,                    },                    minorGridEvery: elMinorSpacing.value,                    majorGridEvery: elMajorSpacing.value,                    gridColor: gridColor,                    snapToGrid: elSnapToGrid.checked,                    visible: elHorizontalGridVisible.checked,                }));            }             function emitUpdateEditTools() {                EventBridge.emitWebEvent(JSON.stringify({                    type: "update-edit-tools",                    createAppMode: createAppModeValue,                    voxelEditMode: voxelEditModeValue,                    voxelSphereSize: elVoxelSphereSize.value,                    voxelRemove: elVoxelRemove.checked,                }));            }        }         elVoxelSphereSize.addEventListener("change", emitUpdateEditTools);        elVoxelRemove.addEventListener("change", emitUpdateEditTools);                elPosY.addEventListener("change", emitUpdate);        elMinorSpacing.addEventListener("change", emitUpdate);        elMajorSpacing.addEventListener("change", emitUpdate);        elSnapToGrid.addEventListener("change", emitUpdate);        elHorizontalGridVisible.addEventListener("change", emitUpdate);         elMoveToAvatar.addEventListener("click", function() {            EventBridge.emitWebEvent(JSON.stringify({                type: "action",                action: "moveToAvatar",            }));        });        elMoveToSelection.addEventListener("click", function() {            EventBridge.emitWebEvent(JSON.stringify({                type: "action",                action: "moveToSelection",            }));        });         var gridColor = { red: 255, green: 255, blue: 255 };        var elColor = document.getElementById("grid-color");        elColor.style.backgroundColor = "rgb(" + gridColor.red + "," + gridColor.green + "," + gridColor.blue + ")";         var colorPickFunction = function (red, green, blue) {            gridColor = { red: red, green: green, blue: blue };            emitUpdate();        };         $('#grid-color').colpick({            colorScheme: 'dark',            layout: 'rgbhex',            color: { r: gridColor.red, g: gridColor.green, b: gridColor.blue },            submit: false,            onShow: function (colpick) {                $('#grid-color').attr('active', 'true');            },            onHide: function (colpick) {                $('#grid-color').attr('active', 'false');            },            onChange: function (hsb, hex, rgb, el) {                $(el).css('background-color', '#' + hex);                colorPickFunction(rgb.r, rgb.g, rgb.b);            }        });         augmentSpinButtons();        disableDragDrop();         EventBridge.emitWebEvent(JSON.stringify({ type: 'init' }));    });     const KEY_CODES = {        BACKSPACE: 8,        DELETE: 46    };     document.addEventListener("keyup", function (keyUpEvent) {        const FILTERED_NODE_NAMES = ["INPUT", "TEXTAREA"];        if (FILTERED_NODE_NAMES.includes(keyUpEvent.target.nodeName)) {            return;        }        let {code, key, keyCode, altKey, ctrlKey, metaKey, shiftKey} = keyUpEvent;         let controlKey = window.navigator.platform.startsWith("Mac") ? metaKey : ctrlKey;         let keyCodeString;        switch (keyCode) {            case KEY_CODES.DELETE:                keyCodeString = "Delete";                break;            case KEY_CODES.BACKSPACE:                keyCodeString = "Backspace";                break;            default:                keyCodeString = String.fromCharCode(keyUpEvent.keyCode);                break;        }         EventBridge.emitWebEvent(JSON.stringify({            type: 'keyUpEvent',            keyUpEvent: {                code,                key,                keyCode,                keyCodeString,                altKey,                controlKey,                shiftKey,            }        }));    }, false);     function closeAllEntityListMenu() {        document.getElementById("menuBackgroundOverlay").style.display = "none";        document.getElementById("edit-mode-menu").style.display = "none";        document.getElementById("voxel-edit-mode-menu").style.display = "none";        document.getElementById("voxel-help-popup").style.display = "none";    }     // Disable right-click context menu which is not visible in the HMD and makes it seem like the app has locked    document.addEventListener("contextmenu", function (event) {        event.preventDefault();    }, false); }