// // debugWorkloadWithMouseHover.js - render workload proxy for entity under mouse hover // // Copyright 2019 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 // "use strict"; (function() { Script.scriptEnding.connect(function () { }); // Create a Laser pointer used to pick and add entity to selection var END_DIMENSIONS = { x: 0.05, y: 0.05, z: 0.05 }; var COLOR1 = {red: 255, green: 0, blue: 255}; // magenta var COLOR2 = {red: 255, green: 255, blue: 0}; // yellow var end1 = { type: "sphere", dimensions: END_DIMENSIONS, color: COLOR1, ignorePickIntersection: true } var end2 = { type: "sphere", dimensions: END_DIMENSIONS, color: COLOR2, ignorePickIntersection: true } var laser = Pointers.createRayPointer({ joint: "Mouse", filter: Picks.PICK_ENTITIES | Picks.PICK_BYPASS_IGNORE | Picks.PICK_INCLUDE_COLLIDABLE | Picks.PICK_INCLUDE_NONCOLLIDABLE, renderStates: [{name: "one", end: end1}], defaultRenderStates: [{name: "one", end: end2, distance: 2.0}], enabled: true }); Pointers.setRenderState(laser, "one"); var hoveredObject = undefined; var SelectionListName = "DebugWorkloadSelection"; // secret undocumented selection list (hard coded in C++) var selectionStyle = { isOutlineSmooth: true, outlineWidth: 5, outlineUnoccludedColor: {red: 255, green: 128, blue: 128}, outlineUnoccludedAlpha: 0.88, outlineOccludedColor: {red: 255, green: 128, blue: 128}, outlineOccludedAlpha:0.5, fillUnoccludedColor: {red: 26, green: 0, blue: 0}, fillUnoccludedAlpha: 0.0, fillOccludedColor: {red: 26, green: 0, blue: 0}, fillOccludedAlpha: 0.0 } Selection.enableListHighlight(SelectionListName, selectionStyle) var isSelectionEnabled = false function setSelectionEnabled(enabled) { if (isSelectionEnabled != enabled) { isSelectionEnabled = enabled; //print("isSelectionEnabled set to " + isSelectionEnabled.toString()) if (isSelectionEnabled) { Pointers.enablePointer(laser) } else { Pointers.disablePointer(laser) Selection.clearSelectedItemsList(SelectionListName) } } } setSelectionEnabled(true); function getIntersectionTypeString(type) { if (type === Picks.INTERSECTED_ENTITY) { return "entity"; } else if (type === Picks.INTERSECTED_OVERLAY) { return "overlay"; } else if (type === Picks.INTERSECTED_AVATAR) { return "avatar"; } } function update() { var result = Pointers.getPrevPickResult(laser); if (result.intersects) { if (hoveredObject !== undefined && result.objectID !== hoveredObject.objectID) { // Hovering on something different if (isSelectionEnabled) { Selection.removeFromSelectedItemsList(SelectionListName, getIntersectionTypeString(hoveredObject.type), hoveredObject.objectID) //print("remove helloDebugHighlight " + hoveredObject.objectID.toString()); } } if (isSelectionEnabled) { if (hoveredObject === undefined || result.objectID !== hoveredObject.objectID) { // Hovering over something new Selection.addToSelectedItemsList(SelectionListName, getIntersectionTypeString(result.type), result.objectID); hoveredObject = result; //print("add helloDebugHighlight " + hoveredObject.objectID.toString() + " type = '" + getIntersectionTypeString(result.type) + "'"); } } } else if (hoveredObject !== undefined) { // Stopped hovering if (isSelectionEnabled) { Selection.removeFromSelectedItemsList(SelectionListName, getIntersectionTypeString(hoveredObject.type), hoveredObject.objectID) hoveredObject = undefined; //print("clear helloDebugHighlight"); } } } Script.update.connect(update); function cleanup() { Pointers.removePointer(laser); Selection.disableListHighlight(SelectionListName) Selection.removeListFromMap(SelectionListName) } Script.scriptEnding.connect(cleanup); }());