mirror of
https://github.com/lubosz/overte.git
synced 2025-04-24 00:13:53 +02:00
Working save and load
This commit is contained in:
parent
98d915cf0f
commit
2525fe5869
3 changed files with 452 additions and 201 deletions
|
@ -6,6 +6,8 @@
|
|||
#include <Interpolate.h>
|
||||
#include <gpu/Context.h>
|
||||
|
||||
#include <QJsonArray>
|
||||
|
||||
#define FADE_MIN_SCALE 0.001
|
||||
#define FADE_MAX_SCALE 10000.0
|
||||
#define FADE_MAX_SPEED 50.f
|
||||
|
@ -117,71 +119,65 @@ FadeCommonParameters::FadeCommonParameters()
|
|||
|
||||
FadeJobConfig::FadeJobConfig()
|
||||
{
|
||||
noiseSize[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = glm::vec3{ 0.75f, 0.75f, 0.75f };
|
||||
noiseSize[FadeJobConfig::BUBBLE_ISECT_OWNER] = glm::vec3{ 1.5f, 1.0f/25.f, 0.5f };
|
||||
noiseSize[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = glm::vec3{ 0.5f, 1.0f / 25.f, 0.5f };
|
||||
noiseSize[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = glm::vec3{ 10.f, 0.01f, 10.0f };
|
||||
noiseSize[FadeJobConfig::AVATAR_CHANGE] = glm::vec3{ 0.4f, 0.4f, 0.4f };
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN].noiseSize = glm::vec3{ 0.75f, 0.75f, 0.75f };
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN].noiseLevel = 1.f;
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN].noiseSpeed = glm::vec3{ 0.0f, 0.0f, 0.0f };
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN].timing = FadeJobConfig::LINEAR;
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN].baseSize = glm::vec3{ 1.0f, 1.0f, 1.0f };
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN].baseLevel = 0.f;
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN]._isInverted = false;
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN]._duration = 4.f;
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN].edgeWidth = 0.1f;
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN].edgeInnerColor = glm::vec4{ 78.f / 255.f, 215.f / 255.f, 255.f / 255.f, 0.0f };
|
||||
events[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN].edgeOuterColor = glm::vec4{ 78.f / 255.f, 215.f / 255.f, 255.f / 255.f, 1.0f };
|
||||
|
||||
noiseLevel[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = 1.f;
|
||||
noiseLevel[FadeJobConfig::BUBBLE_ISECT_OWNER] = 0.37f;
|
||||
noiseLevel[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = 1.f;
|
||||
noiseLevel[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = 0.7f;
|
||||
noiseLevel[FadeJobConfig::AVATAR_CHANGE] = 1.f;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER].noiseSize = glm::vec3{ 1.5f, 1.0f/25.f, 0.5f };
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER].noiseLevel = 0.37f;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER].noiseSpeed = glm::vec3{ 1.0f, 0.2f, 1.0f };
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER].timing = FadeJobConfig::LINEAR;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER].baseSize = glm::vec3{ 2.0f, 2.0f, 2.0f };
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER].baseLevel = 1.f;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER]._isInverted = false;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER]._duration = 4.f;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER].edgeWidth = 0.02f;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER].edgeInnerColor = glm::vec4{ 31.f / 255.f, 198.f / 255.f, 166.f / 255.f, 1.0f };
|
||||
events[FadeJobConfig::BUBBLE_ISECT_OWNER].edgeOuterColor = glm::vec4{ 31.f / 255.f, 198.f / 255.f, 166.f / 255.f, 2.0f };
|
||||
|
||||
noiseSpeed[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = glm::vec3{ 0.0f, 0.0f, 0.0f };
|
||||
noiseSpeed[FadeJobConfig::BUBBLE_ISECT_OWNER] = glm::vec3{ 1.0f, 0.2f, 1.0f };
|
||||
noiseSpeed[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = glm::vec3{ 1.0f, 0.2f, 1.0f };
|
||||
noiseSpeed[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = glm::vec3{ 0.0f, -0.5f, 0.0f };
|
||||
noiseSpeed[FadeJobConfig::AVATAR_CHANGE] = glm::vec3{ 0.0f, 0.0f, 0.0f };
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER].noiseSize = glm::vec3{ 0.5f, 1.0f / 25.f, 0.5f };
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER].noiseLevel = 1.f;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER].noiseSpeed = glm::vec3{ 1.0f, 0.2f, 1.0f };
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER].timing = FadeJobConfig::LINEAR;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER].baseSize = glm::vec3{ 2.0f, 2.0f, 2.0f };
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER].baseLevel = 0.f;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER]._isInverted = false;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER]._duration = 4.f;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER].edgeWidth = 0.025f;
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER].edgeInnerColor = glm::vec4{ 31.f / 255.f, 198.f / 255.f, 166.f / 255.f, 1.0f };
|
||||
events[FadeJobConfig::BUBBLE_ISECT_TRESPASSER].edgeOuterColor = glm::vec4{ 31.f / 255.f, 198.f / 255.f, 166.f / 255.f, 2.0f };
|
||||
|
||||
timing[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = FadeJobConfig::LINEAR;
|
||||
timing[FadeJobConfig::BUBBLE_ISECT_OWNER] = FadeJobConfig::LINEAR;
|
||||
timing[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = FadeJobConfig::LINEAR;
|
||||
timing[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = FadeJobConfig::LINEAR;
|
||||
timing[FadeJobConfig::AVATAR_CHANGE] = FadeJobConfig::LINEAR;
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN].noiseSize = glm::vec3{ 10.f, 0.01f, 10.0f };
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN].noiseLevel = 0.7f;
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN].noiseSpeed = glm::vec3{ 1.0f, -0.5f, 50.0f };
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN].timing = FadeJobConfig::LINEAR;
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN].baseSize = glm::vec3{ 10000.f, 1.0f, 10000.0f };
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN].baseLevel = 1.f;
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN]._isInverted = true;
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN]._duration = 3.f;
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN].edgeWidth = 0.329f;
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN].edgeInnerColor = glm::vec4{ 78.f / 255.f, 215.f / 255.f, 255.f / 255.f, 0.25f };
|
||||
events[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN].edgeOuterColor = glm::vec4{ 78.f / 255.f, 215.f / 255.f, 255.f / 255.f, 1.0f };
|
||||
|
||||
baseSize[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = glm::vec3{ 1.0f, 1.0f, 1.0f };
|
||||
baseSize[FadeJobConfig::BUBBLE_ISECT_OWNER] = glm::vec3{ 2.0f, 2.0f, 2.0f };
|
||||
baseSize[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = glm::vec3{ 2.0f, 2.0f, 2.0f };
|
||||
baseSize[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = glm::vec3{ 10000.f, 1.0f, 10000.0f };
|
||||
baseSize[FadeJobConfig::AVATAR_CHANGE] = glm::vec3{ 0.4f, 0.4f, 0.4f };
|
||||
|
||||
baseLevel[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = 0.f;
|
||||
baseLevel[FadeJobConfig::BUBBLE_ISECT_OWNER] = 1.f;
|
||||
baseLevel[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = 0.f;
|
||||
baseLevel[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = 1.f;
|
||||
baseLevel[FadeJobConfig::AVATAR_CHANGE] = 1.f;
|
||||
|
||||
_isInverted[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = false;
|
||||
_isInverted[FadeJobConfig::BUBBLE_ISECT_OWNER] = false;
|
||||
_isInverted[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = false;
|
||||
_isInverted[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = true;
|
||||
_isInverted[FadeJobConfig::AVATAR_CHANGE] = false;
|
||||
|
||||
_duration[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = 4.f;
|
||||
_duration[FadeJobConfig::BUBBLE_ISECT_OWNER] = 4.f;
|
||||
_duration[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = 4.f;
|
||||
_duration[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = 3.f;
|
||||
_duration[FadeJobConfig::AVATAR_CHANGE] = 3.f;
|
||||
|
||||
edgeWidth[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = 0.1f;
|
||||
edgeWidth[FadeJobConfig::BUBBLE_ISECT_OWNER] = 0.02f;
|
||||
edgeWidth[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = 0.025f;
|
||||
edgeWidth[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = 0.329f;
|
||||
edgeWidth[FadeJobConfig::AVATAR_CHANGE] = 0.05f;
|
||||
|
||||
edgeInnerColor[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = glm::vec4{ 78.f / 255.f, 215.f / 255.f, 255.f / 255.f, 0.0f };
|
||||
edgeInnerColor[FadeJobConfig::BUBBLE_ISECT_OWNER] = glm::vec4{ 31.f / 255.f, 198.f / 255.f, 166.f / 255.f, 1.0f };
|
||||
edgeInnerColor[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = glm::vec4{ 31.f / 255.f, 198.f / 255.f, 166.f / 255.f, 1.0f };
|
||||
edgeInnerColor[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = glm::vec4{ 78.f / 255.f, 215.f / 255.f, 255.f / 255.f, 0.25f };
|
||||
edgeInnerColor[FadeJobConfig::AVATAR_CHANGE] = glm::vec4{ 1.0f, 1.0f, 1.0f, 1.0f };
|
||||
|
||||
edgeOuterColor[FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN] = glm::vec4{ 78.f / 255.f, 215.f / 255.f, 255.f / 255.f, 1.0f };
|
||||
edgeOuterColor[FadeJobConfig::BUBBLE_ISECT_OWNER] = glm::vec4{ 31.f / 255.f, 198.f / 255.f, 166.f / 255.f, 2.0f };
|
||||
edgeOuterColor[FadeJobConfig::BUBBLE_ISECT_TRESPASSER] = glm::vec4{ 31.f / 255.f, 198.f / 255.f, 166.f / 255.f, 2.0f };
|
||||
edgeOuterColor[FadeJobConfig::USER_ENTER_LEAVE_DOMAIN] = glm::vec4{ 78.f / 255.f, 215.f / 255.f, 255.f / 255.f, 1.0f };
|
||||
edgeOuterColor[FadeJobConfig::AVATAR_CHANGE] = glm::vec4{ 1.0f, 1.0f, 1.0f, 1.0f };
|
||||
events[FadeJobConfig::AVATAR_CHANGE].noiseSize = glm::vec3{ 0.4f, 0.4f, 0.4f };
|
||||
events[FadeJobConfig::AVATAR_CHANGE].noiseLevel = 1.f;
|
||||
events[FadeJobConfig::AVATAR_CHANGE].noiseSpeed = glm::vec3{ 0.0f, 0.0f, 0.0f };
|
||||
events[FadeJobConfig::AVATAR_CHANGE].timing = FadeJobConfig::LINEAR;
|
||||
events[FadeJobConfig::AVATAR_CHANGE].baseSize = glm::vec3{ 0.4f, 0.4f, 0.4f };
|
||||
events[FadeJobConfig::AVATAR_CHANGE].baseLevel = 1.f;
|
||||
events[FadeJobConfig::AVATAR_CHANGE]._isInverted = false;
|
||||
events[FadeJobConfig::AVATAR_CHANGE]._duration = 3.f;
|
||||
events[FadeJobConfig::AVATAR_CHANGE].edgeWidth = 0.05f;
|
||||
events[FadeJobConfig::AVATAR_CHANGE].edgeInnerColor = glm::vec4{ 1.0f, 1.0f, 1.0f, 1.0f };
|
||||
events[FadeJobConfig::AVATAR_CHANGE].edgeOuterColor = glm::vec4{ 1.0f, 1.0f, 1.0f, 1.0f };
|
||||
}
|
||||
|
||||
void FadeJobConfig::setEditedCategory(int value) {
|
||||
|
@ -192,169 +188,373 @@ void FadeJobConfig::setEditedCategory(int value) {
|
|||
}
|
||||
|
||||
void FadeJobConfig::setDuration(float value) {
|
||||
_duration[editedCategory] = value;
|
||||
events[editedCategory]._duration = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getDuration() const {
|
||||
return _duration[editedCategory];
|
||||
return events[editedCategory]._duration;
|
||||
}
|
||||
|
||||
void FadeJobConfig::setBaseSizeX(float value) {
|
||||
baseSize[editedCategory].x = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE/ FADE_MIN_SCALE);
|
||||
events[editedCategory].baseSize.x = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE/ FADE_MIN_SCALE);
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getBaseSizeX() const {
|
||||
return valueToParameterPow(baseSize[editedCategory].x, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
return valueToParameterPow(events[editedCategory].baseSize.x, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
}
|
||||
|
||||
void FadeJobConfig::setBaseSizeY(float value) {
|
||||
baseSize[editedCategory].y = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
events[editedCategory].baseSize.y = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getBaseSizeY() const {
|
||||
return valueToParameterPow(baseSize[editedCategory].y, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
return valueToParameterPow(events[editedCategory].baseSize.y, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
}
|
||||
|
||||
void FadeJobConfig::setBaseSizeZ(float value) {
|
||||
baseSize[editedCategory].z = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
events[editedCategory].baseSize.z = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getBaseSizeZ() const {
|
||||
return valueToParameterPow(baseSize[editedCategory].z, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
return valueToParameterPow(events[editedCategory].baseSize.z, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
}
|
||||
|
||||
void FadeJobConfig::setBaseLevel(float value) {
|
||||
baseLevel[editedCategory] = value;
|
||||
events[editedCategory].baseLevel = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
void FadeJobConfig::setInverted(bool value) {
|
||||
_isInverted[editedCategory] = value;
|
||||
events[editedCategory]._isInverted = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
bool FadeJobConfig::isInverted() const {
|
||||
return _isInverted[editedCategory];
|
||||
return events[editedCategory]._isInverted;
|
||||
}
|
||||
|
||||
void FadeJobConfig::setNoiseSizeX(float value) {
|
||||
noiseSize[editedCategory].x = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
events[editedCategory].noiseSize.x = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getNoiseSizeX() const {
|
||||
return valueToParameterPow(noiseSize[editedCategory].x, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
return valueToParameterPow(events[editedCategory].noiseSize.x, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
}
|
||||
|
||||
void FadeJobConfig::setNoiseSizeY(float value) {
|
||||
noiseSize[editedCategory].y = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
events[editedCategory].noiseSize.y = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getNoiseSizeY() const {
|
||||
return valueToParameterPow(noiseSize[editedCategory].y, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
return valueToParameterPow(events[editedCategory].noiseSize.y, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
}
|
||||
|
||||
void FadeJobConfig::setNoiseSizeZ(float value) {
|
||||
noiseSize[editedCategory].z = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
events[editedCategory].noiseSize.z = parameterToValuePow(value, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getNoiseSizeZ() const {
|
||||
return valueToParameterPow(noiseSize[editedCategory].z, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
return valueToParameterPow(events[editedCategory].noiseSize.z, FADE_MIN_SCALE, FADE_MAX_SCALE / FADE_MIN_SCALE);
|
||||
}
|
||||
|
||||
void FadeJobConfig::setNoiseLevel(float value) {
|
||||
noiseLevel[editedCategory] = value;
|
||||
events[editedCategory].noiseLevel = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
void FadeJobConfig::setNoiseSpeedX(float value) {
|
||||
noiseSpeed[editedCategory].x = powf(value, 3.f)*FADE_MAX_SPEED;
|
||||
events[editedCategory].noiseSpeed.x = powf(value, 3.f)*FADE_MAX_SPEED;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getNoiseSpeedX() const {
|
||||
return powf(noiseSpeed[editedCategory].x / FADE_MAX_SPEED, 1.f/3.f);
|
||||
return powf(events[editedCategory].noiseSpeed.x / FADE_MAX_SPEED, 1.f / 3.f);
|
||||
}
|
||||
|
||||
void FadeJobConfig::setNoiseSpeedY(float value) {
|
||||
noiseSpeed[editedCategory].y = powf(value, 3.f)*FADE_MAX_SPEED;
|
||||
events[editedCategory].noiseSpeed.y = powf(value, 3.f)*FADE_MAX_SPEED;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getNoiseSpeedY() const {
|
||||
return powf(noiseSpeed[editedCategory].y / FADE_MAX_SPEED, 1.f / 3.f);
|
||||
return powf(events[editedCategory].noiseSpeed.y / FADE_MAX_SPEED, 1.f / 3.f);
|
||||
}
|
||||
|
||||
void FadeJobConfig::setNoiseSpeedZ(float value) {
|
||||
noiseSpeed[editedCategory].z = powf(value, 3.f)*FADE_MAX_SPEED;
|
||||
events[editedCategory].noiseSpeed.z = powf(value, 3.f)*FADE_MAX_SPEED;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getNoiseSpeedZ() const {
|
||||
return powf(noiseSpeed[editedCategory].z / FADE_MAX_SPEED, 1.f / 3.f);
|
||||
return powf(events[editedCategory].noiseSpeed.z / FADE_MAX_SPEED, 1.f / 3.f);
|
||||
}
|
||||
|
||||
void FadeJobConfig::setEdgeWidth(float value) {
|
||||
edgeWidth[editedCategory] = value * value;
|
||||
events[editedCategory].edgeWidth = value * value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
float FadeJobConfig::getEdgeWidth() const {
|
||||
return sqrtf(edgeWidth[editedCategory]);
|
||||
return sqrtf(events[editedCategory].edgeWidth);
|
||||
}
|
||||
|
||||
void FadeJobConfig::setEdgeInnerColorR(float value) {
|
||||
edgeInnerColor[editedCategory].r = value;
|
||||
events[editedCategory].edgeInnerColor.r = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
void FadeJobConfig::setEdgeInnerColorG(float value) {
|
||||
edgeInnerColor[editedCategory].g = value;
|
||||
events[editedCategory].edgeInnerColor.g = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
void FadeJobConfig::setEdgeInnerColorB(float value) {
|
||||
edgeInnerColor[editedCategory].b = value;
|
||||
events[editedCategory].edgeInnerColor.b = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
void FadeJobConfig::setEdgeInnerIntensity(float value) {
|
||||
edgeInnerColor[editedCategory].a = value;
|
||||
events[editedCategory].edgeInnerColor.a = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
void FadeJobConfig::setEdgeOuterColorR(float value) {
|
||||
edgeOuterColor[editedCategory].r = value;
|
||||
events[editedCategory].edgeOuterColor.r = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
void FadeJobConfig::setEdgeOuterColorG(float value) {
|
||||
edgeOuterColor[editedCategory].g = value;
|
||||
events[editedCategory].edgeOuterColor.g = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
void FadeJobConfig::setEdgeOuterColorB(float value) {
|
||||
edgeOuterColor[editedCategory].b = value;
|
||||
events[editedCategory].edgeOuterColor.b = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
void FadeJobConfig::setEdgeOuterIntensity(float value) {
|
||||
edgeOuterColor[editedCategory].a = value;
|
||||
events[editedCategory].edgeOuterColor.a = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
void FadeJobConfig::setTiming(int value) {
|
||||
assert(value < TIMING_COUNT);
|
||||
timing[editedCategory] = value;
|
||||
events[editedCategory].timing = value;
|
||||
emit dirty();
|
||||
}
|
||||
|
||||
QString FadeJobConfig::eventNames[EVENT_CATEGORY_COUNT] = {
|
||||
"element_enter_leave_domain",
|
||||
"bubble_isect_owner",
|
||||
"bubble_isect_trespasser",
|
||||
"user_enter_leave_domain",
|
||||
"avatar_change",
|
||||
};
|
||||
|
||||
void FadeJobConfig::save() const {
|
||||
assert(category < EVENT_CATEGORY_COUNT);
|
||||
QJsonObject lProperties;
|
||||
const QString configFile = "config/" + eventNames[editedCategory] + ".json";
|
||||
QUrl path(PathUtils::resourcesPath() + configFile);
|
||||
QFile file(path.toString());
|
||||
if (!file.open(QFile::WriteOnly | QFile::Text)) {
|
||||
qWarning() << "Fade event configuration file " << path << " cannot be opened";
|
||||
}
|
||||
else {
|
||||
const auto& event = events[editedCategory];
|
||||
|
||||
lProperties["edgeInnerColor"] = QJsonArray{ event.edgeInnerColor.r, event.edgeInnerColor.g, event.edgeInnerColor.b, event.edgeInnerColor.a };
|
||||
lProperties["edgeOuterColor"] = QJsonArray{ event.edgeOuterColor.r, event.edgeOuterColor.g, event.edgeOuterColor.b, event.edgeOuterColor.a };
|
||||
lProperties["noiseSize"] = QJsonArray{ event.noiseSize.x, event.noiseSize.y, event.noiseSize.z };
|
||||
lProperties["noiseSpeed"] = QJsonArray{ event.noiseSpeed.x, event.noiseSpeed.y, event.noiseSpeed.z };
|
||||
lProperties["baseSize"] = QJsonArray{ event.baseSize.x, event.baseSize.y, event.baseSize.z };
|
||||
lProperties["noiseLevel"] = event.noiseLevel;
|
||||
lProperties["baseLevel"] = event.baseLevel;
|
||||
lProperties["duration"] = event._duration;
|
||||
lProperties["edgeWidth"] = event.edgeWidth;
|
||||
lProperties["timing"] = event.timing;
|
||||
lProperties["isInverted"] = event._isInverted;
|
||||
|
||||
file.write( QJsonDocument(lProperties).toJson() );
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
|
||||
void FadeJobConfig::load() {
|
||||
const QString configFile = "config/" + eventNames[editedCategory] + ".json";
|
||||
|
||||
QUrl path(PathUtils::resourcesPath() + configFile);
|
||||
QFile file(path.toString());
|
||||
if (!file.exists()) {
|
||||
qWarning() << "Fade event configuration file " << path << " does not exist";
|
||||
}
|
||||
else if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
qWarning() << "Fade event configuration file " << path << " cannot be opened";
|
||||
}
|
||||
else {
|
||||
QString fileData = file.readAll();
|
||||
file.close();
|
||||
QJsonParseError error;
|
||||
QJsonDocument doc = QJsonDocument::fromJson(fileData.toUtf8(), &error);
|
||||
if (error.error == error.NoError) {
|
||||
QJsonObject jsonObject = doc.object();
|
||||
QJsonValue value;
|
||||
auto& event = events[editedCategory];
|
||||
|
||||
qCDebug(renderlogging) << "Fade event configuration file" << path << "loaded";
|
||||
|
||||
value = jsonObject["edgeInnerColor"];
|
||||
if (value.isArray()) {
|
||||
QJsonArray data = value.toArray();
|
||||
|
||||
if (data.size() < 4) {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'edgeInnerColor' field. Expected array of size 4";
|
||||
}
|
||||
else {
|
||||
event.edgeInnerColor.r = (float)data.at(0).toDouble();
|
||||
event.edgeInnerColor.g = (float)data.at(1).toDouble();
|
||||
event.edgeInnerColor.b = (float)data.at(2).toDouble();
|
||||
event.edgeInnerColor.a = (float)data.at(3).toDouble();
|
||||
}
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'edgeInnerColor' field. Expected array of size 4";
|
||||
}
|
||||
|
||||
value = jsonObject["edgeOuterColor"];
|
||||
if (value.isArray()) {
|
||||
QJsonArray data = value.toArray();
|
||||
|
||||
if (data.size() < 4) {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'edgeOuterColor' field. Expected array of size 4";
|
||||
}
|
||||
else {
|
||||
event.edgeOuterColor.r = (float)data.at(0).toDouble();
|
||||
event.edgeOuterColor.g = (float)data.at(1).toDouble();
|
||||
event.edgeOuterColor.b = (float)data.at(2).toDouble();
|
||||
event.edgeOuterColor.a = (float)data.at(3).toDouble();
|
||||
}
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'edgeOuterColor' field. Expected array of size 4";
|
||||
}
|
||||
|
||||
value = jsonObject["noiseSize"];
|
||||
if (value.isArray()) {
|
||||
QJsonArray data = value.toArray();
|
||||
|
||||
if (data.size() < 3) {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'noiseSize' field. Expected array of size 3";
|
||||
}
|
||||
else {
|
||||
event.noiseSize.x = (float)data.at(0).toDouble();
|
||||
event.noiseSize.y = (float)data.at(1).toDouble();
|
||||
event.noiseSize.z = (float)data.at(2).toDouble();
|
||||
}
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'noiseSize' field. Expected array of size 3";
|
||||
}
|
||||
|
||||
value = jsonObject["noiseSpeed"];
|
||||
if (value.isArray()) {
|
||||
QJsonArray data = value.toArray();
|
||||
|
||||
if (data.size() < 3) {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'noiseSpeed' field. Expected array of size 3";
|
||||
}
|
||||
else {
|
||||
event.noiseSpeed.x = (float)data.at(0).toDouble();
|
||||
event.noiseSpeed.y = (float)data.at(1).toDouble();
|
||||
event.noiseSpeed.z = (float)data.at(2).toDouble();
|
||||
}
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'noiseSpeed' field. Expected array of size 3";
|
||||
}
|
||||
|
||||
value = jsonObject["baseSize"];
|
||||
if (value.isArray()) {
|
||||
QJsonArray data = value.toArray();
|
||||
|
||||
if (data.size() < 3) {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'baseSize' field. Expected array of size 3";
|
||||
}
|
||||
else {
|
||||
event.baseSize.x = (float)data.at(0).toDouble();
|
||||
event.baseSize.y = (float)data.at(1).toDouble();
|
||||
event.baseSize.z = (float)data.at(2).toDouble();
|
||||
}
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'baseSize' field. Expected array of size 3";
|
||||
}
|
||||
|
||||
value = jsonObject["noiseLevel"];
|
||||
if (value.isDouble()) {
|
||||
event.noiseLevel = (float)value.toDouble();
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'noiseLevel' field. Expected float value";
|
||||
}
|
||||
|
||||
value = jsonObject["baseLevel"];
|
||||
if (value.isDouble()) {
|
||||
event.baseLevel = (float)value.toDouble();
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'baseLevel' field. Expected float value";
|
||||
}
|
||||
|
||||
value = jsonObject["duration"];
|
||||
if (value.isDouble()) {
|
||||
event._duration = (float)value.toDouble();
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'duration' field. Expected float value";
|
||||
}
|
||||
|
||||
value = jsonObject["edgeWidth"];
|
||||
if (value.isDouble()) {
|
||||
event.edgeWidth = std::min(1.f, std::max(0.f, (float)value.toDouble()));
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'edgeWidth' field. Expected float value";
|
||||
}
|
||||
|
||||
value = jsonObject["timing"];
|
||||
if (value.isDouble()) {
|
||||
event.timing = std::max(0, std::min(TIMING_COUNT - 1, value.toInt()));
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'timing' field. Expected integer value";
|
||||
}
|
||||
|
||||
value = jsonObject["isInverted"];
|
||||
if (value.isBool()) {
|
||||
event._isInverted = value.toBool();
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file " << path << " contains an invalid 'isInverted' field. Expected boolean value";
|
||||
}
|
||||
|
||||
emit dirty();
|
||||
}
|
||||
else {
|
||||
qWarning() << "Fade event configuration file" << path << "failed to load:" <<
|
||||
error.errorString() << "at offset" << error.offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FadeConfigureJob::FadeConfigureJob(FadeCommonParameters::Pointer commonParams) :
|
||||
_parameters{ commonParams }
|
||||
{
|
||||
|
@ -370,24 +570,25 @@ void FadeConfigureJob::configure(const Config& config) {
|
|||
|
||||
for (auto i = 0; i < FadeJobConfig::EVENT_CATEGORY_COUNT; i++) {
|
||||
auto& configuration = _configurations[i];
|
||||
const auto& eventConfig = config.events[i];
|
||||
|
||||
_parameters->_durations[i] = config._duration[i];
|
||||
configuration._baseInvSizeAndLevel.x = 1.f / config.baseSize[i].x;
|
||||
configuration._baseInvSizeAndLevel.y = 1.f / config.baseSize[i].y;
|
||||
configuration._baseInvSizeAndLevel.z = 1.f / config.baseSize[i].z;
|
||||
configuration._baseInvSizeAndLevel.w = config.baseLevel[i];
|
||||
configuration._noiseInvSizeAndLevel.x = 1.f / config.noiseSize[i].x;
|
||||
configuration._noiseInvSizeAndLevel.y = 1.f / config.noiseSize[i].y;
|
||||
configuration._noiseInvSizeAndLevel.z = 1.f / config.noiseSize[i].z;
|
||||
configuration._noiseInvSizeAndLevel.w = config.noiseLevel[i];
|
||||
configuration._isInverted = config._isInverted[i] & 1;
|
||||
configuration._edgeWidthInvWidth.x = config.edgeWidth[i];
|
||||
_parameters->_durations[i] = eventConfig._duration;
|
||||
configuration._baseInvSizeAndLevel.x = 1.f / eventConfig.baseSize.x;
|
||||
configuration._baseInvSizeAndLevel.y = 1.f / eventConfig.baseSize.y;
|
||||
configuration._baseInvSizeAndLevel.z = 1.f / eventConfig.baseSize.z;
|
||||
configuration._baseInvSizeAndLevel.w = eventConfig.baseLevel;
|
||||
configuration._noiseInvSizeAndLevel.x = 1.f / eventConfig.noiseSize.x;
|
||||
configuration._noiseInvSizeAndLevel.y = 1.f / eventConfig.noiseSize.y;
|
||||
configuration._noiseInvSizeAndLevel.z = 1.f / eventConfig.noiseSize.z;
|
||||
configuration._noiseInvSizeAndLevel.w = eventConfig.noiseLevel;
|
||||
configuration._isInverted = eventConfig._isInverted & 1;
|
||||
configuration._edgeWidthInvWidth.x = eventConfig.edgeWidth;
|
||||
configuration._edgeWidthInvWidth.y = 1.f / configuration._edgeWidthInvWidth.x;
|
||||
configuration._innerEdgeColor = config.edgeInnerColor[i];
|
||||
configuration._outerEdgeColor = config.edgeOuterColor[i];
|
||||
_parameters->_thresholdScale[i] = 1.f + (configuration._edgeWidthInvWidth.x + std::max(0.f, (config.noiseLevel[i] + config.baseLevel[i])*0.5f-0.5f));
|
||||
_parameters->_noiseSpeed[i] = config.noiseSpeed[i];
|
||||
_parameters->_timing[i] = (FadeJobConfig::Timing) config.timing[i];
|
||||
configuration._innerEdgeColor = eventConfig.edgeInnerColor;
|
||||
configuration._outerEdgeColor = eventConfig.edgeOuterColor;
|
||||
_parameters->_thresholdScale[i] = 1.f + (configuration._edgeWidthInvWidth.x + std::max(0.f, (eventConfig.noiseLevel + eventConfig.baseLevel)*0.5f-0.5f));
|
||||
_parameters->_noiseSpeed[i] = eventConfig.noiseSpeed;
|
||||
_parameters->_timing[i] = (FadeJobConfig::Timing) eventConfig.timing;
|
||||
}
|
||||
_isBufferDirty = true;
|
||||
}
|
||||
|
@ -530,6 +731,7 @@ void FadeRenderJob::updateFadeEdit(const render::RenderContextPointer& renderCon
|
|||
const FadeJobConfig::Timing timing = _parameters->_timing[editedCategory];
|
||||
const double waitTime = 0.5; // Wait between fade in and out
|
||||
double cycleTime = fmod(_editTime, (eventDuration + waitTime) * 2.0);
|
||||
bool inverseTime = false;
|
||||
|
||||
_editTime += deltaTime;
|
||||
_editPreviousTime = now;
|
||||
|
@ -546,9 +748,11 @@ void FadeRenderJob::updateFadeEdit(const render::RenderContextPointer& renderCon
|
|||
}
|
||||
else if (cycleTime < (2 * eventDuration + waitTime)) {
|
||||
_editThreshold = computeElementEnterThreshold(cycleTime - (eventDuration + waitTime), eventDuration, timing);
|
||||
inverseTime = true;
|
||||
}
|
||||
else {
|
||||
_editThreshold = 1.f;
|
||||
inverseTime = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -559,6 +763,9 @@ void FadeRenderJob::updateFadeEdit(const render::RenderContextPointer& renderCon
|
|||
renderContext->jobConfig->setProperty("threshold", threshold);
|
||||
|
||||
_editNoiseOffset = _parameters->_noiseSpeed[editedCategory] * (float)_editTime;
|
||||
if (inverseTime) {
|
||||
_editNoiseOffset = -_editNoiseOffset;
|
||||
}
|
||||
|
||||
switch (editedCategory) {
|
||||
case FadeJobConfig::ELEMENT_ENTER_LEAVE_DOMAIN:
|
||||
|
|
|
@ -98,7 +98,7 @@ public:
|
|||
float getBaseSizeZ() const;
|
||||
|
||||
void setBaseLevel(float value);
|
||||
float getBaseLevel() const { return baseLevel[editedCategory]; }
|
||||
float getBaseLevel() const { return events[editedCategory].baseLevel; }
|
||||
|
||||
void setInverted(bool value);
|
||||
bool isInverted() const;
|
||||
|
@ -113,7 +113,7 @@ public:
|
|||
float getNoiseSizeZ() const;
|
||||
|
||||
void setNoiseLevel(float value);
|
||||
float getNoiseLevel() const { return noiseLevel[editedCategory]; }
|
||||
float getNoiseLevel() const { return events[editedCategory].noiseLevel; }
|
||||
|
||||
void setNoiseSpeedX(float value);
|
||||
float getNoiseSpeedX() const;
|
||||
|
@ -128,46 +128,56 @@ public:
|
|||
float getEdgeWidth() const;
|
||||
|
||||
void setEdgeInnerColorR(float value);
|
||||
float getEdgeInnerColorR() const { return edgeInnerColor[editedCategory].r; }
|
||||
float getEdgeInnerColorR() const { return events[editedCategory].edgeInnerColor.r; }
|
||||
|
||||
void setEdgeInnerColorG(float value);
|
||||
float getEdgeInnerColorG() const { return edgeInnerColor[editedCategory].g; }
|
||||
float getEdgeInnerColorG() const { return events[editedCategory].edgeInnerColor.g; }
|
||||
|
||||
void setEdgeInnerColorB(float value);
|
||||
float getEdgeInnerColorB() const { return edgeInnerColor[editedCategory].b; }
|
||||
float getEdgeInnerColorB() const { return events[editedCategory].edgeInnerColor.b; }
|
||||
|
||||
void setEdgeInnerIntensity(float value);
|
||||
float getEdgeInnerIntensity() const { return edgeInnerColor[editedCategory].a; }
|
||||
float getEdgeInnerIntensity() const { return events[editedCategory].edgeInnerColor.a; }
|
||||
|
||||
void setEdgeOuterColorR(float value);
|
||||
float getEdgeOuterColorR() const { return edgeOuterColor[editedCategory].r; }
|
||||
float getEdgeOuterColorR() const { return events[editedCategory].edgeOuterColor.r; }
|
||||
|
||||
void setEdgeOuterColorG(float value);
|
||||
float getEdgeOuterColorG() const { return edgeOuterColor[editedCategory].g; }
|
||||
float getEdgeOuterColorG() const { return events[editedCategory].edgeOuterColor.g; }
|
||||
|
||||
void setEdgeOuterColorB(float value);
|
||||
float getEdgeOuterColorB() const { return edgeOuterColor[editedCategory].b; }
|
||||
float getEdgeOuterColorB() const { return events[editedCategory].edgeOuterColor.b; }
|
||||
|
||||
void setEdgeOuterIntensity(float value);
|
||||
float getEdgeOuterIntensity() const { return edgeOuterColor[editedCategory].a; }
|
||||
float getEdgeOuterIntensity() const { return events[editedCategory].edgeOuterColor.a; }
|
||||
|
||||
void setTiming(int value);
|
||||
int getTiming() const { return timing[editedCategory]; }
|
||||
int getTiming() const { return events[editedCategory].timing; }
|
||||
|
||||
bool manualFade{ false };
|
||||
float manualThreshold{ 0.f };
|
||||
int editedCategory{ ELEMENT_ENTER_LEAVE_DOMAIN };
|
||||
glm::vec3 noiseSize[EVENT_CATEGORY_COUNT];
|
||||
glm::vec3 noiseSpeed[EVENT_CATEGORY_COUNT];
|
||||
float noiseLevel[EVENT_CATEGORY_COUNT];
|
||||
glm::vec3 baseSize[EVENT_CATEGORY_COUNT];
|
||||
float baseLevel[EVENT_CATEGORY_COUNT];
|
||||
bool _isInverted[EVENT_CATEGORY_COUNT];
|
||||
float _duration[EVENT_CATEGORY_COUNT];
|
||||
float edgeWidth[EVENT_CATEGORY_COUNT];
|
||||
glm::vec4 edgeInnerColor[EVENT_CATEGORY_COUNT];
|
||||
glm::vec4 edgeOuterColor[EVENT_CATEGORY_COUNT];
|
||||
int timing[EVENT_CATEGORY_COUNT];
|
||||
|
||||
struct Event {
|
||||
glm::vec4 edgeInnerColor;
|
||||
glm::vec4 edgeOuterColor;
|
||||
glm::vec3 noiseSize;
|
||||
glm::vec3 noiseSpeed;
|
||||
glm::vec3 baseSize;
|
||||
float noiseLevel;
|
||||
float baseLevel;
|
||||
float _duration;
|
||||
float edgeWidth;
|
||||
int timing;
|
||||
bool _isInverted;
|
||||
};
|
||||
|
||||
Event events[EVENT_CATEGORY_COUNT];
|
||||
|
||||
Q_INVOKABLE void save() const;
|
||||
Q_INVOKABLE void load();
|
||||
|
||||
static QString eventNames[EVENT_CATEGORY_COUNT];
|
||||
|
||||
signals:
|
||||
void dirty();
|
||||
|
|
|
@ -18,6 +18,7 @@ Column {
|
|||
property var config: Render.getConfig("RenderMainView.FadeConfigure");
|
||||
property var switchConfig: Render.getConfig("RenderMainView.FadeSwitch");
|
||||
spacing: 8
|
||||
|
||||
Row {
|
||||
spacing: 8
|
||||
|
||||
|
@ -43,6 +44,7 @@ Column {
|
|||
// This is a hack to be sure the widgets below properly reflect the change of category: delete the Component
|
||||
// by setting the loader source to Null and then recreate it 100ms later
|
||||
paramWidgetLoader.sourceComponent = undefined;
|
||||
postpone.interval = 100
|
||||
postpone.start()
|
||||
}
|
||||
}
|
||||
|
@ -68,6 +70,25 @@ Column {
|
|||
}
|
||||
}
|
||||
|
||||
Action {
|
||||
id: saveAction
|
||||
text: "Save"
|
||||
onTriggered: {
|
||||
root.config.save()
|
||||
}
|
||||
}
|
||||
Action {
|
||||
id: loadAction
|
||||
text: "Load"
|
||||
onTriggered: {
|
||||
root.config.load()
|
||||
// This is a hack to be sure the widgets below properly reflect the change of category: delete the Component
|
||||
// by setting the loader source to Null and then recreate it 500ms later
|
||||
paramWidgetLoader.sourceComponent = undefined;
|
||||
postpone.interval = 500
|
||||
postpone.start()
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: paramWidgets
|
||||
|
@ -277,81 +298,94 @@ Column {
|
|||
}
|
||||
}
|
||||
|
||||
GroupBox {
|
||||
title: "Timing"
|
||||
width: 450
|
||||
Column {
|
||||
spacing: 8
|
||||
Column {
|
||||
GroupBox {
|
||||
title: "Timing"
|
||||
width: 450
|
||||
Column {
|
||||
spacing: 8
|
||||
|
||||
ConfigSlider {
|
||||
label: "Duration"
|
||||
integral: false
|
||||
config: root.config
|
||||
property: "duration"
|
||||
max: 10.0
|
||||
min: 0.1
|
||||
width: 400
|
||||
}
|
||||
ComboBox {
|
||||
width: 400
|
||||
model: ["Linear", "Ease In", "Ease Out", "Ease In / Out"]
|
||||
onCurrentIndexChanged: {
|
||||
root.config["timing"] = currentIndex;
|
||||
ConfigSlider {
|
||||
label: "Duration"
|
||||
integral: false
|
||||
config: root.config
|
||||
property: "duration"
|
||||
max: 10.0
|
||||
min: 0.1
|
||||
width: 400
|
||||
}
|
||||
}
|
||||
GroupBox {
|
||||
title: "Noise Animation"
|
||||
Column {
|
||||
spacing: 8
|
||||
ConfigSlider {
|
||||
label: "Speed X"
|
||||
integral: false
|
||||
config: root.config
|
||||
property: "noiseSpeedX"
|
||||
max: 1.0
|
||||
min: -1.0
|
||||
width: 400
|
||||
}
|
||||
ConfigSlider {
|
||||
label: "Speed Y"
|
||||
integral: false
|
||||
config: root.config
|
||||
property: "noiseSpeedY"
|
||||
max: 1.0
|
||||
min: -1.0
|
||||
width: 400
|
||||
}
|
||||
ConfigSlider {
|
||||
label: "Speed Z"
|
||||
integral: false
|
||||
config: root.config
|
||||
property: "noiseSpeedZ"
|
||||
max: 1.0
|
||||
min: -1.0
|
||||
width: 400
|
||||
ComboBox {
|
||||
width: 400
|
||||
model: ["Linear", "Ease In", "Ease Out", "Ease In / Out"]
|
||||
currentIndex: root.config["timing"]
|
||||
onCurrentIndexChanged: {
|
||||
root.config["timing"] = currentIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PlotPerf {
|
||||
title: "Threshold"
|
||||
height: parent.evalEvenHeight()
|
||||
object: Render.getConfig("RenderMainView.DrawFadeOpaque")
|
||||
valueUnit: "%"
|
||||
valueScale: 0.01
|
||||
valueNumDigits: "1"
|
||||
plots: [
|
||||
{
|
||||
prop: "threshold",
|
||||
label: "Threshold",
|
||||
color: "#FFBB77"
|
||||
GroupBox {
|
||||
title: "Noise Animation"
|
||||
Column {
|
||||
spacing: 8
|
||||
ConfigSlider {
|
||||
label: "Speed X"
|
||||
integral: false
|
||||
config: root.config
|
||||
property: "noiseSpeedX"
|
||||
max: 1.0
|
||||
min: -1.0
|
||||
width: 400
|
||||
}
|
||||
ConfigSlider {
|
||||
label: "Speed Y"
|
||||
integral: false
|
||||
config: root.config
|
||||
property: "noiseSpeedY"
|
||||
max: 1.0
|
||||
min: -1.0
|
||||
width: 400
|
||||
}
|
||||
ConfigSlider {
|
||||
label: "Speed Z"
|
||||
integral: false
|
||||
config: root.config
|
||||
property: "noiseSpeedZ"
|
||||
max: 1.0
|
||||
min: -1.0
|
||||
width: 400
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
PlotPerf {
|
||||
title: "Threshold"
|
||||
height: parent.evalEvenHeight()
|
||||
object: Render.getConfig("RenderMainView.DrawFadeOpaque")
|
||||
valueUnit: "%"
|
||||
valueScale: 0.01
|
||||
valueNumDigits: "1"
|
||||
plots: [
|
||||
{
|
||||
prop: "threshold",
|
||||
label: "Threshold",
|
||||
color: "#FFBB77"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
spacing: 8
|
||||
Button {
|
||||
action: saveAction
|
||||
}
|
||||
Button {
|
||||
action: loadAction
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue