mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 12:33:27 +02:00
UX improvements
This commit is contained in:
parent
c75a925bb6
commit
f515a24568
3 changed files with 43 additions and 25 deletions
|
@ -36,7 +36,7 @@ ContextOverlayInterface::ContextOverlayInterface() {
|
||||||
|
|
||||||
static const xColor BB_OVERLAY_COLOR = {255, 255, 0};
|
static const xColor BB_OVERLAY_COLOR = {255, 255, 0};
|
||||||
|
|
||||||
void ContextOverlayInterface::createOrDestroyContextOverlay(const EntityItemID& entityItemID, const PointerEvent& event) {
|
bool ContextOverlayInterface::createOrDestroyContextOverlay(const EntityItemID& entityItemID, const PointerEvent& event) {
|
||||||
if (_enabled && event.getButton() == PointerEvent::SecondaryButton) {
|
if (_enabled && event.getButton() == PointerEvent::SecondaryButton) {
|
||||||
|
|
||||||
EntityItemProperties entityProperties = _entityScriptingInterface->getEntityProperties(entityItemID, _entityPropertyFlags);
|
EntityItemProperties entityProperties = _entityScriptingInterface->getEntityProperties(entityItemID, _entityPropertyFlags);
|
||||||
|
@ -59,7 +59,7 @@ void ContextOverlayInterface::createOrDestroyContextOverlay(const EntityItemID&
|
||||||
|
|
||||||
if (_contextOverlayID == UNKNOWN_OVERLAY_ID || !qApp->getOverlays().isAddedOverlay(_contextOverlayID)) {
|
if (_contextOverlayID == UNKNOWN_OVERLAY_ID || !qApp->getOverlays().isAddedOverlay(_contextOverlayID)) {
|
||||||
_contextOverlay = std::make_shared<Image3DOverlay>();
|
_contextOverlay = std::make_shared<Image3DOverlay>();
|
||||||
_contextOverlay->setAlpha(1.0f);
|
_contextOverlay->setAlpha(0.85f);
|
||||||
_contextOverlay->setPulseMin(0.75f);
|
_contextOverlay->setPulseMin(0.75f);
|
||||||
_contextOverlay->setPulseMax(1.0f);
|
_contextOverlay->setPulseMax(1.0f);
|
||||||
_contextOverlay->setColorPulse(1.0f);
|
_contextOverlay->setColorPulse(1.0f);
|
||||||
|
@ -69,21 +69,31 @@ void ContextOverlayInterface::createOrDestroyContextOverlay(const EntityItemID&
|
||||||
_contextOverlay->setIsFacingAvatar(true);
|
_contextOverlay->setIsFacingAvatar(true);
|
||||||
_contextOverlayID = qApp->getOverlays().addOverlay(_contextOverlay);
|
_contextOverlayID = qApp->getOverlays().addOverlay(_contextOverlay);
|
||||||
}
|
}
|
||||||
|
glm::vec3 cameraPosition = qApp->getCamera().getPosition();
|
||||||
_contextOverlay->setDimensions(glm::vec2(0.05f, 0.05f) * glm::distance(entityProperties.getPosition(), qApp->getCamera().getPosition()));
|
float distanceToEntity = glm::distance(entityProperties.getPosition(), cameraPosition);
|
||||||
_contextOverlay->setPosition(entityProperties.getPosition());
|
glm::vec3 contextOverlayPosition;
|
||||||
|
if (distanceToEntity > 1.5f) {
|
||||||
|
contextOverlayPosition = (distanceToEntity - 1.0f) * glm::normalize(entityProperties.getPosition() - cameraPosition) + cameraPosition;
|
||||||
|
} else {
|
||||||
|
contextOverlayPosition = (glm::quat(glm::radians(glm::vec3(0.0f, -30.0f, 0.0f))) * (entityProperties.getPosition() - cameraPosition)) + cameraPosition;
|
||||||
|
}
|
||||||
|
_contextOverlay->setPosition(contextOverlayPosition);
|
||||||
|
_contextOverlay->setDimensions(glm::vec2(0.1f, 0.1f) * glm::distance(contextOverlayPosition, cameraPosition));
|
||||||
_contextOverlay->setRotation(entityProperties.getRotation());
|
_contextOverlay->setRotation(entityProperties.getRotation());
|
||||||
_contextOverlay->setVisible(true);
|
_contextOverlay->setVisible(true);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
} else if (_currentEntityWithContextOverlay == entityItemID) {
|
} else {
|
||||||
destroyContextOverlay(entityItemID, event);
|
return destroyContextOverlay(entityItemID, event);
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContextOverlayInterface::destroyContextOverlay(const EntityItemID& entityItemID, const PointerEvent& event) {
|
bool ContextOverlayInterface::destroyContextOverlay(const EntityItemID& entityItemID, const PointerEvent& event) {
|
||||||
|
|
||||||
|
if (_contextOverlayID != UNKNOWN_OVERLAY_ID) {
|
||||||
qCDebug(context_overlay) << "Destroying Context Overlay on top of entity with ID: " << entityItemID;
|
qCDebug(context_overlay) << "Destroying Context Overlay on top of entity with ID: " << entityItemID;
|
||||||
setCurrentEntityWithContextOverlay(QUuid());
|
setCurrentEntityWithContextOverlay(QUuid());
|
||||||
|
|
||||||
qApp->getOverlays().deleteOverlay(_contextOverlayID);
|
qApp->getOverlays().deleteOverlay(_contextOverlayID);
|
||||||
qApp->getOverlays().deleteOverlay(_bbOverlayID);
|
qApp->getOverlays().deleteOverlay(_bbOverlayID);
|
||||||
_contextOverlay = NULL;
|
_contextOverlay = NULL;
|
||||||
|
@ -91,10 +101,13 @@ void ContextOverlayInterface::destroyContextOverlay(const EntityItemID& entityIt
|
||||||
_contextOverlayID = UNKNOWN_OVERLAY_ID;
|
_contextOverlayID = UNKNOWN_OVERLAY_ID;
|
||||||
_bbOverlayID = UNKNOWN_OVERLAY_ID;
|
_bbOverlayID = UNKNOWN_OVERLAY_ID;
|
||||||
_entityMarketplaceID.clear();
|
_entityMarketplaceID.clear();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContextOverlayInterface::destroyContextOverlay(const EntityItemID& entityItemID) {
|
bool ContextOverlayInterface::destroyContextOverlay(const EntityItemID& entityItemID) {
|
||||||
ContextOverlayInterface::destroyContextOverlay(entityItemID, PointerEvent());
|
return ContextOverlayInterface::destroyContextOverlay(entityItemID, PointerEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContextOverlayInterface::clickContextOverlay(const OverlayID& overlayID, const PointerEvent& event) {
|
void ContextOverlayInterface::clickContextOverlay(const OverlayID& overlayID, const PointerEvent& event) {
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
#include "EntityTree.h"
|
#include "EntityTree.h"
|
||||||
#include "ContextOverlayLogging.h"
|
#include "ContextOverlayLogging.h"
|
||||||
|
|
||||||
|
#ifndef MIN
|
||||||
|
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
* @namespace ContextOverlay
|
* @namespace ContextOverlay
|
||||||
*/
|
*/
|
||||||
|
@ -54,9 +58,9 @@ public:
|
||||||
bool getEnabled() { return _enabled; }
|
bool getEnabled() { return _enabled; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void createOrDestroyContextOverlay(const EntityItemID& entityItemID, const PointerEvent& event);
|
bool createOrDestroyContextOverlay(const EntityItemID& entityItemID, const PointerEvent& event);
|
||||||
void destroyContextOverlay(const EntityItemID& entityItemID, const PointerEvent& event);
|
bool destroyContextOverlay(const EntityItemID& entityItemID, const PointerEvent& event);
|
||||||
void destroyContextOverlay(const EntityItemID& entityItemID);
|
bool destroyContextOverlay(const EntityItemID& entityItemID);
|
||||||
void clickContextOverlay(const OverlayID& overlayID, const PointerEvent& event);
|
void clickContextOverlay(const OverlayID& overlayID, const PointerEvent& event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -2227,8 +2227,6 @@ function MyController(hand) {
|
||||||
if (rayPickInfo.entityID === potentialEntityWithContextOverlay &&
|
if (rayPickInfo.entityID === potentialEntityWithContextOverlay &&
|
||||||
!entityWithContextOverlay
|
!entityWithContextOverlay
|
||||||
&& contextualHand !== -1) {
|
&& contextualHand !== -1) {
|
||||||
entityWithContextOverlay = rayPickInfo.entityID;
|
|
||||||
potentialEntityWithContextOverlay = false;
|
|
||||||
var pointerEvent = {
|
var pointerEvent = {
|
||||||
type: "Move",
|
type: "Move",
|
||||||
id: contextualHand + 1, // 0 is reserved for hardware mouse
|
id: contextualHand + 1, // 0 is reserved for hardware mouse
|
||||||
|
@ -2238,7 +2236,10 @@ function MyController(hand) {
|
||||||
direction: rayPickInfo.searchRay.direction,
|
direction: rayPickInfo.searchRay.direction,
|
||||||
button: "Secondary"
|
button: "Secondary"
|
||||||
};
|
};
|
||||||
ContextOverlay.createOrDestroyContextOverlay(rayPickInfo.entityID, pointerEvent);
|
if (ContextOverlay.createOrDestroyContextOverlay(rayPickInfo.entityID, pointerEvent)) {
|
||||||
|
entityWithContextOverlay = rayPickInfo.entityID;
|
||||||
|
potentialEntityWithContextOverlay = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, 500);
|
}, 500);
|
||||||
contextualHand = this.hand;
|
contextualHand = this.hand;
|
||||||
|
|
Loading…
Reference in a new issue