diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 9a2aaca18b..1941ef19b6 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1174,8 +1174,8 @@ void DomainServer::sendDomainListToNode(const SharedNodePointer& node, quint64 r extendedHeaderStream << node->getPermissions(); extendedHeaderStream << limitedNodeList->getAuthenticatePackets(); extendedHeaderStream << nodeData->getLastDomainCheckinTimestamp(); - extendedHeaderStream << requestPacketReceiveTime; - extendedHeaderStream << quint64(duration_cast(p_high_resolution_clock::now().time_since_epoch()).count()); + extendedHeaderStream << quint64(duration_cast(system_clock::now().time_since_epoch()).count()); + extendedHeaderStream << quint64(duration_cast(p_high_resolution_clock::now().time_since_epoch()).count()) - requestPacketReceiveTime; auto domainListPackets = NLPacketList::create(PacketType::DomainList, extendedHeader); // always send the node their own UUID back diff --git a/interface/resources/qml/hifi/simplifiedUI/avatarApp/AvatarApp.qml b/interface/resources/qml/hifi/simplifiedUI/avatarApp/AvatarApp.qml index d6ee593edd..4c6615ebdc 100644 --- a/interface/resources/qml/hifi/simplifiedUI/avatarApp/AvatarApp.qml +++ b/interface/resources/qml/hifi/simplifiedUI/avatarApp/AvatarApp.qml @@ -12,6 +12,7 @@ import QtQuick 2.10 import "../simplifiedConstants" as SimplifiedConstants import "./components" as AvatarAppComponents import stylesUit 1.0 as HifiStylesUit +import TabletScriptingInterface 1.0 import "qrc:////qml//hifi//models" as HifiModels // Absolute path so the same code works everywhere. Rectangle { @@ -99,6 +100,33 @@ Rectangle { } } + Image { + id: homeButton + source: "images/homeIcon.svg" + opacity: homeButtonMouseArea.containsMouse ? 1.0 : 0.7 + anchors.top: parent.top + anchors.topMargin: 15 + anchors.right: parent.right + anchors.rightMargin: 24 + width: 14 + height: 13 + + MouseArea { + id: homeButtonMouseArea + anchors.fill: parent + hoverEnabled: true + onEntered: { + Tablet.playSound(TabletEnums.ButtonHover); + } + onClicked: { + Tablet.playSound(TabletEnums.ButtonClick); + // Can't use `Window.location` in QML, so just use what setting `Window.location` actually calls under the hood: + // AddressManager.handleLookupString(). + AddressManager.handleLookupString(LocationBookmarks.getHomeLocationAddress()); + } + } + } + AvatarAppComponents.DisplayNameHeader { id: displayNameHeader previewUrl: root.avatarPreviewUrl diff --git a/interface/resources/qml/hifi/simplifiedUI/avatarApp/images/homeIcon.svg b/interface/resources/qml/hifi/simplifiedUI/avatarApp/images/homeIcon.svg new file mode 100644 index 0000000000..1aae14e2dd --- /dev/null +++ b/interface/resources/qml/hifi/simplifiedUI/avatarApp/images/homeIcon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml b/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml index e32890a2dd..9c3a33412e 100644 --- a/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml +++ b/interface/resources/qml/hifi/simplifiedUI/settingsApp/general/General.qml @@ -101,7 +101,7 @@ Flickable { HifiStylesUit.GraphikRegular { id: performanceTitle - text: "Performance" + text: "Graphics Preset" Layout.maximumWidth: parent.width height: paintedHeight size: 22 @@ -115,28 +115,28 @@ Flickable { SimplifiedControls.RadioButton { id: performanceLow - text: "Eco" - checked: Performance.getRefreshRateProfile() === RefreshRate.ECO + text: "Low" + checked: Performance.getPerformancePreset() === PerformanceEnums.LOW onClicked: { - Performance.setRefreshRateProfile(RefreshRate.ECO); + Performance.setPerformancePreset(PerformanceEnums.LOW); } } SimplifiedControls.RadioButton { id: performanceMedium - text: "Interactive" - checked: Performance.getRefreshRateProfile() === RefreshRate.INTERACTIVE + text: "Medium" + checked: Performance.getPerformancePreset() === PerformanceEnums.MID onClicked: { - Performance.setRefreshRateProfile(RefreshRate.INTERACTIVE); + Performance.setPerformancePreset(PerformanceEnums.MID); } } SimplifiedControls.RadioButton { id: performanceHigh - text: "Realtime" - checked: Performance.getRefreshRateProfile() === RefreshRate.REALTIME + text: "High" + checked: Performance.getPerformancePreset() === PerformanceEnums.HIGH onClicked: { - Performance.setRefreshRateProfile(RefreshRate.REALTIME); + Performance.setPerformancePreset(PerformanceEnums.HIGH); } } } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b8a9df72d6..d1b3d46dfc 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1311,8 +1311,16 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo accountManager->setAuthURL(NetworkingConstants::METAVERSE_SERVER_URL()); // use our MyAvatar position and quat for address manager path - addressManager->setPositionGetter([this]{ return getMyAvatar()->getWorldFeetPosition(); }); - addressManager->setOrientationGetter([this]{ return getMyAvatar()->getWorldOrientation(); }); + addressManager->setPositionGetter([this] { + auto avatarManager = DependencyManager::get(); + auto myAvatar = avatarManager ? avatarManager->getMyAvatar() : nullptr; + return myAvatar ? myAvatar->getWorldFeetPosition() : Vectors::ZERO; + }); + addressManager->setOrientationGetter([this] { + auto avatarManager = DependencyManager::get(); + auto myAvatar = avatarManager ? avatarManager->getMyAvatar() : nullptr; + return myAvatar ? myAvatar->getWorldOrientation() : glm::quat(); + }); connect(addressManager.data(), &AddressManager::hostChanged, this, &Application::updateWindowTitle); connect(this, &QCoreApplication::aboutToQuit, addressManager.data(), &AddressManager::storeCurrentAddress); @@ -4155,8 +4163,14 @@ bool Application::eventFilter(QObject* object, QEvent* event) { } if (event->type() == QEvent::WindowStateChange) { - if (getWindow()->windowState() == Qt::WindowMinimized) { + if (getWindow()->windowState() & Qt::WindowMinimized) { getRefreshRateManager().setRefreshRateRegime(RefreshRateManager::RefreshRateRegime::MINIMIZED); + } else { + auto* windowStateChangeEvent = static_cast(event); + if (windowStateChangeEvent->oldState() & Qt::WindowMinimized) { + getRefreshRateManager().setRefreshRateRegime(RefreshRateManager::RefreshRateRegime::FOCUS_ACTIVE); + getRefreshRateManager().resetInactiveTimer(); + } } } diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 7ac2103543..ad39b6663a 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -325,8 +325,8 @@ MyAvatar::MyAvatar(QThread* thread) : MyAvatar::~MyAvatar() { _lookAtTargetAvatar.reset(); - delete _myScriptEngine; - _myScriptEngine = nullptr; + delete _scriptEngine; + _scriptEngine = nullptr; } QString MyAvatar::getDominantHand() const { @@ -1598,7 +1598,8 @@ void MyAvatar::handleChangedAvatarEntityData() { blobFailed = true; // blob doesn't exist return; } - if (!EntityItemProperties::blobToProperties(*_myScriptEngine, itr.value(), properties)) { + std::lock_guard guard(_scriptEngineLock); + if (!EntityItemProperties::blobToProperties(*_scriptEngine, itr.value(), properties)) { blobFailed = true; // blob is corrupt } }); @@ -1630,7 +1631,8 @@ void MyAvatar::handleChangedAvatarEntityData() { skip = true; return; } - if (!EntityItemProperties::blobToProperties(*_myScriptEngine, itr.value(), properties)) { + std::lock_guard guard(_scriptEngineLock); + if (!EntityItemProperties::blobToProperties(*_scriptEngine, itr.value(), properties)) { skip = true; } }); @@ -1737,7 +1739,10 @@ bool MyAvatar::updateStaleAvatarEntityBlobs() const { if (found) { ++numFound; QByteArray blob; - EntityItemProperties::propertiesToBlob(*_myScriptEngine, getID(), properties, blob); + { + std::lock_guard guard(_scriptEngineLock); + EntityItemProperties::propertiesToBlob(*_scriptEngine, getID(), properties, blob); + } _avatarEntitiesLock.withWriteLock([&] { _cachedAvatarEntityBlobs[id] = blob; }); @@ -1883,8 +1888,8 @@ void MyAvatar::avatarEntityDataToJson(QJsonObject& root) const { } void MyAvatar::loadData() { - if (!_myScriptEngine) { - _myScriptEngine = new QScriptEngine(); + if (!_scriptEngine) { + _scriptEngine = new QScriptEngine(); } getHead()->setBasePitch(_headPitchSetting.get()); @@ -2476,14 +2481,18 @@ QVariantList MyAvatar::getAvatarEntitiesVariant() { if (!entity) { continue; } - QVariantMap avatarEntityData; EncodeBitstreamParams params; auto desiredProperties = entity->getEntityProperties(params); desiredProperties += PROP_LOCAL_POSITION; desiredProperties += PROP_LOCAL_ROTATION; - EntityItemProperties entityProperties = entity->getProperties(desiredProperties); - QScriptValue scriptProperties = EntityItemPropertiesToScriptValue(_myScriptEngine, entityProperties); + QVariantMap avatarEntityData; avatarEntityData["id"] = entityID; + EntityItemProperties entityProperties = entity->getProperties(desiredProperties); + QScriptValue scriptProperties; + { + std::lock_guard guard(_scriptEngineLock); + scriptProperties = EntityItemPropertiesToScriptValue(_scriptEngine, entityProperties); + } avatarEntityData["properties"] = scriptProperties.toVariant(); avatarEntitiesData.append(QVariant(avatarEntityData)); } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 5b12885d1f..058603f320 100755 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -2741,7 +2741,8 @@ private: mutable std::set _staleCachedAvatarEntityBlobs; // // keep a ScriptEngine around so we don't have to instantiate on the fly (these are very slow to create/delete) - QScriptEngine* _myScriptEngine { nullptr }; + mutable std::mutex _scriptEngineLock; + QScriptEngine* _scriptEngine { nullptr }; bool _needToSaveAvatarEntitySettings { false }; }; diff --git a/interface/src/scripting/PerformanceScriptingInterface.cpp b/interface/src/scripting/PerformanceScriptingInterface.cpp index 81f1fcd3ad..bdd0dd2451 100644 --- a/interface/src/scripting/PerformanceScriptingInterface.cpp +++ b/interface/src/scripting/PerformanceScriptingInterface.cpp @@ -15,7 +15,7 @@ std::once_flag PerformanceScriptingInterface::registry_flag; PerformanceScriptingInterface::PerformanceScriptingInterface() { std::call_once(registry_flag, [] { - qmlRegisterType("PerformanceEnums", 1, 0, "RefreshRate"); + qmlRegisterType("PerformanceEnums", 1, 0, "PerformanceEnums"); }); } diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index ce4387a006..e5205e86e8 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -104,41 +104,199 @@ bool EntityItemProperties::constructFromBuffer(const unsigned char* data, int da return true; } -QHash stringToShapeTypeLookup; - -void addShapeType(ShapeType type) { - stringToShapeTypeLookup[ShapeInfo::getNameForShapeType(type)] = type; +inline void addShapeType(QHash& lookup, ShapeType type) { lookup[ShapeInfo::getNameForShapeType(type)] = type; } +QHash stringToShapeTypeLookup = [] { + QHash toReturn; + addShapeType(toReturn, SHAPE_TYPE_NONE); + addShapeType(toReturn, SHAPE_TYPE_BOX); + addShapeType(toReturn, SHAPE_TYPE_SPHERE); + addShapeType(toReturn, SHAPE_TYPE_CAPSULE_X); + addShapeType(toReturn, SHAPE_TYPE_CAPSULE_Y); + addShapeType(toReturn, SHAPE_TYPE_CAPSULE_Z); + addShapeType(toReturn, SHAPE_TYPE_CYLINDER_X); + addShapeType(toReturn, SHAPE_TYPE_CYLINDER_Y); + addShapeType(toReturn, SHAPE_TYPE_CYLINDER_Z); + addShapeType(toReturn, SHAPE_TYPE_HULL); + addShapeType(toReturn, SHAPE_TYPE_PLANE); + addShapeType(toReturn, SHAPE_TYPE_COMPOUND); + addShapeType(toReturn, SHAPE_TYPE_SIMPLE_HULL); + addShapeType(toReturn, SHAPE_TYPE_SIMPLE_COMPOUND); + addShapeType(toReturn, SHAPE_TYPE_STATIC_MESH); + addShapeType(toReturn, SHAPE_TYPE_ELLIPSOID); + addShapeType(toReturn, SHAPE_TYPE_CIRCLE); + return toReturn; +}(); +QString EntityItemProperties::getShapeTypeAsString() const { return ShapeInfo::getNameForShapeType(_shapeType); } +void EntityItemProperties::setShapeTypeFromString(const QString& shapeName) { + auto shapeTypeItr = stringToShapeTypeLookup.find(shapeName.toLower()); + if (shapeTypeItr != stringToShapeTypeLookup.end()) { + _shapeType = shapeTypeItr.value(); + _shapeTypeChanged = true; + } } -void buildStringToShapeTypeLookup() { - addShapeType(SHAPE_TYPE_NONE); - addShapeType(SHAPE_TYPE_BOX); - addShapeType(SHAPE_TYPE_SPHERE); - addShapeType(SHAPE_TYPE_CAPSULE_X); - addShapeType(SHAPE_TYPE_CAPSULE_Y); - addShapeType(SHAPE_TYPE_CAPSULE_Z); - addShapeType(SHAPE_TYPE_CYLINDER_X); - addShapeType(SHAPE_TYPE_CYLINDER_Y); - addShapeType(SHAPE_TYPE_CYLINDER_Z); - addShapeType(SHAPE_TYPE_HULL); - addShapeType(SHAPE_TYPE_PLANE); - addShapeType(SHAPE_TYPE_COMPOUND); - addShapeType(SHAPE_TYPE_SIMPLE_HULL); - addShapeType(SHAPE_TYPE_SIMPLE_COMPOUND); - addShapeType(SHAPE_TYPE_STATIC_MESH); - addShapeType(SHAPE_TYPE_ELLIPSOID); - addShapeType(SHAPE_TYPE_CIRCLE); +inline void addMaterialMappingMode(QHash& lookup, MaterialMappingMode mode) { lookup[MaterialMappingModeHelpers::getNameForMaterialMappingMode(mode)] = mode; } +const QHash stringToMaterialMappingModeLookup = [] { + QHash toReturn; + addMaterialMappingMode(toReturn, UV); + addMaterialMappingMode(toReturn, PROJECTED); + return toReturn; +}(); +QString EntityItemProperties::getMaterialMappingModeAsString() const { return MaterialMappingModeHelpers::getNameForMaterialMappingMode(_materialMappingMode); } +void EntityItemProperties::setMaterialMappingModeFromString(const QString& materialMappingMode) { + auto materialMappingModeItr = stringToMaterialMappingModeLookup.find(materialMappingMode.toLower()); + if (materialMappingModeItr != stringToMaterialMappingModeLookup.end()) { + _materialMappingMode = materialMappingModeItr.value(); + _materialMappingModeChanged = true; + } } -QHash stringToMaterialMappingModeLookup; - -void addMaterialMappingMode(MaterialMappingMode mode) { - stringToMaterialMappingModeLookup[MaterialMappingModeHelpers::getNameForMaterialMappingMode(mode)] = mode; +inline void addBillboardMode(QHash& lookup, BillboardMode mode) { lookup[BillboardModeHelpers::getNameForBillboardMode(mode)] = mode; } +const QHash stringToBillboardModeLookup = [] { + QHash toReturn; + addBillboardMode(toReturn, BillboardMode::NONE); + addBillboardMode(toReturn, BillboardMode::YAW); + addBillboardMode(toReturn, BillboardMode::FULL); + return toReturn; +}(); +QString EntityItemProperties::getBillboardModeAsString() const { return BillboardModeHelpers::getNameForBillboardMode(_billboardMode); } +void EntityItemProperties::setBillboardModeFromString(const QString& billboardMode) { + auto billboardModeItr = stringToBillboardModeLookup.find(billboardMode.toLower()); + if (billboardModeItr != stringToBillboardModeLookup.end()) { + _billboardMode = billboardModeItr.value(); + _billboardModeChanged = true; + } } -void buildStringToMaterialMappingModeLookup() { - addMaterialMappingMode(UV); - addMaterialMappingMode(PROJECTED); +inline void addRenderLayer(QHash& lookup, RenderLayer mode) { lookup[RenderLayerHelpers::getNameForRenderLayer(mode)] = mode; } +const QHash stringToRenderLayerLookup = [] { + QHash toReturn; + addRenderLayer(toReturn, RenderLayer::WORLD); + addRenderLayer(toReturn, RenderLayer::FRONT); + addRenderLayer(toReturn, RenderLayer::HUD); + return toReturn; +}(); +QString EntityItemProperties::getRenderLayerAsString() const { return RenderLayerHelpers::getNameForRenderLayer(_renderLayer); } +void EntityItemProperties::setRenderLayerFromString(const QString& renderLayer) { + auto renderLayerItr = stringToRenderLayerLookup.find(renderLayer.toLower()); + if (renderLayerItr != stringToRenderLayerLookup.end()) { + _renderLayer = renderLayerItr.value(); + _renderLayerChanged = true; + } +} + +inline void addPrimitiveMode(QHash& lookup, PrimitiveMode mode) { lookup[PrimitiveModeHelpers::getNameForPrimitiveMode(mode)] = mode; } +const QHash stringToPrimitiveModeLookup = [] { + QHash toReturn; + addPrimitiveMode(toReturn, PrimitiveMode::SOLID); + addPrimitiveMode(toReturn, PrimitiveMode::LINES); + return toReturn; +}(); +QString EntityItemProperties::getPrimitiveModeAsString() const { return PrimitiveModeHelpers::getNameForPrimitiveMode(_primitiveMode); } +void EntityItemProperties::setPrimitiveModeFromString(const QString& primitiveMode) { + auto primitiveModeItr = stringToPrimitiveModeLookup.find(primitiveMode.toLower()); + if (primitiveModeItr != stringToPrimitiveModeLookup.end()) { + _primitiveMode = primitiveModeItr.value(); + _primitiveModeChanged = true; + } +} + +inline void addWebInputMode(QHash& lookup, WebInputMode mode) { lookup[WebInputModeHelpers::getNameForWebInputMode(mode)] = mode; } +const QHash stringToWebInputModeLookup = [] { + QHash toReturn; + addWebInputMode(toReturn, WebInputMode::TOUCH); + addWebInputMode(toReturn, WebInputMode::MOUSE); + return toReturn; +}(); +QString EntityItemProperties::getInputModeAsString() const { return WebInputModeHelpers::getNameForWebInputMode(_inputMode); } +void EntityItemProperties::setInputModeFromString(const QString& webInputMode) { + auto webInputModeItr = stringToWebInputModeLookup.find(webInputMode.toLower()); + if (webInputModeItr != stringToWebInputModeLookup.end()) { + _inputMode = webInputModeItr.value(); + _inputModeChanged = true; + } +} + +inline void addGizmoType(QHash& lookup, GizmoType mode) { lookup[GizmoTypeHelpers::getNameForGizmoType(mode)] = mode; } +const QHash stringToGizmoTypeLookup = [] { + QHash toReturn; + addGizmoType(toReturn, GizmoType::RING); + return toReturn; +}(); +QString EntityItemProperties::getGizmoTypeAsString() const { return GizmoTypeHelpers::getNameForGizmoType(_gizmoType); } +void EntityItemProperties::setGizmoTypeFromString(const QString& gizmoType) { + auto gizmoTypeItr = stringToGizmoTypeLookup.find(gizmoType.toLower()); + if (gizmoTypeItr != stringToGizmoTypeLookup.end()) { + _gizmoType = gizmoTypeItr.value(); + _gizmoTypeChanged = true; + } +} + +inline void addComponentMode(QHash& lookup, ComponentMode mode) { lookup[ComponentModeHelpers::getNameForComponentMode(mode)] = mode; } +const QHash stringToComponentMode = [] { + QHash toReturn; + addComponentMode(toReturn, ComponentMode::COMPONENT_MODE_INHERIT); + addComponentMode(toReturn, ComponentMode::COMPONENT_MODE_DISABLED); + addComponentMode(toReturn, ComponentMode::COMPONENT_MODE_ENABLED); + return toReturn; +}(); +QString EntityItemProperties::getComponentModeAsString(uint32_t mode) { return ComponentModeHelpers::getNameForComponentMode((ComponentMode)mode); } +QString EntityItemProperties::getSkyboxModeAsString() const { return getComponentModeAsString(_skyboxMode); } +QString EntityItemProperties::getKeyLightModeAsString() const { return getComponentModeAsString(_keyLightMode); } +QString EntityItemProperties::getAmbientLightModeAsString() const { return getComponentModeAsString(_ambientLightMode); } +QString EntityItemProperties::getHazeModeAsString() const { return getComponentModeAsString(_hazeMode); } +QString EntityItemProperties::getBloomModeAsString() const { return getComponentModeAsString(_bloomMode); } +void EntityItemProperties::setSkyboxModeFromString(const QString& mode) { + auto modeItr = stringToComponentMode.find(mode.toLower()); + if (modeItr != stringToComponentMode.end()) { + _skyboxMode = modeItr.value(); + _skyboxModeChanged = true; + } +} +void EntityItemProperties::setKeyLightModeFromString(const QString& mode) { + auto modeItr = stringToComponentMode.find(mode.toLower()); + if (modeItr != stringToComponentMode.end()) { + _keyLightMode = modeItr.value(); + _keyLightModeChanged = true; + } +} +void EntityItemProperties::setAmbientLightModeFromString(const QString& mode) { + auto modeItr = stringToComponentMode.find(mode.toLower()); + if (modeItr != stringToComponentMode.end()) { + _ambientLightMode = modeItr.value(); + _ambientLightModeChanged = true; + } +} +void EntityItemProperties::setHazeModeFromString(const QString& mode) { + auto modeItr = stringToComponentMode.find(mode.toLower()); + if (modeItr != stringToComponentMode.end()) { + _hazeMode = modeItr.value(); + _hazeModeChanged = true; + } +} +void EntityItemProperties::setBloomModeFromString(const QString& mode) { + auto modeItr = stringToComponentMode.find(mode.toLower()); + if (modeItr != stringToComponentMode.end()) { + _bloomMode = modeItr.value(); + _bloomModeChanged = true; + } +} + +inline void addAvatarPriorityMode(QHash& lookup, AvatarPriorityMode mode) { lookup[AvatarPriorityModeHelpers::getNameForAvatarPriorityMode(mode)] = mode; } +const QHash stringToAvatarPriority = [] { + QHash toReturn; + addAvatarPriorityMode(toReturn, AvatarPriorityMode::AVATAR_PRIORITY_INHERIT); + addAvatarPriorityMode(toReturn, AvatarPriorityMode::AVATAR_PRIORITY_CROWD); + addAvatarPriorityMode(toReturn, AvatarPriorityMode::AVATAR_PRIORITY_HERO); + return toReturn; +}(); +QString EntityItemProperties::getAvatarPriorityAsString() const { return AvatarPriorityModeHelpers::getNameForAvatarPriorityMode((AvatarPriorityMode)_avatarPriority); } +void EntityItemProperties::setAvatarPriorityFromString(const QString& mode) { + auto modeItr = stringToAvatarPriority.find(mode.toLower()); + if (modeItr != stringToAvatarPriority.end()) { + _avatarPriority = modeItr.value(); + _avatarPriorityChanged = true; + } } QString getCollisionGroupAsString(uint16_t group) { @@ -194,134 +352,6 @@ void EntityItemProperties::setCollisionMaskFromString(const QString& maskString) _collisionMaskChanged = true; } -QString EntityItemProperties::getShapeTypeAsString() const { - return ShapeInfo::getNameForShapeType(_shapeType); -} - -void EntityItemProperties::setShapeTypeFromString(const QString& shapeName) { - if (stringToShapeTypeLookup.empty()) { - buildStringToShapeTypeLookup(); - } - auto shapeTypeItr = stringToShapeTypeLookup.find(shapeName.toLower()); - if (shapeTypeItr != stringToShapeTypeLookup.end()) { - _shapeType = shapeTypeItr.value(); - _shapeTypeChanged = true; - } -} - -QString EntityItemProperties::getComponentModeAsString(uint32_t mode) { - // return "inherit" if mode is not valid - if (mode < COMPONENT_MODE_ITEM_COUNT) { - return COMPONENT_MODES[mode].second; - } else { - return COMPONENT_MODES[COMPONENT_MODE_INHERIT].second; - } -} - -QString EntityItemProperties::getHazeModeAsString() const { - return getComponentModeAsString(_hazeMode); -} - -QString EntityItemProperties::getBloomModeAsString() const { - return getComponentModeAsString(_bloomMode); -} - -namespace { - const QStringList AVATAR_PRIORITIES_AS_STRING - { "inherit", "crowd", "hero" }; -} - -QString EntityItemProperties::getAvatarPriorityAsString() const { - return AVATAR_PRIORITIES_AS_STRING.value(_avatarPriority); -} - -std::array::const_iterator EntityItemProperties::findComponent(const QString& mode) { - return std::find_if(COMPONENT_MODES.begin(), COMPONENT_MODES.end(), [&](const ComponentPair& pair) { - return (pair.second == mode); - }); -} - -void EntityItemProperties::setHazeModeFromString(const QString& hazeMode) { - auto result = findComponent(hazeMode); - - if (result != COMPONENT_MODES.end()) { - _hazeMode = result->first; - _hazeModeChanged = true; - } -} - -void EntityItemProperties::setBloomModeFromString(const QString& bloomMode) { - auto result = findComponent(bloomMode); - - if (result != COMPONENT_MODES.end()) { - _bloomMode = result->first; - _bloomModeChanged = true; - } -} - -void EntityItemProperties::setAvatarPriorityFromString(QString const& avatarPriority) { - auto result = AVATAR_PRIORITIES_AS_STRING.indexOf(avatarPriority); - - if (result != -1) { - _avatarPriority = result; - _avatarPriorityChanged = true; - } -} - -QString EntityItemProperties::getKeyLightModeAsString() const { - return getComponentModeAsString(_keyLightMode); -} - -void EntityItemProperties::setKeyLightModeFromString(const QString& keyLightMode) { - auto result = findComponent(keyLightMode); - - if (result != COMPONENT_MODES.end()) { - _keyLightMode = result->first; - _keyLightModeChanged = true; - } -} - -QString EntityItemProperties::getAmbientLightModeAsString() const { - return getComponentModeAsString(_ambientLightMode); -} - -void EntityItemProperties::setAmbientLightModeFromString(const QString& ambientLightMode) { - auto result = findComponent(ambientLightMode); - - if (result != COMPONENT_MODES.end()) { - _ambientLightMode = result->first; - _ambientLightModeChanged = true; - } -} - -QString EntityItemProperties::getSkyboxModeAsString() const { - return getComponentModeAsString(_skyboxMode); -} - -void EntityItemProperties::setSkyboxModeFromString(const QString& skyboxMode) { - auto result = findComponent(skyboxMode); - - if (result != COMPONENT_MODES.end()) { - _skyboxMode = result->first; - _skyboxModeChanged = true; - } -} - -QString EntityItemProperties::getMaterialMappingModeAsString() const { - return MaterialMappingModeHelpers::getNameForMaterialMappingMode(_materialMappingMode); -} - -void EntityItemProperties::setMaterialMappingModeFromString(const QString& materialMappingMode) { - if (stringToMaterialMappingModeLookup.empty()) { - buildStringToMaterialMappingModeLookup(); - } - auto materialMappingModeItr = stringToMaterialMappingModeLookup.find(materialMappingMode.toLower()); - if (materialMappingModeItr != stringToMaterialMappingModeLookup.end()) { - _materialMappingMode = materialMappingModeItr.value(); - _materialMappingModeChanged = true; - } -} - QString EntityItemProperties::getEntityHostTypeAsString() const { switch (_entityHostType) { case entity::HostType::DOMAIN: @@ -345,137 +375,6 @@ void EntityItemProperties::setEntityHostTypeFromString(const QString& entityHost } } -QHash stringToBillboardModeLookup; - -void addBillboardMode(BillboardMode mode) { - stringToBillboardModeLookup[BillboardModeHelpers::getNameForBillboardMode(mode)] = mode; -} - -void buildStringToBillboardModeLookup() { - addBillboardMode(BillboardMode::NONE); - addBillboardMode(BillboardMode::YAW); - addBillboardMode(BillboardMode::FULL); -} - -QString EntityItemProperties::getBillboardModeAsString() const { - return BillboardModeHelpers::getNameForBillboardMode(_billboardMode); -} - -void EntityItemProperties::setBillboardModeFromString(const QString& billboardMode) { - if (stringToBillboardModeLookup.empty()) { - buildStringToBillboardModeLookup(); - } - auto billboardModeItr = stringToBillboardModeLookup.find(billboardMode.toLower()); - if (billboardModeItr != stringToBillboardModeLookup.end()) { - _billboardMode = billboardModeItr.value(); - _billboardModeChanged = true; - } -} - -QHash stringToRenderLayerLookup; - -void addRenderLayer(RenderLayer mode) { - stringToRenderLayerLookup[RenderLayerHelpers::getNameForRenderLayer(mode)] = mode; -} - -void buildStringToRenderLayerLookup() { - addRenderLayer(RenderLayer::WORLD); - addRenderLayer(RenderLayer::FRONT); - addRenderLayer(RenderLayer::HUD); -} - -QString EntityItemProperties::getRenderLayerAsString() const { - return RenderLayerHelpers::getNameForRenderLayer(_renderLayer); -} - -void EntityItemProperties::setRenderLayerFromString(const QString& renderLayer) { - if (stringToRenderLayerLookup.empty()) { - buildStringToRenderLayerLookup(); - } - auto renderLayerItr = stringToRenderLayerLookup.find(renderLayer.toLower()); - if (renderLayerItr != stringToRenderLayerLookup.end()) { - _renderLayer = renderLayerItr.value(); - _renderLayerChanged = true; - } -} - -QHash stringToPrimitiveModeLookup; - -void addPrimitiveMode(PrimitiveMode mode) { - stringToPrimitiveModeLookup[PrimitiveModeHelpers::getNameForPrimitiveMode(mode)] = mode; -} - -void buildStringToPrimitiveModeLookup() { - addPrimitiveMode(PrimitiveMode::SOLID); - addPrimitiveMode(PrimitiveMode::LINES); -} - -QString EntityItemProperties::getPrimitiveModeAsString() const { - return PrimitiveModeHelpers::getNameForPrimitiveMode(_primitiveMode); -} - -void EntityItemProperties::setPrimitiveModeFromString(const QString& primitiveMode) { - if (stringToPrimitiveModeLookup.empty()) { - buildStringToPrimitiveModeLookup(); - } - auto primitiveModeItr = stringToPrimitiveModeLookup.find(primitiveMode.toLower()); - if (primitiveModeItr != stringToPrimitiveModeLookup.end()) { - _primitiveMode = primitiveModeItr.value(); - _primitiveModeChanged = true; - } -} - -QHash stringToWebInputModeLookup; - -void addWebInputMode(WebInputMode mode) { - stringToWebInputModeLookup[WebInputModeHelpers::getNameForWebInputMode(mode)] = mode; -} - -void buildStringToWebInputModeLookup() { - addWebInputMode(WebInputMode::TOUCH); - addWebInputMode(WebInputMode::MOUSE); -} - -QString EntityItemProperties::getInputModeAsString() const { - return WebInputModeHelpers::getNameForWebInputMode(_inputMode); -} - -void EntityItemProperties::setInputModeFromString(const QString& webInputMode) { - if (stringToWebInputModeLookup.empty()) { - buildStringToWebInputModeLookup(); - } - auto webInputModeItr = stringToWebInputModeLookup.find(webInputMode.toLower()); - if (webInputModeItr != stringToWebInputModeLookup.end()) { - _inputMode = webInputModeItr.value(); - _inputModeChanged = true; - } -} - -QHash stringToGizmoTypeLookup; - -void addGizmoType(GizmoType mode) { - stringToGizmoTypeLookup[GizmoTypeHelpers::getNameForGizmoType(mode)] = mode; -} - -void buildStringToGizmoTypeLookup() { - addGizmoType(GizmoType::RING); -} - -QString EntityItemProperties::getGizmoTypeAsString() const { - return GizmoTypeHelpers::getNameForGizmoType(_gizmoType); -} - -void EntityItemProperties::setGizmoTypeFromString(const QString& gizmoType) { - if (stringToGizmoTypeLookup.empty()) { - buildStringToGizmoTypeLookup(); - } - auto gizmoTypeItr = stringToGizmoTypeLookup.find(gizmoType.toLower()); - if (gizmoTypeItr != stringToGizmoTypeLookup.end()) { - _gizmoType = gizmoTypeItr.value(); - _gizmoTypeChanged = true; - } -} - EntityPropertyFlags EntityItemProperties::getChangedProperties() const { EntityPropertyFlags changedProperties; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index af945a89de..619af97ee5 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -67,13 +67,6 @@ const quint64 UNKNOWN_CREATED_TIME = 0; -using ComponentPair = std::pair; -const std::array COMPONENT_MODES = { { - ComponentPair { COMPONENT_MODE_INHERIT, { "inherit" } }, - ComponentPair { COMPONENT_MODE_DISABLED, { "disabled" } }, - ComponentPair { COMPONENT_MODE_ENABLED, { "enabled" } } -} }; - using vec3Color = glm::vec3; using u8vec3Color = glm::u8vec3; @@ -400,8 +393,6 @@ public: static QString getComponentModeAsString(uint32_t mode); - std::array::const_iterator findComponent(const QString& mode); - public: float getMaxDimension() const { return glm::compMax(_dimensions); } diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index 563d6e7ad1..0eda2ee2e0 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -869,6 +869,8 @@ void LimitedNodeList::removeSilentNodes() { QSet killedNodes; + auto startedAt = usecTimestampNow(); + eachNodeHashIterator([&](NodeHash::iterator& it){ SharedNodePointer node = it->second; node->getMutex().lock(); @@ -889,7 +891,15 @@ void LimitedNodeList::removeSilentNodes() { }); foreach(const SharedNodePointer& killedNode, killedNodes) { - qCDebug(networking_ice) << "Removing silent node" << killedNode; + auto now = usecTimestampNow(); + qCDebug(networking_ice) << "Removing silent node" << *killedNode << "\n" + << " Now: " << now << "\n" + << " Started at: " << startedAt << " (" << (now - startedAt) << "us ago)\n" + << " Last Heard Microstamp: " << killedNode->getLastHeardMicrostamp() << " (" << (now - killedNode->getLastHeardMicrostamp()) << "us ago)\n" + << " Forced Never Silent: " << killedNode->isForcedNeverSilent() << "\n" + << " Inbound PPS: " << killedNode->getInboundPPS() << "\n" + << " Inbound Kbps: " << killedNode->getInboundKbps() << "\n" + << " Ping: " << killedNode->getPingMs(); handleNodeKill(killedNode); } } diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index ae2a495431..038d656dbb 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -416,7 +416,7 @@ void NodeList::sendDomainServerCheckIn() { packetStream << FingerprintUtils::getMachineFingerprint(); } - packetStream << quint64(duration_cast(p_high_resolution_clock::now().time_since_epoch()).count()); + packetStream << quint64(duration_cast(system_clock::now().time_since_epoch()).count()); // pack our data to send to the domain-server including // the hostname information (so the domain-server can see which place name we came in on) @@ -649,21 +649,20 @@ void NodeList::processDomainServerList(QSharedPointer message) bool isAuthenticated; packetStream >> isAuthenticated; - qint64 now = qint64(duration_cast(p_high_resolution_clock::now().time_since_epoch()).count()); + qint64 now = qint64(duration_cast(system_clock::now().time_since_epoch()).count()); quint64 connectRequestTimestamp; packetStream >> connectRequestTimestamp; - quint64 domainServerRequestReceiveTime; - packetStream >> domainServerRequestReceiveTime; - quint64 domainServerPingSendTime; packetStream >> domainServerPingSendTime; + quint64 domainServerCheckinProcessingTime; + packetStream >> domainServerCheckinProcessingTime; + qint64 pingLagTime = (now - qint64(connectRequestTimestamp)) / qint64(USECS_PER_MSEC); - qint64 domainServerRequestLag = (qint64(domainServerRequestReceiveTime) - qint64(connectRequestTimestamp)) / qint64(USECS_PER_MSEC); - quint64 domainServerCheckinProcessingTime = domainServerPingSendTime - domainServerRequestReceiveTime; + qint64 domainServerRequestLag = (qint64(domainServerPingSendTime - domainServerCheckinProcessingTime) - qint64(connectRequestTimestamp)) / qint64(USECS_PER_MSEC);; qint64 domainServerResponseLag = (now - qint64(domainServerPingSendTime)) / qint64(USECS_PER_MSEC); if (_domainHandler.getSockAddr().isNull()) { diff --git a/libraries/shared/src/ComponentMode.cpp b/libraries/shared/src/ComponentMode.cpp new file mode 100644 index 0000000000..5b3a42e9ae --- /dev/null +++ b/libraries/shared/src/ComponentMode.cpp @@ -0,0 +1,37 @@ +// +// Created by Sam Gondelman on 5/31/19 +// 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 +// + +#include "ComponentMode.h" + +const char* componentModeNames[] = { + "inherit", + "disabled", + "enabled" +}; + +QString ComponentModeHelpers::getNameForComponentMode(ComponentMode mode) { + if (((int)mode <= 0) || ((int)mode >= (int)COMPONENT_MODE_ITEM_COUNT)) { + mode = (ComponentMode)0; + } + + return componentModeNames[(int)mode]; +} + +const char* avatarPriorityModeNames[] = { + "inherit", + "crowd", + "hero" +}; + +QString AvatarPriorityModeHelpers::getNameForAvatarPriorityMode(AvatarPriorityMode mode) { + if (((int)mode <= 0) || ((int)mode >= (int)AVATAR_PRIORITY_ITEM_COUNT)) { + mode = (AvatarPriorityMode)0; + } + + return avatarPriorityModeNames[(int)mode]; +} \ No newline at end of file diff --git a/libraries/shared/src/ComponentMode.h b/libraries/shared/src/ComponentMode.h index 03721c6a45..f1d030cefd 100644 --- a/libraries/shared/src/ComponentMode.h +++ b/libraries/shared/src/ComponentMode.h @@ -12,6 +12,8 @@ #ifndef hifi_ComponentMode_h #define hifi_ComponentMode_h +#include + enum ComponentMode { COMPONENT_MODE_INHERIT, COMPONENT_MODE_DISABLED, @@ -20,5 +22,23 @@ enum ComponentMode { COMPONENT_MODE_ITEM_COUNT }; +enum AvatarPriorityMode { + AVATAR_PRIORITY_INHERIT, + AVATAR_PRIORITY_CROWD, + AVATAR_PRIORITY_HERO, + + AVATAR_PRIORITY_ITEM_COUNT +}; + +class ComponentModeHelpers { +public: + static QString getNameForComponentMode(ComponentMode mode); +}; + +class AvatarPriorityModeHelpers { +public: + static QString getNameForAvatarPriorityMode(AvatarPriorityMode mode); +}; + #endif // hifi_ComponentMode_h diff --git a/scripts/simplifiedUI/ui/simplifiedUI.js b/scripts/simplifiedUI/ui/simplifiedUI.js index a6183c5ab9..38d1059da7 100644 --- a/scripts/simplifiedUI/ui/simplifiedUI.js +++ b/scripts/simplifiedUI/ui/simplifiedUI.js @@ -98,7 +98,7 @@ function onAvatarAppClosed() { var AVATAR_APP_QML_PATH = Script.resourcesPath() + "qml/hifi/simplifiedUI/avatarApp/AvatarApp.qml"; -var AVATAR_APP_WINDOW_TITLE = "Your Avatars"; +var AVATAR_APP_WINDOW_TITLE = "Your Profile"; var AVATAR_APP_PRESENTATION_MODE = Desktop.PresentationMode.NATIVE; var AVATAR_APP_WIDTH_PX = 480; var AVATAR_APP_HEIGHT_PX = 615;