// // debugTransition.js // developer/utilities/render // // Olivier Prat, created on 30/04/2017. // Copyright 2017 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // (function() { "use strict"; var TABLET_BUTTON_NAME = "Transition"; var QMLAPP_URL = Script.resolvePath("./transition.qml"); var ICON_URL = Script.resolvePath("../../../system/assets/images/transition-i.svg"); var ACTIVE_ICON_URL = Script.resolvePath("../../../system/assets/images/transition-a.svg"); Script.include([ Script.resolvePath("../../../system/libraries/stringHelpers.js"), ]); var onScreen = false; function onClicked() { if (onScreen) { tablet.gotoHomeScreen(); } else { tablet.loadQMLSource(QMLAPP_URL); } } var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ text: TABLET_BUTTON_NAME, icon: ICON_URL, activeIcon: ACTIVE_ICON_URL }); var hasEventBridge = false; function enableSphereVisualization() { if (gradientSphere==undefined) { gradientSphere = Overlays.addOverlay("sphere", { position: MyAvatar.position, rotation: Quat.fromPitchYawRollDegrees(0.0, 0.0, 0.0), dimensions: { x: 1.0, y: 1.0, z: 1.0 }, color: { red: 100, green: 150, blue: 255}, alpha: 0.2, solid: false }); } if (noiseSphere==undefined) { noiseSphere = Overlays.addOverlay("sphere", { position: MyAvatar.position, rotation: Quat.fromPitchYawRollDegrees(0.0, 0.0, 0.0), dimensions: { x: 1.0, y: 1.0, z: 1.0 }, color: { red: 255, green: 150, blue: 100}, alpha: 0.2, solid: false }); } } function disableSphereVisualization() { Overlays.deleteOverlay(noiseSphere); Overlays.deleteOverlay(gradientSphere); noiseSphere = undefined gradientSphere = undefined } // Create a Laser pointer used to pick and add objects to selections var END_DIMENSIONS = { x: 0.05, y: 0.05, z: 0.05 }; var COLOR1 = {red: 255, green: 0, blue: 0}; var COLOR2 = {red: 0, green: 255, blue: 0}; var end1 = { type: "sphere", dimensions: END_DIMENSIONS, color: COLOR1, ignoreRayIntersection: true } var end2 = { type: "sphere", dimensions: END_DIMENSIONS, color: COLOR2, ignoreRayIntersection: true } var laser function enablePointer() { laser = Pointers.createPointer(PickType.Ray, { joint: "Mouse", filter: Picks.PICK_ENTITIES, renderStates: [{name: "one", end: end1}], defaultRenderStates: [{name: "one", end: end2, distance: 2.0}], enabled: true }); Pointers.setRenderState(laser, "one"); Pointers.enablePointer(laser) } function disablePointer() { Pointers.disablePointer(laser) Pointers.removePointer(laser); } function wireEventBridge(on) { if (!tablet) { print("Warning in wireEventBridge(): 'tablet' undefined!"); return; } if (on) { if (!hasEventBridge) { tablet.fromQml.connect(fromQml); hasEventBridge = true; enablePointer(); Render.getConfig("RenderMainView.FadeEdit")["editFade"] = true } } else { if (hasEventBridge) { tablet.fromQml.disconnect(fromQml); hasEventBridge = false; disablePointer(); Render.getConfig("RenderMainView.FadeEdit")["editFade"] = false } } } function onScreenChanged(type, url) { if (url === QMLAPP_URL) { onScreen = true; } else { onScreen = false; } button.editProperties({isActive: onScreen}); wireEventBridge(onScreen); } var isEditEnabled = false var noiseSphere var gradientSphere var selectedEntity var editedCategory var FADE_MIN_SCALE = 0.001 var FADE_MAX_SCALE = 10000.0 function parameterToValuePow(parameter, minValue, maxOverMinValue) { return minValue * Math.pow(maxOverMinValue, parameter); //return parameter } function update(dt) { var gradientProperties = Entities.getEntityProperties(selectedEntity, ["position", "dimensions"]); if (gradientProperties!=undefined) { var pos = gradientProperties.position if (pos!=undefined) { var config = Render.getConfig("RenderMainView.Fade") //print("Center at "+pos.x+" "+pos.y+" "+pos.z) var dim = {x:config.baseSizeX, y:config.baseSizeY, z:config.baseSizeZ} dim.x = parameterToValuePow(dim.x, FADE_MIN_SCALE, FADE_MAX_SCALE/ FADE_MIN_SCALE) dim.y = parameterToValuePow(dim.y, FADE_MIN_SCALE, FADE_MAX_SCALE/ FADE_MIN_SCALE) dim.z = parameterToValuePow(dim.z, FADE_MIN_SCALE, FADE_MAX_SCALE/ FADE_MIN_SCALE) if (editedCategory==4 || editedCategory==5) { dim.y = gradientProperties.dimensions.y pos.y = pos.y - gradientProperties.dimensions.y/2 } Overlays.editOverlay(gradientSphere, { position: pos, dimensions: dim, alpha: config.baseLevel }) dim.x = parameterToValuePow(config.noiseSizeX, FADE_MIN_SCALE, FADE_MAX_SCALE/ FADE_MIN_SCALE) dim.y = parameterToValuePow(config.noiseSizeY, FADE_MIN_SCALE, FADE_MAX_SCALE/ FADE_MIN_SCALE) dim.z = parameterToValuePow(config.noiseSizeZ, FADE_MIN_SCALE, FADE_MAX_SCALE/ FADE_MIN_SCALE) Overlays.editOverlay(noiseSphere, { position: pos, dimensions: dim, alpha: config.noiseLevel }) } } } Script.update.connect(update); function loadConfiguration(fileUrl) { var config = Render.getConfig("RenderMainView.Fade") config.load(fileUrl) } function saveConfiguration(fileUrl) { var config = Render.getConfig("RenderMainView.Fade") config.save(fileUrl) } function fromQml(message) { tokens = message.split('*') command = tokens[0].toLowerCase() if (command=="category") { editedCategory = parseInt(tokens[1]) } else if (command=="save") { var filePath = tokens[1] print("Raw token = "+filePath) if (filePath.startsWith("file:///")) { filePath = filePath.substr(8) print("Saving configuration to "+filePath) saveConfiguration(filePath) } else { print("Configurations can only be saved to local files") } } else if (command=="load") { var filePath = tokens[1] if (filePath.startsWith("file:///")) { filePath = filePath.substr(8) print("Loading configuration from "+filePath) loadConfiguration(filePath) } else { print("Configurations can only be loaded from local files") } } } button.clicked.connect(onClicked); tablet.screenChanged.connect(onScreenChanged); Script.scriptEnding.connect(function () { if (onScreen) { tablet.gotoHomeScreen(); } button.clicked.disconnect(onClicked); tablet.screenChanged.disconnect(onScreenChanged); tablet.removeButton(button); }); var currentSelectionName = "" var SelectionList = "TransitionEdit" Selection.enableListToScene(SelectionList) Selection.clearSelectedItemsList(SelectionList) Entities.clickDownOnEntity.connect(function (id, event) { if (selectedEntity) { Selection.removeFromSelectedItemsList(SelectionList, "entity", selectedEntity) } selectedEntity = id Selection.addToSelectedItemsList(SelectionList, "entity", selectedEntity) update() }) function cleanup() { disablePointer(); Selection.removeListFromMap(SelectionList) Selection.disableListToScene(SelectionList); Overlays.deleteOverlay(noiseSphere); Overlays.deleteOverlay(gradientSphere); } Script.scriptEnding.connect(cleanup); }());