This commit is contained in:
Vladislav Khorev committed 2026-04-16 15:16:45 +03:00
commit 24851a89e8
11 files changed
+811 -77

No files matched your search

+55
View File
@@ -29,6 +29,28 @@ ComparisonOp DialogueDatabase::parseComparisonOp(const std::string& value) {
return ComparisonOp::Exists;
}
EasingType DialogueDatabase::parseEasingType(const std::string& value) {
if (value == "EaseInSine") return EasingType::EaseInSine;
if (value == "EaseOutSine") return EasingType::EaseOutSine;
if (value == "EaseInOutSine") return EasingType::EaseInOutSine;
if (value == "EaseInQuad") return EasingType::EaseInQuad;
if (value == "EaseOutQuad") return EasingType::EaseOutQuad;
if (value == "EaseInOutQuad") return EasingType::EaseInOutQuad;
if (value == "EaseInCubic") return EasingType::EaseInCubic;
if (value == "EaseOutCubic") return EasingType::EaseOutCubic;
if (value == "EaseInOutCubic") return EasingType::EaseInOutCubic;
return EasingType::Linear;
}
CutsceneAnchor DialogueDatabase::parseCutsceneAnchor(const std::string& value) {
if (value == "TopLeft") return CutsceneAnchor::TopLeft;
if (value == "TopRight") return CutsceneAnchor::TopRight;
if (value == "BottomRight") return CutsceneAnchor::BottomRight;
if (value == "BottomLeft") return CutsceneAnchor::BottomLeft;
if (value == "Custom") return CutsceneAnchor::Custom;
return CutsceneAnchor::Center;
}
Condition DialogueDatabase::parseCondition(const json& j) {
Condition c;
c.flag = j.value("flag", "");
@@ -127,12 +149,45 @@ CutsceneLine DialogueDatabase::parseCutsceneLine(const json& j) {
return line;
}
CutsceneCameraPose DialogueDatabase::parseCutsceneCameraPose(const json& j) {
CutsceneCameraPose pose;
pose.anchor = parseCutsceneAnchor(j.value("anchor", "Center"));
pose.centerX = j.value("centerX", 0.5f);
pose.centerY = j.value("centerY", 0.5f);
pose.zoom = j.value("zoom", 1.0f);
pose.rotationDeg = j.value("rotationDeg", 0.0f);
return pose;
}
CutsceneCameraSegment DialogueDatabase::parseCutsceneCameraSegment(const json& j) {
CutsceneCameraSegment segment;
segment.durationMs = j.value("durationMs", 0);
segment.easing = parseEasingType(j.value("easing", "EaseInOutSine"));
if (j.contains("from") && j["from"].is_object()) {
segment.from = parseCutsceneCameraPose(j["from"]);
}
if (j.contains("to") && j["to"].is_object()) {
segment.to = parseCutsceneCameraPose(j["to"]);
}
else {
segment.to = segment.from;
}
return segment;
}
StaticCutsceneDefinition DialogueDatabase::parseCutscene(const json& j) {
StaticCutsceneDefinition cutscene;
cutscene.id = j.value("id", "");
cutscene.background = j.value("background", "");
cutscene.music = j.value("music", "");
cutscene.skippable = j.value("skippable", true);
cutscene.durationMs = j.value("durationMs", 0);
if (j.contains("cameraTrack") && j["cameraTrack"].is_array()) {
for (const auto& item : j["cameraTrack"]) {
cutscene.cameraTrack.push_back(parseCutsceneCameraSegment(item));
}
}
if (j.contains("lines") && j["lines"].is_array()) {
for (const auto& item : j["lines"]) {