rngine 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/typescript/src/nativeTypes.d.ts +3 -1
- package/lib/typescript/src/nativeTypes.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/Entity.hpp +5 -1
- package/nitrogen/generated/shared/c++/EntityUpdate.hpp +5 -1
- package/nitrogen/generated/shared/c++/Screen.hpp +6 -2
- package/nitrogen/generated/shared/c++/ScreenUpdate.hpp +6 -2
- package/package.json +1 -1
- package/shared/GameLoop.cpp +2 -2
- package/shared/GameMethods.cpp +2 -0
- package/shared/utils/AssetUtils.cpp +12 -5
- package/shared/utils/AssetUtils.hpp +3 -2
- package/src/nativeTypes.ts +3 -1
|
@@ -31,8 +31,10 @@ interface Renderable {
|
|
|
31
31
|
flipV?: boolean;
|
|
32
32
|
/** Animation progress between 0 and 1, automatically advanced each tick for Lottie assets. */
|
|
33
33
|
progress?: number;
|
|
34
|
-
/** Playback speed multiplier for
|
|
34
|
+
/** Playback speed multiplier for Lottie assets (1 = normal speed). */
|
|
35
35
|
speed?: number;
|
|
36
|
+
/** Whether the Lottie animation should restart automatically upon completion. */
|
|
37
|
+
loop?: boolean;
|
|
36
38
|
}
|
|
37
39
|
interface Kinematic {
|
|
38
40
|
/** Horizontal velocity in game units per second. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeTypes.d.ts","sourceRoot":"","sources":["../../../src/nativeTypes.ts"],"names":[],"mappings":"AAAA,UAAU,UAAU;IAClB,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,IAAI;IACZ,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,MAAM;IACd,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,MAAM;IACd,2BAA2B;IAC3B,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC;IACrB,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,UAAU;IAClB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qDAAqD;IACrD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"nativeTypes.d.ts","sourceRoot":"","sources":["../../../src/nativeTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,7 @@ namespace margelo::nitro::rngine {
|
|
|
57
57
|
std::optional<bool> flipV SWIFT_PRIVATE;
|
|
58
58
|
std::optional<double> progress SWIFT_PRIVATE;
|
|
59
59
|
std::optional<double> speed SWIFT_PRIVATE;
|
|
60
|
+
std::optional<bool> loop SWIFT_PRIVATE;
|
|
60
61
|
std::optional<double> vx SWIFT_PRIVATE;
|
|
61
62
|
std::optional<double> vy SWIFT_PRIVATE;
|
|
62
63
|
std::optional<double> ax SWIFT_PRIVATE;
|
|
@@ -65,7 +66,7 @@ namespace margelo::nitro::rngine {
|
|
|
65
66
|
|
|
66
67
|
public:
|
|
67
68
|
Entity() = default;
|
|
68
|
-
explicit Entity(std::string id, double px, double py, std::variant<Rect, Circle> shape, std::optional<bool> isSensor, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<double> progress, std::optional<double> speed, std::optional<double> vx, std::optional<double> vy, std::optional<double> ax, std::optional<double> ay, std::optional<double> mass): id(id), px(px), py(py), shape(shape), isSensor(isSensor), color(color), asset(asset), flipH(flipH), flipV(flipV), progress(progress), speed(speed), vx(vx), vy(vy), ax(ax), ay(ay), mass(mass) {}
|
|
69
|
+
explicit Entity(std::string id, double px, double py, std::variant<Rect, Circle> shape, std::optional<bool> isSensor, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<double> progress, std::optional<double> speed, std::optional<bool> loop, std::optional<double> vx, std::optional<double> vy, std::optional<double> ax, std::optional<double> ay, std::optional<double> mass): id(id), px(px), py(py), shape(shape), isSensor(isSensor), color(color), asset(asset), flipH(flipH), flipV(flipV), progress(progress), speed(speed), loop(loop), vx(vx), vy(vy), ax(ax), ay(ay), mass(mass) {}
|
|
69
70
|
|
|
70
71
|
public:
|
|
71
72
|
friend bool operator==(const Entity& lhs, const Entity& rhs) = default;
|
|
@@ -92,6 +93,7 @@ namespace margelo::nitro {
|
|
|
92
93
|
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "flipV"))),
|
|
93
94
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "progress"))),
|
|
94
95
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "speed"))),
|
|
96
|
+
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "loop"))),
|
|
95
97
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "vx"))),
|
|
96
98
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "vy"))),
|
|
97
99
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ax"))),
|
|
@@ -112,6 +114,7 @@ namespace margelo::nitro {
|
|
|
112
114
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "flipV"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.flipV));
|
|
113
115
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "progress"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.progress));
|
|
114
116
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "speed"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.speed));
|
|
117
|
+
obj.setProperty(runtime, PropNameIDCache::get(runtime, "loop"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.loop));
|
|
115
118
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "vx"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.vx));
|
|
116
119
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "vy"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.vy));
|
|
117
120
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "ax"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.ax));
|
|
@@ -138,6 +141,7 @@ namespace margelo::nitro {
|
|
|
138
141
|
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "flipV")))) return false;
|
|
139
142
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "progress")))) return false;
|
|
140
143
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "speed")))) return false;
|
|
144
|
+
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "loop")))) return false;
|
|
141
145
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "vx")))) return false;
|
|
142
146
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "vy")))) return false;
|
|
143
147
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ax")))) return false;
|
|
@@ -57,6 +57,7 @@ namespace margelo::nitro::rngine {
|
|
|
57
57
|
std::optional<bool> flipV SWIFT_PRIVATE;
|
|
58
58
|
std::optional<double> progress SWIFT_PRIVATE;
|
|
59
59
|
std::optional<double> speed SWIFT_PRIVATE;
|
|
60
|
+
std::optional<bool> loop SWIFT_PRIVATE;
|
|
60
61
|
std::optional<double> vx SWIFT_PRIVATE;
|
|
61
62
|
std::optional<double> vy SWIFT_PRIVATE;
|
|
62
63
|
std::optional<double> ax SWIFT_PRIVATE;
|
|
@@ -65,7 +66,7 @@ namespace margelo::nitro::rngine {
|
|
|
65
66
|
|
|
66
67
|
public:
|
|
67
68
|
EntityUpdate() = default;
|
|
68
|
-
explicit EntityUpdate(std::string id, std::optional<double> px, std::optional<double> py, std::optional<std::variant<Rect, Circle>> shape, std::optional<bool> isSensor, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<double> progress, std::optional<double> speed, std::optional<double> vx, std::optional<double> vy, std::optional<double> ax, std::optional<double> ay, std::optional<double> mass): id(id), px(px), py(py), shape(shape), isSensor(isSensor), color(color), asset(asset), flipH(flipH), flipV(flipV), progress(progress), speed(speed), vx(vx), vy(vy), ax(ax), ay(ay), mass(mass) {}
|
|
69
|
+
explicit EntityUpdate(std::string id, std::optional<double> px, std::optional<double> py, std::optional<std::variant<Rect, Circle>> shape, std::optional<bool> isSensor, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<double> progress, std::optional<double> speed, std::optional<bool> loop, std::optional<double> vx, std::optional<double> vy, std::optional<double> ax, std::optional<double> ay, std::optional<double> mass): id(id), px(px), py(py), shape(shape), isSensor(isSensor), color(color), asset(asset), flipH(flipH), flipV(flipV), progress(progress), speed(speed), loop(loop), vx(vx), vy(vy), ax(ax), ay(ay), mass(mass) {}
|
|
69
70
|
|
|
70
71
|
public:
|
|
71
72
|
friend bool operator==(const EntityUpdate& lhs, const EntityUpdate& rhs) = default;
|
|
@@ -92,6 +93,7 @@ namespace margelo::nitro {
|
|
|
92
93
|
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "flipV"))),
|
|
93
94
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "progress"))),
|
|
94
95
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "speed"))),
|
|
96
|
+
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "loop"))),
|
|
95
97
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "vx"))),
|
|
96
98
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "vy"))),
|
|
97
99
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ax"))),
|
|
@@ -112,6 +114,7 @@ namespace margelo::nitro {
|
|
|
112
114
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "flipV"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.flipV));
|
|
113
115
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "progress"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.progress));
|
|
114
116
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "speed"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.speed));
|
|
117
|
+
obj.setProperty(runtime, PropNameIDCache::get(runtime, "loop"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.loop));
|
|
115
118
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "vx"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.vx));
|
|
116
119
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "vy"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.vy));
|
|
117
120
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "ax"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.ax));
|
|
@@ -138,6 +141,7 @@ namespace margelo::nitro {
|
|
|
138
141
|
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "flipV")))) return false;
|
|
139
142
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "progress")))) return false;
|
|
140
143
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "speed")))) return false;
|
|
144
|
+
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "loop")))) return false;
|
|
141
145
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "vx")))) return false;
|
|
142
146
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "vy")))) return false;
|
|
143
147
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ax")))) return false;
|
|
@@ -50,10 +50,11 @@ namespace margelo::nitro::rngine {
|
|
|
50
50
|
std::optional<bool> flipV SWIFT_PRIVATE;
|
|
51
51
|
std::optional<double> progress SWIFT_PRIVATE;
|
|
52
52
|
std::optional<double> speed SWIFT_PRIVATE;
|
|
53
|
+
std::optional<bool> loop SWIFT_PRIVATE;
|
|
53
54
|
|
|
54
55
|
public:
|
|
55
56
|
Screen() = default;
|
|
56
|
-
explicit Screen(double px, double py, double width, double height, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<double> progress, std::optional<double> speed): px(px), py(py), width(width), height(height), color(color), asset(asset), flipH(flipH), flipV(flipV), progress(progress), speed(speed) {}
|
|
57
|
+
explicit Screen(double px, double py, double width, double height, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<double> progress, std::optional<double> speed, std::optional<bool> loop): px(px), py(py), width(width), height(height), color(color), asset(asset), flipH(flipH), flipV(flipV), progress(progress), speed(speed), loop(loop) {}
|
|
57
58
|
|
|
58
59
|
public:
|
|
59
60
|
friend bool operator==(const Screen& lhs, const Screen& rhs) = default;
|
|
@@ -78,7 +79,8 @@ namespace margelo::nitro {
|
|
|
78
79
|
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "flipH"))),
|
|
79
80
|
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "flipV"))),
|
|
80
81
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "progress"))),
|
|
81
|
-
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "speed")))
|
|
82
|
+
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "speed"))),
|
|
83
|
+
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "loop")))
|
|
82
84
|
);
|
|
83
85
|
}
|
|
84
86
|
static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rngine::Screen& arg) {
|
|
@@ -93,6 +95,7 @@ namespace margelo::nitro {
|
|
|
93
95
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "flipV"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.flipV));
|
|
94
96
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "progress"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.progress));
|
|
95
97
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "speed"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.speed));
|
|
98
|
+
obj.setProperty(runtime, PropNameIDCache::get(runtime, "loop"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.loop));
|
|
96
99
|
return obj;
|
|
97
100
|
}
|
|
98
101
|
static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
|
|
@@ -113,6 +116,7 @@ namespace margelo::nitro {
|
|
|
113
116
|
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "flipV")))) return false;
|
|
114
117
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "progress")))) return false;
|
|
115
118
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "speed")))) return false;
|
|
119
|
+
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "loop")))) return false;
|
|
116
120
|
return true;
|
|
117
121
|
}
|
|
118
122
|
};
|
|
@@ -50,10 +50,11 @@ namespace margelo::nitro::rngine {
|
|
|
50
50
|
std::optional<bool> flipV SWIFT_PRIVATE;
|
|
51
51
|
std::optional<double> progress SWIFT_PRIVATE;
|
|
52
52
|
std::optional<double> speed SWIFT_PRIVATE;
|
|
53
|
+
std::optional<bool> loop SWIFT_PRIVATE;
|
|
53
54
|
|
|
54
55
|
public:
|
|
55
56
|
ScreenUpdate() = default;
|
|
56
|
-
explicit ScreenUpdate(std::optional<double> px, std::optional<double> py, std::optional<double> width, std::optional<double> height, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<double> progress, std::optional<double> speed): px(px), py(py), width(width), height(height), color(color), asset(asset), flipH(flipH), flipV(flipV), progress(progress), speed(speed) {}
|
|
57
|
+
explicit ScreenUpdate(std::optional<double> px, std::optional<double> py, std::optional<double> width, std::optional<double> height, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<double> progress, std::optional<double> speed, std::optional<bool> loop): px(px), py(py), width(width), height(height), color(color), asset(asset), flipH(flipH), flipV(flipV), progress(progress), speed(speed), loop(loop) {}
|
|
57
58
|
|
|
58
59
|
public:
|
|
59
60
|
friend bool operator==(const ScreenUpdate& lhs, const ScreenUpdate& rhs) = default;
|
|
@@ -78,7 +79,8 @@ namespace margelo::nitro {
|
|
|
78
79
|
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "flipH"))),
|
|
79
80
|
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "flipV"))),
|
|
80
81
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "progress"))),
|
|
81
|
-
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "speed")))
|
|
82
|
+
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "speed"))),
|
|
83
|
+
JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "loop")))
|
|
82
84
|
);
|
|
83
85
|
}
|
|
84
86
|
static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rngine::ScreenUpdate& arg) {
|
|
@@ -93,6 +95,7 @@ namespace margelo::nitro {
|
|
|
93
95
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "flipV"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.flipV));
|
|
94
96
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "progress"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.progress));
|
|
95
97
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "speed"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.speed));
|
|
98
|
+
obj.setProperty(runtime, PropNameIDCache::get(runtime, "loop"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.loop));
|
|
96
99
|
return obj;
|
|
97
100
|
}
|
|
98
101
|
static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
|
|
@@ -113,6 +116,7 @@ namespace margelo::nitro {
|
|
|
113
116
|
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "flipV")))) return false;
|
|
114
117
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "progress")))) return false;
|
|
115
118
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "speed")))) return false;
|
|
119
|
+
if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "loop")))) return false;
|
|
116
120
|
return true;
|
|
117
121
|
}
|
|
118
122
|
};
|
package/package.json
CHANGED
package/shared/GameLoop.cpp
CHANGED
|
@@ -185,7 +185,7 @@ void GameLoop::updateStats(double deltaTime) {
|
|
|
185
185
|
void GameLoop::updateScreen(double deltaTime) {
|
|
186
186
|
std::lock_guard<std::mutex> lock(_mutex);
|
|
187
187
|
if (_screen.asset.has_value()) {
|
|
188
|
-
AssetUtils::updateProgress(_screen.progress, _screen.speed,
|
|
188
|
+
AssetUtils::updateProgress(_screen.progress, _screen.speed, _screen.loop,
|
|
189
189
|
_screen.asset.value(), deltaTime);
|
|
190
190
|
}
|
|
191
191
|
}
|
|
@@ -220,7 +220,7 @@ void GameLoop::updateEntities(double deltaTime) {
|
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
if (entity.asset.has_value()) {
|
|
223
|
-
AssetUtils::updateProgress(entity.progress, entity.speed,
|
|
223
|
+
AssetUtils::updateProgress(entity.progress, entity.speed, entity.loop,
|
|
224
224
|
entity.asset.value(), deltaTime);
|
|
225
225
|
}
|
|
226
226
|
}
|
package/shared/GameMethods.cpp
CHANGED
|
@@ -134,6 +134,7 @@ void GameMethods::updateEntities(
|
|
|
134
134
|
patch(entityUpdate.asset, entity->asset);
|
|
135
135
|
patch(entityUpdate.progress, entity->progress);
|
|
136
136
|
patch(entityUpdate.speed, entity->speed);
|
|
137
|
+
patch(entityUpdate.loop, entity->loop);
|
|
137
138
|
patch(entityUpdate.color, entity->color);
|
|
138
139
|
patch(entityUpdate.flipH, entity->flipH);
|
|
139
140
|
patch(entityUpdate.flipV, entity->flipV);
|
|
@@ -163,6 +164,7 @@ void GameMethods::updateScreen(const ScreenUpdate &screenUpdate) {
|
|
|
163
164
|
patch(screenUpdate.asset, screen.asset);
|
|
164
165
|
patch(screenUpdate.progress, screen.progress);
|
|
165
166
|
patch(screenUpdate.speed, screen.speed);
|
|
167
|
+
patch(screenUpdate.loop, screen.loop);
|
|
166
168
|
patch(screenUpdate.color, screen.color);
|
|
167
169
|
patch(screenUpdate.flipH, screen.flipH);
|
|
168
170
|
patch(screenUpdate.flipV, screen.flipV);
|
|
@@ -73,16 +73,23 @@ void drawAsset(SkCanvas *canvas, double asset, float targetWidth,
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
void updateProgress(std::optional<double> &progress,
|
|
76
|
-
std::optional<double> &speed,
|
|
77
|
-
double
|
|
76
|
+
const std::optional<double> &speed,
|
|
77
|
+
const std::optional<bool> &loop, const double asset,
|
|
78
|
+
const double deltaTime) {
|
|
78
79
|
if (asset < 0) {
|
|
79
80
|
auto &lottieCache = GameRenderer::getInstance().getLottieCacheInternal();
|
|
80
81
|
auto it = lottieCache.find(asset);
|
|
81
82
|
if (it != lottieCache.end() && it->second) {
|
|
82
83
|
if (speed.has_value() && speed.value() > 0) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
double newProgress =
|
|
85
|
+
progress.value_or(0.0) +
|
|
86
|
+
(deltaTime * speed.value()) / it->second->duration();
|
|
87
|
+
|
|
88
|
+
if (loop.value_or(false)) {
|
|
89
|
+
progress = std::fmod(newProgress, 1.0);
|
|
90
|
+
} else {
|
|
91
|
+
progress = std::min(newProgress, 1.0);
|
|
92
|
+
}
|
|
86
93
|
}
|
|
87
94
|
}
|
|
88
95
|
} else if (progress.has_value()) {
|
|
@@ -6,6 +6,7 @@ namespace margelo::nitro::rngine::AssetUtils {
|
|
|
6
6
|
void drawAsset(SkCanvas *canvas, double asset, float targetWidth,
|
|
7
7
|
float targetHeight, bool flipH, bool flipV, double progress);
|
|
8
8
|
void updateProgress(std::optional<double> &progress,
|
|
9
|
-
std::optional<double> &speed,
|
|
10
|
-
double
|
|
9
|
+
const std::optional<double> &speed,
|
|
10
|
+
const std::optional<bool> &loop, const double asset,
|
|
11
|
+
const double deltaTime);
|
|
11
12
|
} // namespace margelo::nitro::rngine::AssetUtils
|
package/src/nativeTypes.ts
CHANGED
|
@@ -35,8 +35,10 @@ interface Renderable {
|
|
|
35
35
|
flipV?: boolean;
|
|
36
36
|
/** Animation progress between 0 and 1, automatically advanced each tick for Lottie assets. */
|
|
37
37
|
progress?: number;
|
|
38
|
-
/** Playback speed multiplier for
|
|
38
|
+
/** Playback speed multiplier for Lottie assets (1 = normal speed). */
|
|
39
39
|
speed?: number;
|
|
40
|
+
/** Whether the Lottie animation should restart automatically upon completion. */
|
|
41
|
+
loop?: boolean;
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
interface Kinematic {
|