mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 16:36:54 +02:00
More settings hooks
This commit is contained in:
parent
8d37f5ae00
commit
2b3f12a7c4
7 changed files with 107 additions and 71 deletions
|
@ -312,6 +312,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(updateWindowTitle()));
|
connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(updateWindowTitle()));
|
||||||
connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(clearDomainOctreeDetails()));
|
connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(clearDomainOctreeDetails()));
|
||||||
connect(&domainHandler, &DomainHandler::settingsReceived, this, &Application::domainSettingsReceived);
|
connect(&domainHandler, &DomainHandler::settingsReceived, this, &Application::domainSettingsReceived);
|
||||||
|
connect(&domainHandler, &DomainHandler::hostnameChanged,
|
||||||
|
DependencyManager::get<AddressManager>().data(), &AddressManager::storeCurrentAddress);
|
||||||
|
|
||||||
// update our location every 5 seconds in the data-server, assuming that we are authenticated with one
|
// update our location every 5 seconds in the data-server, assuming that we are authenticated with one
|
||||||
const qint64 DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS = 5 * 1000;
|
const qint64 DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS = 5 * 1000;
|
||||||
|
@ -447,6 +449,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
|
|
||||||
_previousScriptLocation = SettingHandles::lastScriptLocation.get();
|
_previousScriptLocation = SettingHandles::lastScriptLocation.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadSettings();
|
||||||
|
|
||||||
_trayIcon->show();
|
_trayIcon->show();
|
||||||
|
|
||||||
|
@ -468,6 +472,7 @@ void Application::aboutToQuit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Application::~Application() {
|
Application::~Application() {
|
||||||
|
saveSettings();
|
||||||
|
|
||||||
_entities.getTree()->setSimulation(NULL);
|
_entities.getTree()->setSimulation(NULL);
|
||||||
qInstallMessageHandler(NULL);
|
qInstallMessageHandler(NULL);
|
||||||
|
@ -1583,6 +1588,20 @@ bool Application::exportEntities(const QString& filename, float x, float y, floa
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Application::loadSettings() {
|
||||||
|
DependencyManager::get<Audio>()->loadSettings();
|
||||||
|
DependencyManager::get<LODManager>()->loadSettings();
|
||||||
|
Menu::getInstance()->loadSettings();
|
||||||
|
_myAvatar->loadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::saveSettings() {
|
||||||
|
DependencyManager::get<Audio>()->saveSettings();
|
||||||
|
DependencyManager::get<LODManager>()->saveSettings();
|
||||||
|
Menu::getInstance()->saveSettings();
|
||||||
|
_myAvatar->saveData();
|
||||||
|
}
|
||||||
|
|
||||||
bool Application::importEntities(const QString& filename) {
|
bool Application::importEntities(const QString& filename) {
|
||||||
_entityClipboard.eraseAllOctreeElements();
|
_entityClipboard.eraseAllOctreeElements();
|
||||||
bool success = _entityClipboard.readFromSVOFile(filename.toLocal8Bit().constData());
|
bool success = _entityClipboard.readFromSVOFile(filename.toLocal8Bit().constData());
|
||||||
|
|
|
@ -364,6 +364,9 @@ public slots:
|
||||||
void resetSensors();
|
void resetSensors();
|
||||||
void aboutApp();
|
void aboutApp();
|
||||||
void showEditEntitiesHelp();
|
void showEditEntitiesHelp();
|
||||||
|
|
||||||
|
void loadSettings();
|
||||||
|
void saveSettings();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void clearDomainOctreeDetails();
|
void clearDomainOctreeDetails();
|
||||||
|
|
|
@ -65,12 +65,12 @@ public:
|
||||||
|
|
||||||
bool shouldRenderMesh(float largestDimension, float distanceToCamera);
|
bool shouldRenderMesh(float largestDimension, float distanceToCamera);
|
||||||
|
|
||||||
private:
|
|
||||||
LODManager() {}
|
|
||||||
|
|
||||||
void loadSettings();
|
void loadSettings();
|
||||||
void saveSettings();
|
void saveSettings();
|
||||||
|
|
||||||
|
private:
|
||||||
|
LODManager() {}
|
||||||
|
|
||||||
bool _automaticAvatarLOD = true;
|
bool _automaticAvatarLOD = true;
|
||||||
float _avatarLODDecreaseFPS = DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS;
|
float _avatarLODDecreaseFPS = DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS;
|
||||||
float _avatarLODIncreaseFPS = ADJUST_LOD_UP_FPS;
|
float _avatarLODIncreaseFPS = ADJUST_LOD_UP_FPS;
|
||||||
|
|
|
@ -555,6 +555,14 @@ Menu::Menu() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Menu::loadSettings() {
|
||||||
|
scanMenuBar(&Menu::loadAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Menu::saveSettings() {
|
||||||
|
scanMenuBar(&Menu::saveAction);
|
||||||
|
}
|
||||||
|
|
||||||
void Menu::loadAction(Settings& settings, QAction& action) {
|
void Menu::loadAction(Settings& settings, QAction& action) {
|
||||||
if (action.isChecked() != settings.value(action.text(), action.isChecked()).toBool()) {
|
if (action.isChecked() != settings.value(action.text(), action.isChecked()).toBool()) {
|
||||||
action.trigger();
|
action.trigger();
|
||||||
|
|
|
@ -27,6 +27,10 @@ class Menu : public QMenuBar {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
static Menu* getInstance();
|
static Menu* getInstance();
|
||||||
|
|
||||||
|
void loadSettings();
|
||||||
|
void saveSettings();
|
||||||
|
|
||||||
QMenu* getMenu(const QString& menuName);
|
QMenu* getMenu(const QString& menuName);
|
||||||
|
|
||||||
void triggerOption(const QString& menuOption);
|
void triggerOption(const QString& menuOption);
|
||||||
|
|
|
@ -679,68 +679,70 @@ AnimationDetails MyAvatar::getAnimationDetails(const QString& url) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyAvatar::saveData(QSettings* settings) {
|
void MyAvatar::saveData() {
|
||||||
settings->beginGroup("Avatar");
|
Settings settings;
|
||||||
|
settings.beginGroup("Avatar");
|
||||||
|
|
||||||
settings->setValue("headPitch", getHead()->getBasePitch());
|
settings.setValue("headPitch", getHead()->getBasePitch());
|
||||||
|
|
||||||
settings->setValue("pupilDilation", getHead()->getPupilDilation());
|
settings.setValue("pupilDilation", getHead()->getPupilDilation());
|
||||||
|
|
||||||
settings->setValue("leanScale", _leanScale);
|
settings.setValue("leanScale", _leanScale);
|
||||||
settings->setValue("scale", _targetScale);
|
settings.setValue("scale", _targetScale);
|
||||||
|
|
||||||
settings->setValue("faceModelURL", _faceModelURL);
|
settings.setValue("faceModelURL", _faceModelURL);
|
||||||
settings->setValue("skeletonModelURL", _skeletonModelURL);
|
settings.setValue("skeletonModelURL", _skeletonModelURL);
|
||||||
|
|
||||||
settings->beginWriteArray("attachmentData");
|
settings.beginWriteArray("attachmentData");
|
||||||
for (int i = 0; i < _attachmentData.size(); i++) {
|
for (int i = 0; i < _attachmentData.size(); i++) {
|
||||||
settings->setArrayIndex(i);
|
settings.setArrayIndex(i);
|
||||||
const AttachmentData& attachment = _attachmentData.at(i);
|
const AttachmentData& attachment = _attachmentData.at(i);
|
||||||
settings->setValue("modelURL", attachment.modelURL);
|
settings.setValue("modelURL", attachment.modelURL);
|
||||||
settings->setValue("jointName", attachment.jointName);
|
settings.setValue("jointName", attachment.jointName);
|
||||||
settings->setValue("translation_x", attachment.translation.x);
|
settings.setValue("translation_x", attachment.translation.x);
|
||||||
settings->setValue("translation_y", attachment.translation.y);
|
settings.setValue("translation_y", attachment.translation.y);
|
||||||
settings->setValue("translation_z", attachment.translation.z);
|
settings.setValue("translation_z", attachment.translation.z);
|
||||||
glm::vec3 eulers = safeEulerAngles(attachment.rotation);
|
glm::vec3 eulers = safeEulerAngles(attachment.rotation);
|
||||||
settings->setValue("rotation_x", eulers.x);
|
settings.setValue("rotation_x", eulers.x);
|
||||||
settings->setValue("rotation_y", eulers.y);
|
settings.setValue("rotation_y", eulers.y);
|
||||||
settings->setValue("rotation_z", eulers.z);
|
settings.setValue("rotation_z", eulers.z);
|
||||||
settings->setValue("scale", attachment.scale);
|
settings.setValue("scale", attachment.scale);
|
||||||
}
|
}
|
||||||
settings->endArray();
|
settings.endArray();
|
||||||
|
|
||||||
settings->beginWriteArray("animationHandles");
|
settings.beginWriteArray("animationHandles");
|
||||||
for (int i = 0; i < _animationHandles.size(); i++) {
|
for (int i = 0; i < _animationHandles.size(); i++) {
|
||||||
settings->setArrayIndex(i);
|
settings.setArrayIndex(i);
|
||||||
const AnimationHandlePointer& pointer = _animationHandles.at(i);
|
const AnimationHandlePointer& pointer = _animationHandles.at(i);
|
||||||
settings->setValue("role", pointer->getRole());
|
settings.setValue("role", pointer->getRole());
|
||||||
settings->setValue("url", pointer->getURL());
|
settings.setValue("url", pointer->getURL());
|
||||||
settings->setValue("fps", pointer->getFPS());
|
settings.setValue("fps", pointer->getFPS());
|
||||||
settings->setValue("priority", pointer->getPriority());
|
settings.setValue("priority", pointer->getPriority());
|
||||||
settings->setValue("loop", pointer->getLoop());
|
settings.setValue("loop", pointer->getLoop());
|
||||||
settings->setValue("hold", pointer->getHold());
|
settings.setValue("hold", pointer->getHold());
|
||||||
settings->setValue("startAutomatically", pointer->getStartAutomatically());
|
settings.setValue("startAutomatically", pointer->getStartAutomatically());
|
||||||
settings->setValue("firstFrame", pointer->getFirstFrame());
|
settings.setValue("firstFrame", pointer->getFirstFrame());
|
||||||
settings->setValue("lastFrame", pointer->getLastFrame());
|
settings.setValue("lastFrame", pointer->getLastFrame());
|
||||||
settings->setValue("maskedJoints", pointer->getMaskedJoints());
|
settings.setValue("maskedJoints", pointer->getMaskedJoints());
|
||||||
}
|
}
|
||||||
settings->endArray();
|
settings.endArray();
|
||||||
|
|
||||||
settings->setValue("displayName", _displayName);
|
settings.setValue("displayName", _displayName);
|
||||||
|
|
||||||
settings->endGroup();
|
settings.endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
float loadSetting(QSettings* settings, const char* name, float defaultValue) {
|
float loadSetting(QSettings& settings, const char* name, float defaultValue) {
|
||||||
float value = settings->value(name, defaultValue).toFloat();
|
float value = settings.value(name, defaultValue).toFloat();
|
||||||
if (glm::isnan(value)) {
|
if (glm::isnan(value)) {
|
||||||
value = defaultValue;
|
value = defaultValue;
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyAvatar::loadData(QSettings* settings) {
|
void MyAvatar::loadData() {
|
||||||
settings->beginGroup("Avatar");
|
Settings settings;
|
||||||
|
settings.beginGroup("Avatar");
|
||||||
|
|
||||||
getHead()->setBasePitch(loadSetting(settings, "headPitch", 0.0f));
|
getHead()->setBasePitch(loadSetting(settings, "headPitch", 0.0f));
|
||||||
|
|
||||||
|
@ -751,16 +753,16 @@ void MyAvatar::loadData(QSettings* settings) {
|
||||||
setScale(_scale);
|
setScale(_scale);
|
||||||
Application::getInstance()->getCamera()->setScale(_scale);
|
Application::getInstance()->getCamera()->setScale(_scale);
|
||||||
|
|
||||||
setFaceModelURL(settings->value("faceModelURL", DEFAULT_HEAD_MODEL_URL).toUrl());
|
setFaceModelURL(settings.value("faceModelURL", DEFAULT_HEAD_MODEL_URL).toUrl());
|
||||||
setSkeletonModelURL(settings->value("skeletonModelURL").toUrl());
|
setSkeletonModelURL(settings.value("skeletonModelURL").toUrl());
|
||||||
|
|
||||||
QVector<AttachmentData> attachmentData;
|
QVector<AttachmentData> attachmentData;
|
||||||
int attachmentCount = settings->beginReadArray("attachmentData");
|
int attachmentCount = settings.beginReadArray("attachmentData");
|
||||||
for (int i = 0; i < attachmentCount; i++) {
|
for (int i = 0; i < attachmentCount; i++) {
|
||||||
settings->setArrayIndex(i);
|
settings.setArrayIndex(i);
|
||||||
AttachmentData attachment;
|
AttachmentData attachment;
|
||||||
attachment.modelURL = settings->value("modelURL").toUrl();
|
attachment.modelURL = settings.value("modelURL").toUrl();
|
||||||
attachment.jointName = settings->value("jointName").toString();
|
attachment.jointName = settings.value("jointName").toString();
|
||||||
attachment.translation.x = loadSetting(settings, "translation_x", 0.0f);
|
attachment.translation.x = loadSetting(settings, "translation_x", 0.0f);
|
||||||
attachment.translation.y = loadSetting(settings, "translation_y", 0.0f);
|
attachment.translation.y = loadSetting(settings, "translation_y", 0.0f);
|
||||||
attachment.translation.z = loadSetting(settings, "translation_z", 0.0f);
|
attachment.translation.z = loadSetting(settings, "translation_z", 0.0f);
|
||||||
|
@ -772,10 +774,10 @@ void MyAvatar::loadData(QSettings* settings) {
|
||||||
attachment.scale = loadSetting(settings, "scale", 1.0f);
|
attachment.scale = loadSetting(settings, "scale", 1.0f);
|
||||||
attachmentData.append(attachment);
|
attachmentData.append(attachment);
|
||||||
}
|
}
|
||||||
settings->endArray();
|
settings.endArray();
|
||||||
setAttachmentData(attachmentData);
|
setAttachmentData(attachmentData);
|
||||||
|
|
||||||
int animationCount = settings->beginReadArray("animationHandles");
|
int animationCount = settings.beginReadArray("animationHandles");
|
||||||
while (_animationHandles.size() > animationCount) {
|
while (_animationHandles.size() > animationCount) {
|
||||||
_animationHandles.takeLast()->stop();
|
_animationHandles.takeLast()->stop();
|
||||||
}
|
}
|
||||||
|
@ -783,24 +785,24 @@ void MyAvatar::loadData(QSettings* settings) {
|
||||||
addAnimationHandle();
|
addAnimationHandle();
|
||||||
}
|
}
|
||||||
for (int i = 0; i < animationCount; i++) {
|
for (int i = 0; i < animationCount; i++) {
|
||||||
settings->setArrayIndex(i);
|
settings.setArrayIndex(i);
|
||||||
const AnimationHandlePointer& handle = _animationHandles.at(i);
|
const AnimationHandlePointer& handle = _animationHandles.at(i);
|
||||||
handle->setRole(settings->value("role", "idle").toString());
|
handle->setRole(settings.value("role", "idle").toString());
|
||||||
handle->setURL(settings->value("url").toUrl());
|
handle->setURL(settings.value("url").toUrl());
|
||||||
handle->setFPS(loadSetting(settings, "fps", 30.0f));
|
handle->setFPS(loadSetting(settings, "fps", 30.0f));
|
||||||
handle->setPriority(loadSetting(settings, "priority", 1.0f));
|
handle->setPriority(loadSetting(settings, "priority", 1.0f));
|
||||||
handle->setLoop(settings->value("loop", true).toBool());
|
handle->setLoop(settings.value("loop", true).toBool());
|
||||||
handle->setHold(settings->value("hold", false).toBool());
|
handle->setHold(settings.value("hold", false).toBool());
|
||||||
handle->setStartAutomatically(settings->value("startAutomatically", true).toBool());
|
handle->setStartAutomatically(settings.value("startAutomatically", true).toBool());
|
||||||
handle->setFirstFrame(settings->value("firstFrame", 0.0f).toFloat());
|
handle->setFirstFrame(settings.value("firstFrame", 0.0f).toFloat());
|
||||||
handle->setLastFrame(settings->value("lastFrame", INT_MAX).toFloat());
|
handle->setLastFrame(settings.value("lastFrame", INT_MAX).toFloat());
|
||||||
handle->setMaskedJoints(settings->value("maskedJoints").toStringList());
|
handle->setMaskedJoints(settings.value("maskedJoints").toStringList());
|
||||||
}
|
}
|
||||||
settings->endArray();
|
settings.endArray();
|
||||||
|
|
||||||
setDisplayName(settings->value("displayName").toString());
|
setDisplayName(settings.value("displayName").toString());
|
||||||
|
|
||||||
settings->endGroup();
|
settings.endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyAvatar::saveAttachmentData(const AttachmentData& attachment) const {
|
void MyAvatar::saveAttachmentData(const AttachmentData& attachment) const {
|
||||||
|
@ -841,15 +843,15 @@ AttachmentData MyAvatar::loadAttachmentData(const QUrl& modelURL, const QString&
|
||||||
}
|
}
|
||||||
settings.beginGroup(attachment.jointName);
|
settings.beginGroup(attachment.jointName);
|
||||||
if (settings.contains("translation_x")) {
|
if (settings.contains("translation_x")) {
|
||||||
attachment.translation.x = loadSetting(&settings, "translation_x", 0.0f);
|
attachment.translation.x = loadSetting(settings, "translation_x", 0.0f);
|
||||||
attachment.translation.y = loadSetting(&settings, "translation_y", 0.0f);
|
attachment.translation.y = loadSetting(settings, "translation_y", 0.0f);
|
||||||
attachment.translation.z = loadSetting(&settings, "translation_z", 0.0f);
|
attachment.translation.z = loadSetting(settings, "translation_z", 0.0f);
|
||||||
glm::vec3 eulers;
|
glm::vec3 eulers;
|
||||||
eulers.x = loadSetting(&settings, "rotation_x", 0.0f);
|
eulers.x = loadSetting(settings, "rotation_x", 0.0f);
|
||||||
eulers.y = loadSetting(&settings, "rotation_y", 0.0f);
|
eulers.y = loadSetting(settings, "rotation_y", 0.0f);
|
||||||
eulers.z = loadSetting(&settings, "rotation_z", 0.0f);
|
eulers.z = loadSetting(settings, "rotation_z", 0.0f);
|
||||||
attachment.rotation = glm::quat(eulers);
|
attachment.rotation = glm::quat(eulers);
|
||||||
attachment.scale = loadSetting(&settings, "scale", 1.0f);
|
attachment.scale = loadSetting(settings, "scale", 1.0f);
|
||||||
} else {
|
} else {
|
||||||
attachment = AttachmentData();
|
attachment = AttachmentData();
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,8 +78,8 @@ public:
|
||||||
Q_INVOKABLE AnimationDetails getAnimationDetails(const QString& url);
|
Q_INVOKABLE AnimationDetails getAnimationDetails(const QString& url);
|
||||||
|
|
||||||
// get/set avatar data
|
// get/set avatar data
|
||||||
void saveData(QSettings* settings);
|
void saveData();
|
||||||
void loadData(QSettings* settings);
|
void loadData();
|
||||||
|
|
||||||
void saveAttachmentData(const AttachmentData& attachment) const;
|
void saveAttachmentData(const AttachmentData& attachment) const;
|
||||||
AttachmentData loadAttachmentData(const QUrl& modelURL, const QString& jointName = QString()) const;
|
AttachmentData loadAttachmentData(const QUrl& modelURL, const QString& jointName = QString()) const;
|
||||||
|
|
Loading…
Reference in a new issue