rngine 0.12.0 → 0.12.1
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/types.d.ts +2 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/EntityInitializer.hpp +6 -2
- package/nitrogen/generated/shared/c++/EntityUpdate.hpp +6 -2
- package/package.json +1 -1
- package/shared/GameLoop.cpp +3 -2
- package/shared/GameMethods.cpp +3 -0
- package/shared/custom/Entity.hpp +15 -3
- package/src/types.ts +2 -0
|
@@ -58,6 +58,8 @@ interface Kinematic {
|
|
|
58
58
|
ay?: number;
|
|
59
59
|
/** Mass in arbitrary units. */
|
|
60
60
|
mass?: number;
|
|
61
|
+
/** Coefficient of restitution (bounciness) from 0.0 to 1.0. Defaults to 0.0. */
|
|
62
|
+
restitution?: number;
|
|
61
63
|
}
|
|
62
64
|
export interface WorldInitializer {
|
|
63
65
|
/** Number of game logic updates per second. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,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,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAEtE,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,yFAAyF;IACzF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,0FAA0F;IAC1F,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,SAAS;IACjB,oDAAoD;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,10 +73,11 @@ namespace margelo::nitro::rngine {
|
|
|
73
73
|
std::optional<double> ax SWIFT_PRIVATE;
|
|
74
74
|
std::optional<double> ay SWIFT_PRIVATE;
|
|
75
75
|
std::optional<double> mass SWIFT_PRIVATE;
|
|
76
|
+
std::optional<double> restitution SWIFT_PRIVATE;
|
|
76
77
|
|
|
77
78
|
public:
|
|
78
79
|
EntityInitializer() = default;
|
|
79
|
-
explicit EntityInitializer(std::string id, double px, double py, std::variant<Rect, Circle> shape, std::optional<double> angle, std::optional<bool> isSensor, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<ObjectFit> objectFit, std::optional<bool> clip, std::optional<Repeat> repeat, 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), angle(angle), isSensor(isSensor), color(color), asset(asset), flipH(flipH), flipV(flipV), objectFit(objectFit), clip(clip), repeat(repeat), progress(progress), speed(speed), loop(loop), vx(vx), vy(vy), ax(ax), ay(ay), mass(mass) {}
|
|
80
|
+
explicit EntityInitializer(std::string id, double px, double py, std::variant<Rect, Circle> shape, std::optional<double> angle, std::optional<bool> isSensor, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<ObjectFit> objectFit, std::optional<bool> clip, std::optional<Repeat> repeat, 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, std::optional<double> restitution): id(id), px(px), py(py), shape(shape), angle(angle), isSensor(isSensor), color(color), asset(asset), flipH(flipH), flipV(flipV), objectFit(objectFit), clip(clip), repeat(repeat), progress(progress), speed(speed), loop(loop), vx(vx), vy(vy), ax(ax), ay(ay), mass(mass), restitution(restitution) {}
|
|
80
81
|
|
|
81
82
|
public:
|
|
82
83
|
friend bool operator==(const EntityInitializer& lhs, const EntityInitializer& rhs) = default;
|
|
@@ -112,7 +113,8 @@ namespace margelo::nitro {
|
|
|
112
113
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "vy"))),
|
|
113
114
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ax"))),
|
|
114
115
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ay"))),
|
|
115
|
-
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "mass")))
|
|
116
|
+
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "mass"))),
|
|
117
|
+
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "restitution")))
|
|
116
118
|
);
|
|
117
119
|
}
|
|
118
120
|
static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rngine::EntityInitializer& arg) {
|
|
@@ -138,6 +140,7 @@ namespace margelo::nitro {
|
|
|
138
140
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "ax"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.ax));
|
|
139
141
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "ay"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.ay));
|
|
140
142
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "mass"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.mass));
|
|
143
|
+
obj.setProperty(runtime, PropNameIDCache::get(runtime, "restitution"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.restitution));
|
|
141
144
|
return obj;
|
|
142
145
|
}
|
|
143
146
|
static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
|
|
@@ -169,6 +172,7 @@ namespace margelo::nitro {
|
|
|
169
172
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ax")))) return false;
|
|
170
173
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ay")))) return false;
|
|
171
174
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "mass")))) return false;
|
|
175
|
+
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "restitution")))) return false;
|
|
172
176
|
return true;
|
|
173
177
|
}
|
|
174
178
|
};
|
|
@@ -73,10 +73,11 @@ namespace margelo::nitro::rngine {
|
|
|
73
73
|
std::optional<double> ax SWIFT_PRIVATE;
|
|
74
74
|
std::optional<double> ay SWIFT_PRIVATE;
|
|
75
75
|
std::optional<double> mass SWIFT_PRIVATE;
|
|
76
|
+
std::optional<double> restitution SWIFT_PRIVATE;
|
|
76
77
|
|
|
77
78
|
public:
|
|
78
79
|
EntityUpdate() = default;
|
|
79
|
-
explicit EntityUpdate(std::string id, std::optional<double> px, std::optional<double> py, std::optional<std::variant<Rect, Circle>> shape, std::optional<double> angle, std::optional<bool> isSensor, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<ObjectFit> objectFit, std::optional<bool> clip, std::optional<Repeat> repeat, 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), angle(angle), isSensor(isSensor), color(color), asset(asset), flipH(flipH), flipV(flipV), objectFit(objectFit), clip(clip), repeat(repeat), progress(progress), speed(speed), loop(loop), vx(vx), vy(vy), ax(ax), ay(ay), mass(mass) {}
|
|
80
|
+
explicit EntityUpdate(std::string id, std::optional<double> px, std::optional<double> py, std::optional<std::variant<Rect, Circle>> shape, std::optional<double> angle, std::optional<bool> isSensor, std::optional<std::string> color, std::optional<double> asset, std::optional<bool> flipH, std::optional<bool> flipV, std::optional<ObjectFit> objectFit, std::optional<bool> clip, std::optional<Repeat> repeat, 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, std::optional<double> restitution): id(id), px(px), py(py), shape(shape), angle(angle), isSensor(isSensor), color(color), asset(asset), flipH(flipH), flipV(flipV), objectFit(objectFit), clip(clip), repeat(repeat), progress(progress), speed(speed), loop(loop), vx(vx), vy(vy), ax(ax), ay(ay), mass(mass), restitution(restitution) {}
|
|
80
81
|
|
|
81
82
|
public:
|
|
82
83
|
friend bool operator==(const EntityUpdate& lhs, const EntityUpdate& rhs) = default;
|
|
@@ -112,7 +113,8 @@ namespace margelo::nitro {
|
|
|
112
113
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "vy"))),
|
|
113
114
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ax"))),
|
|
114
115
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ay"))),
|
|
115
|
-
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "mass")))
|
|
116
|
+
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "mass"))),
|
|
117
|
+
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "restitution")))
|
|
116
118
|
);
|
|
117
119
|
}
|
|
118
120
|
static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rngine::EntityUpdate& arg) {
|
|
@@ -138,6 +140,7 @@ namespace margelo::nitro {
|
|
|
138
140
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "ax"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.ax));
|
|
139
141
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "ay"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.ay));
|
|
140
142
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "mass"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.mass));
|
|
143
|
+
obj.setProperty(runtime, PropNameIDCache::get(runtime, "restitution"), JSIConverter<std::optional<double>>::toJSI(runtime, arg.restitution));
|
|
141
144
|
return obj;
|
|
142
145
|
}
|
|
143
146
|
static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
|
|
@@ -169,6 +172,7 @@ namespace margelo::nitro {
|
|
|
169
172
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ax")))) return false;
|
|
170
173
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ay")))) return false;
|
|
171
174
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "mass")))) return false;
|
|
175
|
+
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "restitution")))) return false;
|
|
172
176
|
return true;
|
|
173
177
|
}
|
|
174
178
|
};
|
package/package.json
CHANGED
package/shared/GameLoop.cpp
CHANGED
|
@@ -275,9 +275,10 @@ void GameLoop::resolveCollisions() {
|
|
|
275
275
|
if (velocityAlongNormal > 0)
|
|
276
276
|
continue;
|
|
277
277
|
|
|
278
|
-
double restitution =
|
|
278
|
+
double restitution = restitution = std::max(a.restitution, b.restitution);
|
|
279
|
+
|
|
279
280
|
double impulse =
|
|
280
|
-
-(1 + restitution) * velocityAlongNormal / totalInverseMass;
|
|
281
|
+
-(1.0 + restitution) * velocityAlongNormal / totalInverseMass;
|
|
281
282
|
|
|
282
283
|
a.vx = avx - impulse * c.nx * inverseMassA;
|
|
283
284
|
a.vy = avy - impulse * c.ny * inverseMassA;
|
package/shared/GameMethods.cpp
CHANGED
|
@@ -85,6 +85,7 @@ void GameMethods::setEntities(
|
|
|
85
85
|
entityInternal.ax = entityInitializer.ax.value_or(0.0);
|
|
86
86
|
entityInternal.ay = entityInitializer.ay.value_or(0.0);
|
|
87
87
|
entityInternal.mass = entityInitializer.mass.value_or(0.0);
|
|
88
|
+
entityInternal.restitution = entityInitializer.restitution.value_or(0.0);
|
|
88
89
|
}
|
|
89
90
|
|
|
90
91
|
__android_log_print(ANDROID_LOG_INFO, "GameMethods",
|
|
@@ -162,6 +163,7 @@ void GameMethods::spawn(
|
|
|
162
163
|
entityInternal.ax = entityInitializer.ax.value_or(0.0);
|
|
163
164
|
entityInternal.ay = entityInitializer.ay.value_or(0.0);
|
|
164
165
|
entityInternal.mass = entityInitializer.mass.value_or(0.0);
|
|
166
|
+
entityInternal.restitution = entityInitializer.restitution.value_or(0.0);
|
|
165
167
|
|
|
166
168
|
__android_log_print(ANDROID_LOG_INFO, "GameMethods",
|
|
167
169
|
"spawn: spawned entity id=%s",
|
|
@@ -229,6 +231,7 @@ void GameMethods::updateEntities(
|
|
|
229
231
|
patch(entityUpdate.ax, entity->ax);
|
|
230
232
|
patch(entityUpdate.ay, entity->ay);
|
|
231
233
|
patch(entityUpdate.mass, entity->mass);
|
|
234
|
+
patch(entityUpdate.restitution, entity->restitution);
|
|
232
235
|
}
|
|
233
236
|
|
|
234
237
|
__android_log_print(ANDROID_LOG_INFO, "GameMethods",
|
package/shared/custom/Entity.hpp
CHANGED
|
@@ -52,6 +52,7 @@ public:
|
|
|
52
52
|
double ax SWIFT_PRIVATE;
|
|
53
53
|
double ay SWIFT_PRIVATE;
|
|
54
54
|
double mass SWIFT_PRIVATE;
|
|
55
|
+
double restitution SWIFT_PRIVATE;
|
|
55
56
|
|
|
56
57
|
public:
|
|
57
58
|
Entity() = default;
|
|
@@ -60,11 +61,13 @@ public:
|
|
|
60
61
|
std::string color, double asset, bool flipH, bool flipV,
|
|
61
62
|
ObjectFit objectFit, bool clip, Repeat repeat,
|
|
62
63
|
double progress, double speed, bool loop, double vx,
|
|
63
|
-
double vy, double ax, double ay, double mass
|
|
64
|
+
double vy, double ax, double ay, double mass,
|
|
65
|
+
double restitution)
|
|
64
66
|
: id(id), px(px), py(py), shape(shape), angle(angle), isSensor(isSensor),
|
|
65
67
|
color(color), asset(asset), flipH(flipH), flipV(flipV),
|
|
66
68
|
objectFit(objectFit), clip(clip), repeat(repeat), progress(progress),
|
|
67
|
-
speed(speed), loop(loop), vx(vx), vy(vy), ax(ax), ay(ay), mass(mass)
|
|
69
|
+
speed(speed), loop(loop), vx(vx), vy(vy), ax(ax), ay(ay), mass(mass),
|
|
70
|
+
restitution(restitution) {}
|
|
68
71
|
|
|
69
72
|
public:
|
|
70
73
|
friend bool operator==(const Entity &lhs, const Entity &rhs) = default;
|
|
@@ -141,7 +144,10 @@ template <> struct JSIConverter<rngine::Entity> final {
|
|
|
141
144
|
obj.getProperty(runtime, PropNameIDCache::get(runtime, "ay"))),
|
|
142
145
|
JSIConverter<double>::fromJSI(
|
|
143
146
|
runtime,
|
|
144
|
-
obj.getProperty(runtime, PropNameIDCache::get(runtime, "mass")))
|
|
147
|
+
obj.getProperty(runtime, PropNameIDCache::get(runtime, "mass"))),
|
|
148
|
+
JSIConverter<double>::fromJSI(
|
|
149
|
+
runtime, obj.getProperty(runtime, PropNameIDCache::get(
|
|
150
|
+
runtime, "restitution"))));
|
|
145
151
|
}
|
|
146
152
|
|
|
147
153
|
static inline jsi::Value toJSI(jsi::Runtime &runtime,
|
|
@@ -192,6 +198,8 @@ template <> struct JSIConverter<rngine::Entity> final {
|
|
|
192
198
|
JSIConverter<double>::toJSI(runtime, arg.ay));
|
|
193
199
|
obj.setProperty(runtime, PropNameIDCache::get(runtime, "mass"),
|
|
194
200
|
JSIConverter<double>::toJSI(runtime, arg.mass));
|
|
201
|
+
obj.setProperty(runtime, PropNameIDCache::get(runtime, "restitution"),
|
|
202
|
+
JSIConverter<double>::toJSI(runtime, arg.restitution));
|
|
195
203
|
return obj;
|
|
196
204
|
}
|
|
197
205
|
|
|
@@ -288,6 +296,10 @@ template <> struct JSIConverter<rngine::Entity> final {
|
|
|
288
296
|
runtime,
|
|
289
297
|
obj.getProperty(runtime, PropNameIDCache::get(runtime, "mass"))))
|
|
290
298
|
return false;
|
|
299
|
+
if (!JSIConverter<double>::canConvert(
|
|
300
|
+
runtime, obj.getProperty(runtime, PropNameIDCache::get(
|
|
301
|
+
runtime, "restitution"))))
|
|
302
|
+
return false;
|
|
291
303
|
return true;
|
|
292
304
|
}
|
|
293
305
|
};
|
package/src/types.ts
CHANGED