rngine 0.3.2 → 0.4.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.
Files changed (72) hide show
  1. package/README.md +10 -7
  2. package/android/build.gradle +6 -4
  3. package/android/kls_database.db +0 -0
  4. package/android/src/main/cpp/GameLoopJNI.cpp +20 -9
  5. package/android/src/main/java/com/margelo/nitro/rngine/Asset.kt +9 -0
  6. package/android/src/main/java/com/margelo/nitro/rngine/GameAssets.kt +47 -0
  7. package/android/src/main/java/com/margelo/nitro/rngine/GameView.kt +46 -8
  8. package/android/src/main/java/com/margelo/nitro/rngine/Rect.kt +7 -5
  9. package/android/src/main/java/com/margelo/nitro/rngine/RectSerializer.kt +8 -6
  10. package/lib/module/GameAssets.nitro.js +5 -0
  11. package/lib/module/GameAssets.nitro.js.map +1 -0
  12. package/lib/module/GameMethods.js +1 -31
  13. package/lib/module/GameMethods.js.map +1 -1
  14. package/lib/module/GameMethods.nitro.js +2 -1
  15. package/lib/module/GameMethods.nitro.js.map +1 -1
  16. package/lib/module/Shared.js +72 -0
  17. package/lib/module/Shared.js.map +1 -0
  18. package/lib/module/index.js +1 -0
  19. package/lib/module/index.js.map +1 -1
  20. package/lib/module/nativeTypes.js +2 -0
  21. package/lib/module/nativeTypes.js.map +1 -0
  22. package/lib/module/types.js +2 -0
  23. package/lib/typescript/src/GameAssets.nitro.d.ts +12 -0
  24. package/lib/typescript/src/GameAssets.nitro.d.ts.map +1 -0
  25. package/lib/typescript/src/GameMethods.d.ts +0 -7
  26. package/lib/typescript/src/GameMethods.d.ts.map +1 -1
  27. package/lib/typescript/src/GameMethods.nitro.d.ts +4 -2
  28. package/lib/typescript/src/GameMethods.nitro.d.ts.map +1 -1
  29. package/lib/typescript/src/Shared.d.ts +8 -0
  30. package/lib/typescript/src/Shared.d.ts.map +1 -0
  31. package/lib/typescript/src/index.d.ts +2 -0
  32. package/lib/typescript/src/index.d.ts.map +1 -1
  33. package/lib/typescript/src/nativeTypes.d.ts +79 -0
  34. package/lib/typescript/src/nativeTypes.d.ts.map +1 -0
  35. package/lib/typescript/src/types.d.ts +11 -47
  36. package/lib/typescript/src/types.d.ts.map +1 -1
  37. package/nitro.json +10 -0
  38. package/nitrogen/generated/android/c++/JHybridGameAssetsSpec.cpp +61 -0
  39. package/nitrogen/generated/android/c++/JHybridGameAssetsSpec.hpp +65 -0
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngine/HybridGameAssetsSpec.kt +62 -0
  41. package/nitrogen/generated/android/rngine+autolinking.cmake +2 -0
  42. package/nitrogen/generated/android/rngineOnLoad.cpp +16 -0
  43. package/nitrogen/generated/ios/Rngine-Swift-Cxx-Bridge.cpp +17 -0
  44. package/nitrogen/generated/ios/Rngine-Swift-Cxx-Bridge.hpp +37 -0
  45. package/nitrogen/generated/ios/Rngine-Swift-Cxx-Umbrella.hpp +8 -0
  46. package/nitrogen/generated/ios/RngineAutolinking.mm +8 -0
  47. package/nitrogen/generated/ios/RngineAutolinking.swift +12 -0
  48. package/nitrogen/generated/ios/c++/HybridGameAssetsSpecSwift.cpp +11 -0
  49. package/nitrogen/generated/ios/c++/HybridGameAssetsSpecSwift.hpp +94 -0
  50. package/nitrogen/generated/ios/swift/HybridGameAssetsSpec.swift +57 -0
  51. package/nitrogen/generated/ios/swift/HybridGameAssetsSpec_cxx.swift +160 -0
  52. package/nitrogen/generated/shared/c++/Collision.hpp +91 -0
  53. package/nitrogen/generated/shared/c++/CollisionPair.hpp +87 -0
  54. package/nitrogen/generated/shared/c++/Entity.hpp +13 -5
  55. package/nitrogen/generated/shared/c++/EntityUpdate.hpp +9 -1
  56. package/nitrogen/generated/shared/c++/HybridGameAssetsSpec.cpp +23 -0
  57. package/nitrogen/generated/shared/c++/HybridGameAssetsSpec.hpp +64 -0
  58. package/nitrogen/generated/shared/c++/Screen.hpp +14 -5
  59. package/nitrogen/generated/shared/c++/System.hpp +20 -9
  60. package/package.json +1 -1
  61. package/shared/ColorUtils.hpp +6 -3
  62. package/shared/GameLoop.cpp +75 -12
  63. package/shared/GameLoop.hpp +2 -0
  64. package/shared/GameMethods.cpp +20 -7
  65. package/shared/Rect.hpp +8 -5
  66. package/src/GameAssets.nitro.ts +14 -0
  67. package/src/GameMethods.nitro.ts +6 -2
  68. package/src/GameMethods.ts +1 -34
  69. package/src/Shared.ts +83 -0
  70. package/src/index.tsx +2 -0
  71. package/src/nativeTypes.ts +83 -0
  72. package/src/types.ts +17 -49
@@ -0,0 +1,79 @@
1
+ export type Screen = {
2
+ /** Width of the screen in game units. */
3
+ width: number;
4
+ /** Height of the screen in game units. */
5
+ height: number;
6
+ /** Background color of the screen as a hex string e.g. `'#1a1a1a'`. */
7
+ color?: string;
8
+ /** Asset to render, use `require` with the file path to get the id. */
9
+ asset?: number;
10
+ /** Animation progress between 0 and 1, automatically advanced each tick for Lottie assets. */
11
+ progress?: number;
12
+ };
13
+ export type Entity = {
14
+ /** Unique identifier. Use `_` as a separator for group queries e.g. `'enemy_1'`. */
15
+ id: string;
16
+ /** X position in game units. */
17
+ px: number;
18
+ /** Y position in game units. */
19
+ py: number;
20
+ /** Width in game units. */
21
+ width: number;
22
+ /** Height in game units. */
23
+ height: number;
24
+ /** Fill color as a hex string e.g. `'#00ff00'`. */
25
+ color?: string;
26
+ /** Asset to render, use `require` with the file path to get the id. */
27
+ asset?: number;
28
+ /** Animation progress between 0 and 1, automatically advanced each tick for Lottie assets. */
29
+ progress?: number;
30
+ /** Velocity on the X axis in game units per second. */
31
+ vx?: number;
32
+ /** Velocity on the Y axis in game units per second. */
33
+ vy?: number;
34
+ };
35
+ export type CollisionPair = {
36
+ /** Entity id or prefix of the first entity to watch. */
37
+ a: string;
38
+ /** Entity id or prefix of the second entity to watch. */
39
+ b: string;
40
+ };
41
+ export type Collision = {
42
+ /** Id of the first entity involved in the collision. */
43
+ a: string;
44
+ /** Id of the second entity involved in the collision. */
45
+ b: string;
46
+ /** Penetration depth of the collision. */
47
+ depth: number;
48
+ };
49
+ export type System = {
50
+ /** Entity ids or prefixes this system subscribes to. */
51
+ entities?: string[];
52
+ /** Collision pairs to watch for every tick. */
53
+ collisions?: CollisionPair[];
54
+ /** Called every tick with the resolved entities and collisions. */
55
+ onTick: (entities: Entity[], collisions: Collision[]) => void;
56
+ };
57
+ export type EntityUpdate = {
58
+ /** Unique identifier or prefix of the entities to update. */
59
+ id: string;
60
+ /** X position in game units. */
61
+ px?: number;
62
+ /** Y position in game units. */
63
+ py?: number;
64
+ /** Width in game units. */
65
+ width?: number;
66
+ /** Height in game units. */
67
+ height?: number;
68
+ /** Fill color as a hex string e.g. `'#00ff00'`. */
69
+ color?: string;
70
+ /** Asset to render, use `require` with the file path to get the id. */
71
+ asset?: number;
72
+ /** Animation progress between 0 and 1, automatically advanced each tick for Lottie assets. */
73
+ progress?: number;
74
+ /** Velocity on the X axis in game units per second. */
75
+ vx?: number;
76
+ /** Velocity on the Y axis in game units per second. */
77
+ vy?: number;
78
+ };
79
+ //# sourceMappingURL=nativeTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeTypes.d.ts","sourceRoot":"","sources":["../../../src/nativeTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACnB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,wDAAwD;IACxD,CAAC,EAAE,MAAM,CAAC;IACV,yDAAyD;IACzD,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,wDAAwD;IACxD,CAAC,EAAE,MAAM,CAAC;IACV,yDAAyD;IACzD,CAAC,EAAE,MAAM,CAAC;IACV,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,mEAAmE;IACnE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC"}
@@ -1,52 +1,16 @@
1
- export type Screen = {
2
- /** Width of the screen in game units. */
3
- width: number;
4
- /** Height of the screen in game units. */
5
- height: number;
6
- /** Background color of the screen as a hex string e.g. `'#1a1a1a'`. */
7
- color: string;
1
+ import type { Screen as NativeScreen, Entity as NativeEntity, EntityUpdate as NativeEntityUpdate, System } from './nativeTypes';
2
+ export type Asset = number | object;
3
+ export type Screen = Omit<NativeScreen, 'asset'> & {
4
+ /** Asset to render, use `require` with the file path to get the id. */
5
+ asset?: Asset;
8
6
  };
9
- export type Entity = {
10
- /** Unique identifier. Use `_` as a separator for group queries e.g. `'enemy_1'`. */
11
- id: string;
12
- /** X position in game units. */
13
- px: number;
14
- /** Y position in game units. */
15
- py: number;
16
- /** Width in game units. */
17
- width: number;
18
- /** Height in game units. */
19
- height: number;
20
- /** Fill color as a hex string e.g. `'#00ff00'`. */
21
- color: string;
22
- /** Velocity on the X axis in game units per second. */
23
- vx?: number;
24
- /** Velocity on the Y axis in game units per second. */
25
- vy?: number;
7
+ export type Entity = Omit<NativeEntity, 'asset'> & {
8
+ /** Asset to render, use `require` with the file path to get the id. */
9
+ asset?: Asset;
26
10
  };
27
- export type System = {
28
- /** Entity ids or prefixes this system subscribes to. */
29
- ids: string[];
30
- /** Called every tick with the resolved entities. */
31
- onTick: (entities: Entity[]) => void;
32
- };
33
- export type EntityUpdate = {
34
- /** Unique identifier or prefix of the entities to update. */
35
- id: string;
36
- /** X position in game units. */
37
- px?: number;
38
- /** Y position in game units. */
39
- py?: number;
40
- /** Width in game units. */
41
- width?: number;
42
- /** Height in game units. */
43
- height?: number;
44
- /** Fill color as a hex string e.g. `'#00ff00'`. */
45
- color?: string;
46
- /** Velocity on the X axis in game units per second. */
47
- vx?: number;
48
- /** Velocity on the Y axis in game units per second. */
49
- vy?: number;
11
+ export type EntityUpdate = Omit<NativeEntityUpdate, 'asset'> & {
12
+ /** Asset to render, use `require` with the file path to get the id. */
13
+ asset?: Asset;
50
14
  };
51
15
  export type Config = {
52
16
  /** Number of game logic updates per second. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACnB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,oFAAoF;IACpF,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,wDAAwD;IACxD,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,oDAAoD;IACpD,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,EACtB,YAAY,IAAI,kBAAkB,EAClC,MAAM,EACP,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG;IACjD,uEAAuE;IACvE,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AACF,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG;IACjD,uEAAuE;IACvE,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,GAAG;IAC7D,uEAAuE;IACvE,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC"}
package/nitro.json CHANGED
@@ -8,6 +8,16 @@
8
8
  "androidCxxLibName": "rngine"
9
9
  },
10
10
  "autolinking": {
11
+ "GameAssets": {
12
+ "ios": {
13
+ "language": "swift",
14
+ "implementationClassName": "GameAssets"
15
+ },
16
+ "android": {
17
+ "language": "kotlin",
18
+ "implementationClassName": "GameAssets"
19
+ }
20
+ },
11
21
  "GameEngine": {
12
22
  "ios": {
13
23
  "language": "swift",
@@ -0,0 +1,61 @@
1
+ ///
2
+ /// JHybridGameAssetsSpec.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "JHybridGameAssetsSpec.hpp"
9
+
10
+
11
+
12
+ #include <string>
13
+
14
+ namespace margelo::nitro::rngine {
15
+
16
+ std::shared_ptr<JHybridGameAssetsSpec> JHybridGameAssetsSpec::JavaPart::getJHybridGameAssetsSpec() {
17
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
18
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridGameAssetsSpec>(hybridObject);
19
+ if (castHybridObject == nullptr) [[unlikely]] {
20
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridGameAssetsSpec!");
21
+ }
22
+ return castHybridObject;
23
+ }
24
+
25
+ jni::local_ref<JHybridGameAssetsSpec::CxxPart::jhybriddata> JHybridGameAssetsSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
26
+ return makeCxxInstance(jThis);
27
+ }
28
+
29
+ std::shared_ptr<JHybridObject> JHybridGameAssetsSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
30
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridGameAssetsSpec::JavaPart>(javaPart);
31
+ if (castJavaPart == nullptr) [[unlikely]] {
32
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridGameAssetsSpec::JavaPart!");
33
+ }
34
+ return std::make_shared<JHybridGameAssetsSpec>(castJavaPart);
35
+ }
36
+
37
+ void JHybridGameAssetsSpec::CxxPart::registerNatives() {
38
+ registerHybrid({
39
+ makeNativeMethod("initHybrid", JHybridGameAssetsSpec::CxxPart::initHybrid),
40
+ });
41
+ }
42
+
43
+ // Properties
44
+
45
+
46
+ // Methods
47
+ bool JHybridGameAssetsSpec::isAssetRegistered(double id) {
48
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(double /* id */)>("isAssetRegistered");
49
+ auto __result = method(_javaPart, id);
50
+ return static_cast<bool>(__result);
51
+ }
52
+ void JHybridGameAssetsSpec::registerSvg(double id, const std::string& uri) {
53
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(double /* id */, jni::alias_ref<jni::JString> /* uri */)>("registerSvg");
54
+ method(_javaPart, id, jni::make_jstring(uri));
55
+ }
56
+ void JHybridGameAssetsSpec::registerLottie(double id, const std::string& json) {
57
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(double /* id */, jni::alias_ref<jni::JString> /* json */)>("registerLottie");
58
+ method(_javaPart, id, jni::make_jstring(json));
59
+ }
60
+
61
+ } // namespace margelo::nitro::rngine
@@ -0,0 +1,65 @@
1
+ ///
2
+ /// HybridGameAssetsSpec.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <NitroModules/JHybridObject.hpp>
11
+ #include <fbjni/fbjni.h>
12
+ #include "HybridGameAssetsSpec.hpp"
13
+
14
+
15
+
16
+
17
+ namespace margelo::nitro::rngine {
18
+
19
+ using namespace facebook;
20
+
21
+ class JHybridGameAssetsSpec: public virtual HybridGameAssetsSpec, public virtual JHybridObject {
22
+ public:
23
+ struct JavaPart: public jni::JavaClass<JavaPart, JHybridObject::JavaPart> {
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rngine/HybridGameAssetsSpec;";
25
+ std::shared_ptr<JHybridGameAssetsSpec> getJHybridGameAssetsSpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rngine/HybridGameAssetsSpec$CxxPart;";
29
+ static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
30
+ static void registerNatives();
31
+ using HybridBase::HybridBase;
32
+ protected:
33
+ std::shared_ptr<JHybridObject> createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) override;
34
+ };
35
+
36
+ public:
37
+ explicit JHybridGameAssetsSpec(const jni::local_ref<JHybridGameAssetsSpec::JavaPart>& javaPart):
38
+ HybridObject(HybridGameAssetsSpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
41
+ ~JHybridGameAssetsSpec() override {
42
+ // Hermes GC can destroy JS objects on a non-JNI Thread.
43
+ jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
44
+ }
45
+
46
+ public:
47
+ inline const jni::global_ref<JHybridGameAssetsSpec::JavaPart>& getJavaPart() const noexcept {
48
+ return _javaPart;
49
+ }
50
+
51
+ public:
52
+ // Properties
53
+
54
+
55
+ public:
56
+ // Methods
57
+ bool isAssetRegistered(double id) override;
58
+ void registerSvg(double id, const std::string& uri) override;
59
+ void registerLottie(double id, const std::string& json) override;
60
+
61
+ private:
62
+ jni::global_ref<JHybridGameAssetsSpec::JavaPart> _javaPart;
63
+ };
64
+
65
+ } // namespace margelo::nitro::rngine
@@ -0,0 +1,62 @@
1
+ ///
2
+ /// HybridGameAssetsSpec.kt
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ package com.margelo.nitro.rngine
9
+
10
+ import androidx.annotation.Keep
11
+ import com.facebook.jni.HybridData
12
+ import com.facebook.proguard.annotations.DoNotStrip
13
+ import com.margelo.nitro.core.HybridObject
14
+
15
+ /**
16
+ * A Kotlin class representing the GameAssets HybridObject.
17
+ * Implement this abstract class to create Kotlin-based instances of GameAssets.
18
+ */
19
+ @DoNotStrip
20
+ @Keep
21
+ @Suppress(
22
+ "KotlinJniMissingFunction", "unused",
23
+ "RedundantSuppression", "RedundantUnitReturnType", "SimpleRedundantLet",
24
+ "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName"
25
+ )
26
+ abstract class HybridGameAssetsSpec: HybridObject() {
27
+ // Properties
28
+
29
+
30
+ // Methods
31
+ @DoNotStrip
32
+ @Keep
33
+ abstract fun isAssetRegistered(id: Double): Boolean
34
+
35
+ @DoNotStrip
36
+ @Keep
37
+ abstract fun registerSvg(id: Double, uri: String): Unit
38
+
39
+ @DoNotStrip
40
+ @Keep
41
+ abstract fun registerLottie(id: Double, json: String): Unit
42
+
43
+ // Default implementation of `HybridObject.toString()`
44
+ override fun toString(): String {
45
+ return "[HybridObject GameAssets]"
46
+ }
47
+
48
+ // C++ backing class
49
+ @DoNotStrip
50
+ @Keep
51
+ protected open class CxxPart(javaPart: HybridGameAssetsSpec): HybridObject.CxxPart(javaPart) {
52
+ // C++ JHybridGameAssetsSpec::CxxPart::initHybrid(...)
53
+ external override fun initHybrid(): HybridData
54
+ }
55
+ override fun createCxxPart(): CxxPart {
56
+ return CxxPart(this)
57
+ }
58
+
59
+ companion object {
60
+ protected const val TAG = "HybridGameAssetsSpec"
61
+ }
62
+ }
@@ -33,10 +33,12 @@ target_sources(
33
33
  # Autolinking Setup
34
34
  ../nitrogen/generated/android/rngineOnLoad.cpp
35
35
  # Shared Nitrogen C++ sources
36
+ ../nitrogen/generated/shared/c++/HybridGameAssetsSpec.cpp
36
37
  ../nitrogen/generated/shared/c++/HybridGameEngineSpec.cpp
37
38
  ../nitrogen/generated/shared/c++/views/HybridGameEngineComponent.cpp
38
39
  ../nitrogen/generated/shared/c++/HybridGameMethodsSpec.cpp
39
40
  # Android-specific Nitrogen C++ sources
41
+ ../nitrogen/generated/android/c++/JHybridGameAssetsSpec.cpp
40
42
  ../nitrogen/generated/android/c++/JHybridGameEngineSpec.cpp
41
43
  ../nitrogen/generated/android/c++/views/JHybridGameEngineStateUpdater.cpp
42
44
  )
@@ -15,6 +15,7 @@
15
15
  #include <fbjni/fbjni.h>
16
16
  #include <NitroModules/HybridObjectRegistry.hpp>
17
17
 
18
+ #include "JHybridGameAssetsSpec.hpp"
18
19
  #include "JHybridGameEngineSpec.hpp"
19
20
  #include "views/JHybridGameEngineStateUpdater.hpp"
20
21
  #include <NitroModules/DefaultConstructableObject.hpp>
@@ -28,6 +29,14 @@ int initialize(JavaVM* vm) {
28
29
  });
29
30
  }
30
31
 
32
+ struct JHybridGameAssetsSpecImpl: public jni::JavaClass<JHybridGameAssetsSpecImpl, JHybridGameAssetsSpec::JavaPart> {
33
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rngine/GameAssets;";
34
+ static std::shared_ptr<JHybridGameAssetsSpec> create() {
35
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridGameAssetsSpecImpl::javaobject()>();
36
+ jni::local_ref<JHybridGameAssetsSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
37
+ return javaPart->getJHybridGameAssetsSpec();
38
+ }
39
+ };
31
40
  struct JHybridGameEngineSpecImpl: public jni::JavaClass<JHybridGameEngineSpecImpl, JHybridGameEngineSpec::JavaPart> {
32
41
  static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/rngine/GameEngine;";
33
42
  static std::shared_ptr<JHybridGameEngineSpec> create() {
@@ -42,10 +51,17 @@ void registerAllNatives() {
42
51
  using namespace margelo::nitro::rngine;
43
52
 
44
53
  // Register native JNI methods
54
+ margelo::nitro::rngine::JHybridGameAssetsSpec::CxxPart::registerNatives();
45
55
  margelo::nitro::rngine::JHybridGameEngineSpec::CxxPart::registerNatives();
46
56
  margelo::nitro::rngine::views::JHybridGameEngineStateUpdater::registerNatives();
47
57
 
48
58
  // Register Nitro Hybrid Objects
59
+ HybridObjectRegistry::registerHybridObjectConstructor(
60
+ "GameAssets",
61
+ []() -> std::shared_ptr<HybridObject> {
62
+ return JHybridGameAssetsSpecImpl::create();
63
+ }
64
+ );
49
65
  HybridObjectRegistry::registerHybridObjectConstructor(
50
66
  "GameEngine",
51
67
  []() -> std::shared_ptr<HybridObject> {
@@ -8,12 +8,29 @@
8
8
  #include "Rngine-Swift-Cxx-Bridge.hpp"
9
9
 
10
10
  // Include C++ implementation defined types
11
+ #include "HybridGameAssetsSpecSwift.hpp"
11
12
  #include "HybridGameEngineSpecSwift.hpp"
12
13
  #include "Rngine-Swift-Cxx-Umbrella.hpp"
13
14
  #include <NitroModules/NitroDefines.hpp>
14
15
 
15
16
  namespace margelo::nitro::rngine::bridge::swift {
16
17
 
18
+ // pragma MARK: std::shared_ptr<HybridGameAssetsSpec>
19
+ std::shared_ptr<HybridGameAssetsSpec> create_std__shared_ptr_HybridGameAssetsSpec_(void* NON_NULL swiftUnsafePointer) noexcept {
20
+ Rngine::HybridGameAssetsSpec_cxx swiftPart = Rngine::HybridGameAssetsSpec_cxx::fromUnsafe(swiftUnsafePointer);
21
+ return std::make_shared<margelo::nitro::rngine::HybridGameAssetsSpecSwift>(swiftPart);
22
+ }
23
+ void* NON_NULL get_std__shared_ptr_HybridGameAssetsSpec_(std__shared_ptr_HybridGameAssetsSpec_ cppType) {
24
+ std::shared_ptr<margelo::nitro::rngine::HybridGameAssetsSpecSwift> swiftWrapper = std::dynamic_pointer_cast<margelo::nitro::rngine::HybridGameAssetsSpecSwift>(cppType);
25
+ #ifdef NITRO_DEBUG
26
+ if (swiftWrapper == nullptr) [[unlikely]] {
27
+ throw std::runtime_error("Class \"HybridGameAssetsSpec\" is not implemented in Swift!");
28
+ }
29
+ #endif
30
+ Rngine::HybridGameAssetsSpec_cxx& swiftPart = swiftWrapper->getSwiftPart();
31
+ return swiftPart.toUnsafe();
32
+ }
33
+
17
34
  // pragma MARK: std::shared_ptr<HybridGameEngineSpec>
18
35
  std::shared_ptr<HybridGameEngineSpec> create_std__shared_ptr_HybridGameEngineSpec_(void* NON_NULL swiftUnsafePointer) noexcept {
19
36
  Rngine::HybridGameEngineSpec_cxx swiftPart = Rngine::HybridGameEngineSpec_cxx::fromUnsafe(swiftUnsafePointer);
@@ -8,15 +8,22 @@
8
8
  #pragma once
9
9
 
10
10
  // Forward declarations of C++ defined types
11
+ // Forward declaration of `HybridGameAssetsSpec` to properly resolve imports.
12
+ namespace margelo::nitro::rngine { class HybridGameAssetsSpec; }
11
13
  // Forward declaration of `HybridGameEngineSpec` to properly resolve imports.
12
14
  namespace margelo::nitro::rngine { class HybridGameEngineSpec; }
13
15
 
14
16
  // Forward declarations of Swift defined types
17
+ // Forward declaration of `HybridGameAssetsSpec_cxx` to properly resolve imports.
18
+ namespace Rngine { class HybridGameAssetsSpec_cxx; }
15
19
  // Forward declaration of `HybridGameEngineSpec_cxx` to properly resolve imports.
16
20
  namespace Rngine { class HybridGameEngineSpec_cxx; }
17
21
 
18
22
  // Include C++ defined types
23
+ #include "HybridGameAssetsSpec.hpp"
19
24
  #include "HybridGameEngineSpec.hpp"
25
+ #include <NitroModules/Result.hpp>
26
+ #include <exception>
20
27
  #include <memory>
21
28
 
22
29
  /**
@@ -25,6 +32,36 @@ namespace Rngine { class HybridGameEngineSpec_cxx; }
25
32
  */
26
33
  namespace margelo::nitro::rngine::bridge::swift {
27
34
 
35
+ // pragma MARK: std::shared_ptr<HybridGameAssetsSpec>
36
+ /**
37
+ * Specialized version of `std::shared_ptr<HybridGameAssetsSpec>`.
38
+ */
39
+ using std__shared_ptr_HybridGameAssetsSpec_ = std::shared_ptr<HybridGameAssetsSpec>;
40
+ std::shared_ptr<HybridGameAssetsSpec> create_std__shared_ptr_HybridGameAssetsSpec_(void* NON_NULL swiftUnsafePointer) noexcept;
41
+ void* NON_NULL get_std__shared_ptr_HybridGameAssetsSpec_(std__shared_ptr_HybridGameAssetsSpec_ cppType);
42
+
43
+ // pragma MARK: std::weak_ptr<HybridGameAssetsSpec>
44
+ using std__weak_ptr_HybridGameAssetsSpec_ = std::weak_ptr<HybridGameAssetsSpec>;
45
+ inline std__weak_ptr_HybridGameAssetsSpec_ weakify_std__shared_ptr_HybridGameAssetsSpec_(const std::shared_ptr<HybridGameAssetsSpec>& strong) noexcept { return strong; }
46
+
47
+ // pragma MARK: Result<bool>
48
+ using Result_bool_ = Result<bool>;
49
+ inline Result_bool_ create_Result_bool_(bool value) noexcept {
50
+ return Result<bool>::withValue(std::move(value));
51
+ }
52
+ inline Result_bool_ create_Result_bool_(const std::exception_ptr& error) noexcept {
53
+ return Result<bool>::withError(error);
54
+ }
55
+
56
+ // pragma MARK: Result<void>
57
+ using Result_void_ = Result<void>;
58
+ inline Result_void_ create_Result_void_() noexcept {
59
+ return Result<void>::withValue();
60
+ }
61
+ inline Result_void_ create_Result_void_(const std::exception_ptr& error) noexcept {
62
+ return Result<void>::withError(error);
63
+ }
64
+
28
65
  // pragma MARK: std::shared_ptr<HybridGameEngineSpec>
29
66
  /**
30
67
  * Specialized version of `std::shared_ptr<HybridGameEngineSpec>`.
@@ -8,12 +8,18 @@
8
8
  #pragma once
9
9
 
10
10
  // Forward declarations of C++ defined types
11
+ // Forward declaration of `HybridGameAssetsSpec` to properly resolve imports.
12
+ namespace margelo::nitro::rngine { class HybridGameAssetsSpec; }
11
13
  // Forward declaration of `HybridGameEngineSpec` to properly resolve imports.
12
14
  namespace margelo::nitro::rngine { class HybridGameEngineSpec; }
13
15
 
14
16
  // Include C++ defined types
17
+ #include "HybridGameAssetsSpec.hpp"
15
18
  #include "HybridGameEngineSpec.hpp"
19
+ #include <NitroModules/Result.hpp>
20
+ #include <exception>
16
21
  #include <memory>
22
+ #include <string>
17
23
 
18
24
  // C++ helpers for Swift
19
25
  #include "Rngine-Swift-Cxx-Bridge.hpp"
@@ -25,6 +31,8 @@ namespace margelo::nitro::rngine { class HybridGameEngineSpec; }
25
31
  #include <NitroModules/DateToChronoDate.hpp>
26
32
 
27
33
  // Forward declarations of Swift defined types
34
+ // Forward declaration of `HybridGameAssetsSpec_cxx` to properly resolve imports.
35
+ namespace Rngine { class HybridGameAssetsSpec_cxx; }
28
36
  // Forward declaration of `HybridGameEngineSpec_cxx` to properly resolve imports.
29
37
  namespace Rngine { class HybridGameEngineSpec_cxx; }
30
38
 
@@ -10,6 +10,7 @@
10
10
  #import "Rngine-Swift-Cxx-Umbrella.hpp"
11
11
  #import <type_traits>
12
12
 
13
+ #include "HybridGameAssetsSpecSwift.hpp"
13
14
  #include "HybridGameEngineSpecSwift.hpp"
14
15
  #include "GameMethods.hpp"
15
16
 
@@ -22,6 +23,13 @@
22
23
  using namespace margelo::nitro;
23
24
  using namespace margelo::nitro::rngine;
24
25
 
26
+ HybridObjectRegistry::registerHybridObjectConstructor(
27
+ "GameAssets",
28
+ []() -> std::shared_ptr<HybridObject> {
29
+ std::shared_ptr<HybridGameAssetsSpec> hybridObject = Rngine::RngineAutolinking::createGameAssets();
30
+ return hybridObject;
31
+ }
32
+ );
25
33
  HybridObjectRegistry::registerHybridObjectConstructor(
26
34
  "GameEngine",
27
35
  []() -> std::shared_ptr<HybridObject> {
@@ -12,6 +12,18 @@ import NitroModules
12
12
  public final class RngineAutolinking {
13
13
  public typealias bridge = margelo.nitro.rngine.bridge.swift
14
14
 
15
+ public static func createGameAssets() -> bridge.std__shared_ptr_HybridGameAssetsSpec_ {
16
+ let hybridObject = GameAssets()
17
+ return { () -> bridge.std__shared_ptr_HybridGameAssetsSpec_ in
18
+ let __cxxWrapped = hybridObject.getCxxWrapper()
19
+ return __cxxWrapped.getCxxPart()
20
+ }()
21
+ }
22
+
23
+ public static func isGameAssetsRecyclable() -> Bool {
24
+ return GameAssets.self is any RecyclableView.Type
25
+ }
26
+
15
27
  public static func createGameEngine() -> bridge.std__shared_ptr_HybridGameEngineSpec_ {
16
28
  let hybridObject = GameEngine()
17
29
  return { () -> bridge.std__shared_ptr_HybridGameEngineSpec_ in
@@ -0,0 +1,11 @@
1
+ ///
2
+ /// HybridGameAssetsSpecSwift.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "HybridGameAssetsSpecSwift.hpp"
9
+
10
+ namespace margelo::nitro::rngine {
11
+ } // namespace margelo::nitro::rngine