Repository navigation
Expand file tree
/
Copy pathCurveFactory.cpp
More file actions
68 lines (54 loc) · 1.87 KB
/
Copy pathCurveFactory.cpp
File metadata and controls
68 lines (54 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
* ***
* SPDX-FileCopyrightText: 2026 Stagelab Coop SCCL
* SPDX-License-Identifier: GPL-3.0-or-later
* ***
*/
#include "CurveFactory.h"
#include <iostream>
#include <memory>
#include "LinearCurve.h"
#include "SigmoidCurve.h"
#include "BezierCurve.h"
#include "EaseInCurve.h"
#include "EaseOutCurve.h"
#include "SCurve.h"
#include "ResampledCurve.h"
#include "daemon/logging.h"
namespace gme {
namespace gradient {
std::optional<std::unique_ptr<Curve>>
CurveFactory::createCurve(const std::string& type,
const nlohmann::json& params)
{
std::unique_ptr<Curve> inner;
if (type == "linear") {
inner = std::make_unique<LinearCurve>();
} else if (type == "sigmoid") {
double steepness = params.value("steepness", 8.0);
double midpoint = params.value("midpoint", 0.5);
inner = std::make_unique<SigmoidCurve>(steepness, midpoint);
} else if (type == "bezier") {
double cx1 = params.value("cx1", 0.25);
double cy1 = params.value("cy1", 0.1);
double cx2 = params.value("cx2", 0.75);
double cy2 = params.value("cy2", 0.9);
inner = std::make_unique<BezierCurve>(cx1, cy1, cx2, cy2);
} else if (type == "ease_in") {
double exp = params.value("exponent", 2.0);
inner = std::make_unique<EaseInCurve>(exp);
} else if (type == "ease_out") {
double exp = params.value("exponent", 2.0);
inner = std::make_unique<EaseOutCurve>(exp);
} else if (type == "scurve") {
inner = std::make_unique<SCurve>();
} else {
GME_LOG_WARNING("CurveFactory: unknown curve type '" + std::string(type)
+ "' — returning nullopt");
return std::nullopt;
}
auto wrapped = std::make_unique<ResampledCurve>(*inner);
return std::make_optional(std::move(wrapped));
}
} // namespace gradient
} // namespace gme