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.
@@ -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":"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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rngine",
3
- "version": "0.12.0",
3
+ "version": "0.12.1",
4
4
  "description": "React Native 2D game engine powered by Nitro Modules",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -275,9 +275,10 @@ void GameLoop::resolveCollisions() {
275
275
  if (velocityAlongNormal > 0)
276
276
  continue;
277
277
 
278
- double restitution = 0.0;
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;
@@ -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",
@@ -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
@@ -66,6 +66,8 @@ interface Kinematic {
66
66
  ay?: number;
67
67
  /** Mass in arbitrary units. */
68
68
  mass?: number;
69
+ /** Coefficient of restitution (bounciness) from 0.0 to 1.0. Defaults to 0.0. */
70
+ restitution?: number;
69
71
  }
70
72
 
71
73
  export interface WorldInitializer {