181 lines · 4.8 KB · JavaScript
RawDownload
////  editModes.js////  Created by Karol Suprynowicz on 2022.05.15.//  Copyright 2022 Overte e.V.////  Partially based on gridTool.js//  Created by Ryan Huffman on 6 Nov 2014//  Copyright 2014 High Fidelity, Inc.//  Copyright 2020 Vircadia contributors.//  Copyright 2022 Overte e.V.////  This script implements a class for managing different edit modes////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// EditTools = function(options) {    var that = {};        var createAppMode = "object";    var voxelEditMode = "single";    var voxelSphereSize = 0.3;    var voxelEditDynamics = "click";    var voxelRemove = false;    var voxelPointerMode = "laser";    var voxelBrushLength = 0.5;    var listeners = [];        var createToolsWindow = options.createToolsWindow;        that.emitUpdate = function() {        var dataString = JSON.stringify({                createAppMode : createAppMode,                voxelEditMode : voxelEditMode,                voxelSphereSize : voxelSphereSize,                voxelEditDynamics : voxelEditDynamics,                voxelRemove : voxelRemove,                voxelPointerMode : voxelPointerMode,                voxelBrushLength : voxelBrushLength,            });        webView.emitScriptEvent(dataString);        createToolsWindow.emitScriptEvent(dataString);    };        that.getCreateAppMode = function() {        return createAppMode;    }        that.setCreateAppMode = function(value) {        createAppMode = value;        that.emitUpdate();    }        that.getVoxelEditMode = function() {        return voxelEditMode;    }        that.setVoxelEditMode = function(value) {        voxelEditMode = value;        that.emitUpdate();    }        that.getVoxelSphereSize = function() {        return voxelSphereSize;    }        that.setVoxelSphereSize = function(value) {        voxelSphereSize = value;        that.emitUpdate();    }        that.getVoxelEditDynamics = function() {        return voxelEditDynamics;    }        that.setVoxelEditDynamics = function(value) {        voxelEditDynamics = value;        that.emitUpdate();    }        that.getVoxelRemove = function() {        return voxelRemove;    }        that.setVoxelRemove = function(value) {        voxelRemove = value;        that.emitUpdate();    }        that.getVoxelPointerMode = function() {        return voxelPointerMode;    }        that.setVoxelPointerMode = function(value) {        voxelPointerMode = value;        that.emitUpdate();    }        that.getVoxelBrushLength = function() {        return voxelBrushLength;    }        that.setVoxelBrushLength = function(value) {        voxelBrushLength = value;        that.emitUpdate();    }        that.update = function(data) {        if (data.type !== "update-edit-tools") {            return;        }         print(JSON.stringify(data));                var needsUpdate = false;                if (data.createAppMode) {            createAppMode = data.createAppMode;            needsUpdate = true;        }        if (data.voxelEditMode) {            voxelEditMode = data.voxelEditMode;            needsUpdate = true;        }         if (data.voxelSphereSize) {            voxelSphereSize = data.voxelSphereSize;            needsUpdate = true;        }         if (data.voxelEditDynamics) {            voxelEditDynamics = data.voxelEditDynamics;            needsUpdate = true;        }         if (data.voxelRemove) {            voxelRemove = data.voxelRemove;            needsUpdate = true;        }         if (data.voxelPointerMode) {            voxelPointerMode = data.voxelPointerMode;            needsUpdate = true;        }         if (data.voxelBrushLength) {            voxelBrushLength = data.voxelBrushLength;            needsUpdate = true;        }     }        var webEventReceived = function(data) {        try {            data = JSON.parse(data);        } catch (e) {            console.log("editModes.js, EditTools.webEventReceived: Cannot parse received JSON data");            return;        }         if (data.type === "init") {            that.emitUpdate();        } else if (data.type === "update-edit-tools") {            that.update(data);            for (var i = 0; i < listeners.length; i++) {                listeners[i] && listeners[i](data);            }        }    };        var webView = null;    webView = Tablet.getTablet("com.highfidelity.interface.tablet.system");     webView.webEventReceived.connect(webEventReceived);    createToolsWindow.webEventReceived.addListener(webEventReceived);     that.addListener = function(callback) {        listeners.push(callback);    };        function cleanup() {    }        return that;}