mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-14 11:46:34 +02:00
fix selection and hud-hiding issues
This commit is contained in:
parent
ae4064f445
commit
0e81e71325
1 changed files with 22 additions and 15 deletions
|
@ -19,10 +19,10 @@ Script.include("/~/system/libraries/controllers.js");
|
|||
// Overlays.
|
||||
//
|
||||
var overlays = {}; // Keeps track of all our extended overlay data objects, keyed by target identifier.
|
||||
function ExtendedOverlay(key, type, properties) { // A wrapper around overlays to store the key it is associated with.
|
||||
function ExtendedOverlay(key, type, properties, selected) { // A wrapper around overlays to store the key it is associated with.
|
||||
overlays[key] = this;
|
||||
this.key = key;
|
||||
this.selected = false; // not undefined
|
||||
this.selected = selected || false; // not undefined
|
||||
this.activeOverlay = Overlays.addOverlay(type, properties); // We could use different overlays for (un)selected...
|
||||
}
|
||||
// Instance methods:
|
||||
|
@ -34,19 +34,21 @@ ExtendedOverlay.prototype.deleteOverlay = function () { // remove display and da
|
|||
ExtendedOverlay.prototype.editOverlay = function (properties) { // change display of this overlay
|
||||
Overlays.editOverlay(this.activeOverlay, properties);
|
||||
};
|
||||
var UNSELECTED_COLOR = {red: 20, green: 250, blue: 20};
|
||||
var SELECTED_COLOR = {red: 250, green: 20, blue: 20};
|
||||
const UNSELECTED_COLOR = {red: 20, green: 250, blue: 20};
|
||||
const SELECTED_COLOR = {red: 250, green: 20, blue: 20};
|
||||
function color(selected) { return selected ? SELECTED_COLOR : UNSELECTED_COLOR; }
|
||||
var selectedId = null; // assumes only zero or one at a time!
|
||||
ExtendedOverlay.prototype.select = function (selected) {
|
||||
if (this.selected === selected) {
|
||||
return;
|
||||
}
|
||||
this.editOverlay({color: color(selected)});
|
||||
this.selected = selected;
|
||||
selectedId = selected && this.key;
|
||||
};
|
||||
// Class methods:
|
||||
var selectedIds = [];
|
||||
ExtendedOverlay.isSelected = function (id) {
|
||||
return -1 !== selectedIds.indexOf(id);
|
||||
}
|
||||
ExtendedOverlay.get = function (key) { // answer the extended overlay data object associated with the given avatar identifier
|
||||
return overlays[key];
|
||||
};
|
||||
|
@ -85,9 +87,11 @@ pal.fromQml.connect(function (message) { // messages are {method, params}, like
|
|||
print('From PAL QML:', JSON.stringify(message));
|
||||
switch (message.method) {
|
||||
case 'selected':
|
||||
var sessionIds = message.params;
|
||||
selectedIds = message.params;
|
||||
ExtendedOverlay.some(function (overlay) {
|
||||
overlay.select(-1 !== sessionIds.indexOf(overlay.key));
|
||||
var id = overlay.key;
|
||||
var selected = ExtendedOverlay.isSelected(id);
|
||||
overlay.select(selected);
|
||||
});
|
||||
break;
|
||||
default:
|
||||
|
@ -99,12 +103,13 @@ pal.fromQml.connect(function (message) { // messages are {method, params}, like
|
|||
// Main operations.
|
||||
//
|
||||
function addAvatarNode(id) {
|
||||
var selected = ExtendedOverlay.isSelected(id);
|
||||
return new ExtendedOverlay(id, "sphere", { // 3d so we don't go cross-eyed looking at it, but on top of everything
|
||||
solid: true,
|
||||
alpha: 0.8,
|
||||
color: color(id === selectedId),
|
||||
color: color(selected),
|
||||
drawInFront: true
|
||||
});
|
||||
}, selected);
|
||||
}
|
||||
function populateUserList() {
|
||||
var data = [];
|
||||
|
@ -154,7 +159,7 @@ function updateOverlays() {
|
|||
// We could re-populateUserList if anything added or removed, but not for now.
|
||||
}
|
||||
function removeOverlays() {
|
||||
selectedId = null;
|
||||
selectedIds = [];
|
||||
ExtendedOverlay.some(function (overlay) { overlay.deleteOverlay(); });
|
||||
}
|
||||
|
||||
|
@ -163,6 +168,7 @@ function removeOverlays() {
|
|||
//
|
||||
function handleClick(pickRay) {
|
||||
ExtendedOverlay.applyPickRay(pickRay, function (overlay) {
|
||||
// Don't select directly. Tell qml, who will give us back a list of ids.
|
||||
var message = {method: 'select', params: [overlay.key, !overlay.selected]};
|
||||
pal.sendToQml(message);
|
||||
return true;
|
||||
|
@ -226,7 +232,9 @@ function onClicked() {
|
|||
Script.update.connect(updateOverlays);
|
||||
Controller.mousePressEvent.connect(handleMouseEvent);
|
||||
triggerMapping.enable();
|
||||
} // No need for off, as onVisibleChanged will handle it.
|
||||
} else {
|
||||
off();
|
||||
}
|
||||
pal.setVisible(!pal.visible);
|
||||
}
|
||||
|
||||
|
@ -237,12 +245,10 @@ function onVisibileChanged() {
|
|||
button.writeProperty('buttonState', pal.visible ? 0 : 1);
|
||||
button.writeProperty('defaultState', pal.visible ? 0 : 1);
|
||||
button.writeProperty('hoverState', pal.visible ? 2 : 3);
|
||||
if (!pal.visible) {
|
||||
off();
|
||||
}
|
||||
}
|
||||
button.clicked.connect(onClicked);
|
||||
pal.visibleChanged.connect(onVisibileChanged);
|
||||
pal.closed.connect(off);
|
||||
|
||||
//
|
||||
// Cleanup.
|
||||
|
@ -251,6 +257,7 @@ Script.scriptEnding.connect(function () {
|
|||
button.clicked.disconnect(onClicked);
|
||||
toolBar.removeButton(buttonName);
|
||||
pal.visibleChanged.disconnect(onVisibileChanged);
|
||||
pal.closed.disconnect(off);
|
||||
off();
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in a new issue