This commit is contained in:
SamGondelman 2019-01-26 23:26:40 -08:00
parent 0dd729232b
commit 70b1e17a8c
3 changed files with 135 additions and 134 deletions

View file

@ -5715,10 +5715,10 @@ QUuid Application::getKeyboardFocusEntity() const {
static const float FOCUS_HIGHLIGHT_EXPANSION_FACTOR = 1.05f; static const float FOCUS_HIGHLIGHT_EXPANSION_FACTOR = 1.05f;
void Application::setKeyboardFocusEntity(const EntityItemID& entityItemID) { void Application::setKeyboardFocusEntity(const QUuid& id) {
if (_keyboardFocusedEntity.get() != entityItemID) { if (_keyboardFocusedEntity.get() != id) {
if (qApp->getLoginDialogPoppedUp() && !_loginDialogID.isNull()) { if (qApp->getLoginDialogPoppedUp() && !_loginDialogID.isNull()) {
if (entityItemID == _loginDialogID) { if (id == _loginDialogID) {
emit loginDialogFocusEnabled(); emit loginDialogFocusEnabled();
} else { } else {
// that's the only entity we want in focus; // that's the only entity we want in focus;
@ -5726,17 +5726,17 @@ void Application::setKeyboardFocusEntity(const EntityItemID& entityItemID) {
} }
} }
_keyboardFocusedEntity.set(entityItemID); _keyboardFocusedEntity.set(id);
auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>(); auto entityScriptingInterface = DependencyManager::get<EntityScriptingInterface>();
if (entityItemID == UNKNOWN_ENTITY_ID) { if (id == UNKNOWN_ENTITY_ID) {
EntityItemProperties properties; EntityItemProperties properties;
properties.setVisible(false); properties.setVisible(false);
entityScriptingInterface->editEntity(_keyboardFocusHighlightID, properties); entityScriptingInterface->editEntity(_keyboardFocusHighlightID, properties);
return; return;
} }
auto properties = entityScriptingInterface->getEntityProperties(entityItemID); auto properties = entityScriptingInterface->getEntityProperties(id);
if (!properties.getLocked() && properties.getVisible()) { if (!properties.getLocked() && properties.getVisible()) {
auto entities = getEntities(); auto entities = getEntities();
auto entityId = _keyboardFocusedEntity.get(); auto entityId = _keyboardFocusedEntity.get();

View file

@ -437,7 +437,7 @@ public slots:
void setKeyboardFocusHighlight(const glm::vec3& position, const glm::quat& rotation, const glm::vec3& dimensions); void setKeyboardFocusHighlight(const glm::vec3& position, const glm::quat& rotation, const glm::vec3& dimensions);
QUuid getKeyboardFocusEntity() const; // thread-safe QUuid getKeyboardFocusEntity() const; // thread-safe
void setKeyboardFocusEntity(const EntityItemID& entityItemID); void setKeyboardFocusEntity(const QUuid& id);
void addAssetToWorldMessageClose(); void addAssetToWorldMessageClose();

View file

@ -185,83 +185,83 @@ QString Overlays::overlayToEntityType(const QString& type) {
return "Unknown"; return "Unknown";
} }
#define SET_OVERLAY_PROP_DEFAULT(o, d) \ #define SET_OVERLAY_PROP_DEFAULT(o, d) \
{ \ { \
if (add && !overlayProps.contains(#o)) { \ if (add && !overlayProps.contains(#o)) { \
overlayProps[#o] = d; \ overlayProps[#o] = d; \
} \ } \
} }
#define OVERLAY_TO_ENTITY_PROP(o, e) \ #define RENAME_PROP(o, e) \
{ \ { \
auto iter = overlayProps.find(#o); \ auto iter = overlayProps.find(#o); \
if (iter != overlayProps.end()) { \ if (iter != overlayProps.end()) { \
overlayProps[#e] = iter.value(); \ overlayProps[#e] = iter.value(); \
} \ } \
} }
#define OVERLAY_TO_GROUP_ENTITY_PROP(o, g, e) \ #define RENAME_PROP_CONVERT(o, e, C) \
{ \ { \
auto iter = overlayProps.find(#o); \ auto iter = overlayProps.find(#o); \
if (iter != overlayProps.end()) { \ if (iter != overlayProps.end()) { \
if (!overlayProps.contains(#g)) { \ overlayProps[#e] = C(iter.value()); \
overlayProps[#g] = QVariantMap(); \ } \
} \
auto map = overlayProps[#g].toMap(); \
map[#e] = iter.value(); \
overlayProps[#g] = map; \
} \
} }
#define OVERLAY_TO_GROUP_ENTITY_PROP_DEFAULT(o, g, e, d) \ #define OVERLAY_TO_GROUP_ENTITY_PROP(o, g, e) \
{ \ { \
auto iter = overlayProps.find(#o); \ auto iter = overlayProps.find(#o); \
if (iter != overlayProps.end()) { \ if (iter != overlayProps.end()) { \
if (!overlayProps.contains(#g)) { \ if (!overlayProps.contains(#g)) { \
overlayProps[#g] = QVariantMap(); \ overlayProps[#g] = QVariantMap(); \
} \ } \
auto map = overlayProps[#g].toMap(); \ auto map = overlayProps[#g].toMap(); \
map[#e] = iter.value(); \ map[#e] = iter.value(); \
overlayProps[#g] = map; \ overlayProps[#g] = map; \
} else if (add) { \ } \
if (!overlayProps.contains(#g)) { \
overlayProps[#g] = QVariantMap(); \
} \
auto map = overlayProps[#g].toMap(); \
map[#e] = d; \
overlayProps[#g] = map; \
} \
} }
#define OVERLAY_TO_ENTITY_PROP_CONVERT(o, e, C) \ #define OVERLAY_TO_GROUP_ENTITY_PROP_DEFAULT(o, g, e, d) \
{ \ { \
auto iter = overlayProps.find(#o); \ auto iter = overlayProps.find(#o); \
if (iter != overlayProps.end()) { \ if (iter != overlayProps.end()) { \
overlayProps[#e] = C(iter.value()); \ if (!overlayProps.contains(#g)) { \
} \ overlayProps[#g] = QVariantMap(); \
} \
auto map = overlayProps[#g].toMap(); \
map[#e] = iter.value(); \
overlayProps[#g] = map; \
} else if (add) { \
if (!overlayProps.contains(#g)) { \
overlayProps[#g] = QVariantMap(); \
} \
auto map = overlayProps[#g].toMap(); \
map[#e] = d; \
overlayProps[#g] = map; \
} \
} }
#define OVERLAY_TO_ENTITY_PROP_CONVERT_DEFAULT(o, e, d, C) \ #define OVERLAY_TO_ENTITY_PROP_CONVERT_DEFAULT(o, e, d, C) \
{ \ { \
auto iter = overlayProps.find(#o); \ auto iter = overlayProps.find(#o); \
if (iter != overlayProps.end()) { \ if (iter != overlayProps.end()) { \
overlayProps[#e] = C(iter.value()); \ overlayProps[#e] = C(iter.value()); \
} else if (add) { \ } else if (add) { \
overlayProps[#e] = C(d); \ overlayProps[#e] = C(d); \
} \ } \
} }
#define OVERLAY_TO_GROUP_ENTITY_PROP_CONVERT(o, g, e, C) \ #define OVERLAY_TO_GROUP_ENTITY_PROP_CONVERT(o, g, e, C) \
{ \ { \
auto iter = overlayProps.find(#o); \ auto iter = overlayProps.find(#o); \
if (iter != overlayProps.end()) { \ if (iter != overlayProps.end()) { \
if (!overlayProps.contains(#g)) { \ if (!overlayProps.contains(#g)) { \
overlayProps[#g] = QVariantMap(); \ overlayProps[#g] = QVariantMap(); \
} \ } \
auto map = overlayProps[#g].toMap(); \ auto map = overlayProps[#g].toMap(); \
map[#e] = C(iter.value()); \ map[#e] = C(iter.value()); \
overlayProps[#g] = map; \ overlayProps[#g] = map; \
} \ } \
} }
EntityItemProperties Overlays::convertOverlayToEntityProperties(QVariantMap& overlayProps, const QString& type, bool add, const QUuid& id) { EntityItemProperties Overlays::convertOverlayToEntityProperties(QVariantMap& overlayProps, const QString& type, bool add, const QUuid& id) {
@ -269,28 +269,28 @@ EntityItemProperties Overlays::convertOverlayToEntityProperties(QVariantMap& ove
SET_OVERLAY_PROP_DEFAULT(alpha, 0.7); SET_OVERLAY_PROP_DEFAULT(alpha, 0.7);
if (type != "PolyLine") { if (type != "PolyLine") {
OVERLAY_TO_ENTITY_PROP(p1, position); RENAME_PROP(p1, position);
OVERLAY_TO_ENTITY_PROP(start, position); RENAME_PROP(start, position);
} }
OVERLAY_TO_ENTITY_PROP(point, position); RENAME_PROP(point, position);
OVERLAY_TO_ENTITY_PROP(scale, dimensions); RENAME_PROP(scale, dimensions);
OVERLAY_TO_ENTITY_PROP(size, dimensions); RENAME_PROP(size, dimensions);
OVERLAY_TO_ENTITY_PROP(orientation, rotation); RENAME_PROP(orientation, rotation);
OVERLAY_TO_ENTITY_PROP(localOrientation, localRotation); RENAME_PROP(localOrientation, localRotation);
OVERLAY_TO_ENTITY_PROP(ignoreRayIntersection, ignorePickIntersection); RENAME_PROP(ignoreRayIntersection, ignorePickIntersection);
{ {
OVERLAY_TO_ENTITY_PROP(solid, isSolid); RENAME_PROP(solid, isSolid);
OVERLAY_TO_ENTITY_PROP(isFilled, isSolid); RENAME_PROP(isFilled, isSolid);
OVERLAY_TO_ENTITY_PROP(filled, isSolid); RENAME_PROP(filled, isSolid);
OVERLAY_TO_ENTITY_PROP_CONVERT_DEFAULT(isSolid, primitiveMode, false, [](const QVariant& v) { return v.toBool() ? "solid" : "lines"; }); OVERLAY_TO_ENTITY_PROP_CONVERT_DEFAULT(isSolid, primitiveMode, false, [](const QVariant& v) { return v.toBool() ? "solid" : "lines"; });
OVERLAY_TO_ENTITY_PROP(wire, isWire); RENAME_PROP(wire, isWire);
OVERLAY_TO_ENTITY_PROP_CONVERT(isWire, primitiveMode, [](const QVariant& v) { return v.toBool() ? "lines" : "solid"; }); RENAME_PROP_CONVERT(isWire, primitiveMode, [](const QVariant& v) { return v.toBool() ? "lines" : "solid"; });
} }
OVERLAY_TO_ENTITY_PROP_CONVERT(drawInFront, renderLayer, [](const QVariant& v) { return v.toBool() ? "front" : "world"; }); RENAME_PROP_CONVERT(drawInFront, renderLayer, [](const QVariant& v) { return v.toBool() ? "front" : "world"; });
OVERLAY_TO_ENTITY_PROP_CONVERT(drawHUDLayer, renderLayer, [](const QVariant& v) { return v.toBool() ? "hud" : "world"; }); RENAME_PROP_CONVERT(drawHUDLayer, renderLayer, [](const QVariant& v) { return v.toBool() ? "hud" : "world"; });
OVERLAY_TO_GROUP_ENTITY_PROP_DEFAULT(grabbable, grab, grabbable, false); OVERLAY_TO_GROUP_ENTITY_PROP_DEFAULT(grabbable, grab, grabbable, false);
@ -319,13 +319,13 @@ EntityItemProperties Overlays::convertOverlayToEntityProperties(QVariantMap& ove
if (type == "Shape") { if (type == "Shape") {
SET_OVERLAY_PROP_DEFAULT(shape, "Hexagon"); SET_OVERLAY_PROP_DEFAULT(shape, "Hexagon");
} else if (type == "Model") { } else if (type == "Model") {
OVERLAY_TO_ENTITY_PROP(url, modelURL); RENAME_PROP(url, modelURL);
OVERLAY_TO_ENTITY_PROP(animationSettings, animation); RENAME_PROP(animationSettings, animation);
} else if (type == "Image") { } else if (type == "Image") {
OVERLAY_TO_ENTITY_PROP(url, imageURL); RENAME_PROP(url, imageURL);
} else if (type == "Web") { } else if (type == "Web") {
OVERLAY_TO_ENTITY_PROP(url, sourceUrl); RENAME_PROP(url, sourceUrl);
OVERLAY_TO_ENTITY_PROP_CONVERT(inputMode, inputMode, [](const QVariant& v) { return v.toString() == "Mouse" ? "mouse" : "touch"; }); RENAME_PROP_CONVERT(inputMode, inputMode, [](const QVariant& v) { return v.toString() == "Mouse" ? "mouse" : "touch"; });
} else if (type == "Gizmo") { } else if (type == "Gizmo") {
if (add || overlayProps.contains("outerRadius")) { if (add || overlayProps.contains("outerRadius")) {
float ratio = 2.0f; float ratio = 2.0f;
@ -366,41 +366,41 @@ EntityItemProperties Overlays::convertOverlayToEntityProperties(QVariantMap& ove
} }
{ {
OVERLAY_TO_ENTITY_PROP(color, innerStartColor); RENAME_PROP(color, innerStartColor);
OVERLAY_TO_ENTITY_PROP(color, innerEndColor); RENAME_PROP(color, innerEndColor);
OVERLAY_TO_ENTITY_PROP(color, outerStartColor); RENAME_PROP(color, outerStartColor);
OVERLAY_TO_ENTITY_PROP(color, outerEndColor); RENAME_PROP(color, outerEndColor);
OVERLAY_TO_ENTITY_PROP(startColor, innerStartColor); RENAME_PROP(startColor, innerStartColor);
OVERLAY_TO_ENTITY_PROP(startColor, outerStartColor); RENAME_PROP(startColor, outerStartColor);
OVERLAY_TO_ENTITY_PROP(endColor, innerEndColor); RENAME_PROP(endColor, innerEndColor);
OVERLAY_TO_ENTITY_PROP(endColor, outerEndColor); RENAME_PROP(endColor, outerEndColor);
OVERLAY_TO_ENTITY_PROP(innerColor, innerStartColor); RENAME_PROP(innerColor, innerStartColor);
OVERLAY_TO_ENTITY_PROP(innerColor, innerEndColor); RENAME_PROP(innerColor, innerEndColor);
OVERLAY_TO_ENTITY_PROP(outerColor, outerStartColor); RENAME_PROP(outerColor, outerStartColor);
OVERLAY_TO_ENTITY_PROP(outerColor, outerEndColor); RENAME_PROP(outerColor, outerEndColor);
} }
{ {
OVERLAY_TO_ENTITY_PROP(alpha, innerStartAlpha); RENAME_PROP(alpha, innerStartAlpha);
OVERLAY_TO_ENTITY_PROP(alpha, innerEndAlpha); RENAME_PROP(alpha, innerEndAlpha);
OVERLAY_TO_ENTITY_PROP(alpha, outerStartAlpha); RENAME_PROP(alpha, outerStartAlpha);
OVERLAY_TO_ENTITY_PROP(alpha, outerEndAlpha); RENAME_PROP(alpha, outerEndAlpha);
OVERLAY_TO_ENTITY_PROP(startAlpha, innerStartAlpha); RENAME_PROP(startAlpha, innerStartAlpha);
OVERLAY_TO_ENTITY_PROP(startAlpha, outerStartAlpha); RENAME_PROP(startAlpha, outerStartAlpha);
OVERLAY_TO_ENTITY_PROP(endAlpha, innerEndAlpha); RENAME_PROP(endAlpha, innerEndAlpha);
OVERLAY_TO_ENTITY_PROP(endAlpha, outerEndAlpha); RENAME_PROP(endAlpha, outerEndAlpha);
OVERLAY_TO_ENTITY_PROP(innerAlpha, innerStartAlpha); RENAME_PROP(innerAlpha, innerStartAlpha);
OVERLAY_TO_ENTITY_PROP(innerAlpha, innerEndAlpha); RENAME_PROP(innerAlpha, innerEndAlpha);
OVERLAY_TO_ENTITY_PROP(outerAlpha, outerStartAlpha); RENAME_PROP(outerAlpha, outerStartAlpha);
OVERLAY_TO_ENTITY_PROP(outerAlpha, outerEndAlpha); RENAME_PROP(outerAlpha, outerEndAlpha);
} }
OVERLAY_TO_GROUP_ENTITY_PROP(startAt, ring, startAngle); OVERLAY_TO_GROUP_ENTITY_PROP(startAt, ring, startAngle);
@ -424,38 +424,39 @@ EntityItemProperties Overlays::convertOverlayToEntityProperties(QVariantMap& ove
OVERLAY_TO_GROUP_ENTITY_PROP(majorTickMarksColor, ring, majorTickMarksColor); OVERLAY_TO_GROUP_ENTITY_PROP(majorTickMarksColor, ring, majorTickMarksColor);
OVERLAY_TO_GROUP_ENTITY_PROP(minorTickMarksColor, ring, minorTickMarksColor); OVERLAY_TO_GROUP_ENTITY_PROP(minorTickMarksColor, ring, minorTickMarksColor);
} else if (type == "PolyLine") { } else if (type == "PolyLine") {
OVERLAY_TO_ENTITY_PROP(startPoint, start); RENAME_PROP(startPoint, p1);
OVERLAY_TO_ENTITY_PROP(p1, start); RENAME_PROP(start, p1);
OVERLAY_TO_ENTITY_PROP(endPoint, end); RENAME_PROP(endPoint, p2);
OVERLAY_TO_ENTITY_PROP(p2, end); RENAME_PROP(end, p1);
if (overlayProps.contains("start") || overlayProps.contains("end")) { RENAME_PROP(p1, position);
RENAME_PROP_CONVERT(p1, p1, [](const QVariant& v) { return vec3toVariant(glm::vec3(0.0f)); });
RENAME_PROP_CONVERT(p2, p2, [=](const QVariant& v) {
glm::vec3 position; glm::vec3 position;
auto iter = overlayProps.find("position"); auto iter2 = overlayProps.find("position");
if (iter != overlayProps.end()) { if (iter2 != overlayProps.end()) {
position = vec3FromVariant(iter.value()); position = vec3FromVariant(iter.value());
} else if (!add) { } else if (!add) {
EntityPropertyFlags desiredProperties; EntityPropertyFlags desiredProperties;
desiredProperties += PROP_POSITION; desiredProperties += PROP_POSITION;
position = DependencyManager::get<EntityScriptingInterface>()->getEntityProperties(id, desiredProperties).getPosition(); position = DependencyManager::get<EntityScriptingInterface>()->getEntityProperties(id, desiredProperties).getPosition();
} }
OVERLAY_TO_ENTITY_PROP_CONVERT(start, start, [position](const QVariant& v) { return vec3toVariant(vec3FromVariant(v) - position); }) return vec3toVariant(vec3FromVariant(v) - position);
OVERLAY_TO_ENTITY_PROP_CONVERT(end, end, [position](const QVariant& v) { return vec3toVariant(vec3FromVariant(v) - position); }) });
}
OVERLAY_TO_ENTITY_PROP(localStart, start); RENAME_PROP(localStart, p1);
OVERLAY_TO_ENTITY_PROP(localEnd, end); RENAME_PROP(localEnd, p2);
{ {
QVariantList points; QVariantList points;
{ {
auto iter = overlayProps.find("start"); auto iter = overlayProps.find("p1");
if (iter != overlayProps.end()) { if (iter != overlayProps.end()) {
points.push_back(iter.value()); points.push_back(iter.value());
} }
} }
{ {
auto iter = overlayProps.find("end"); auto iter = overlayProps.find("p2");
if (iter != overlayProps.end()) { if (iter != overlayProps.end()) {
points.push_back(iter.value()); points.push_back(iter.value());
} }
@ -479,11 +480,11 @@ EntityItemProperties Overlays::convertOverlayToEntityProperties(QVariantMap& ove
return toReturn; return toReturn;
} }
QVariantMap Overlays::convertEntityToOverlayProperties(const EntityItemProperties& entityProps) { QVariantMap Overlays::convertEntityToOverlayProperties(const EntityItemProperties& properties) {
QScriptValue entityProperties; QScriptEngine scriptEngine;
QVariantMap overlayProps = EntityItemPropertiesToScriptValue(&scriptEngine, properties).toVariant().toMap();
QVariantMap props; return overlayProps;
return props;
} }
QUuid Overlays::addOverlay(const QString& type, const QVariant& properties) { QUuid Overlays::addOverlay(const QString& type, const QVariant& properties) {