@woosh/meep-engine 2.138.0 → 2.138.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.
Files changed (199) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/package.json +1 -1
  4. package/src/core/assert.d.ts +6 -0
  5. package/src/core/assert.d.ts.map +1 -1
  6. package/src/core/assert.js +16 -3
  7. package/src/core/binary/half_to_float_uint16.js +1 -1
  8. package/src/core/binary/to_half_float_uint16.d.ts.map +1 -1
  9. package/src/core/binary/to_half_float_uint16.js +9 -4
  10. package/src/core/collection/table/RowFirstTableSpec.js +1 -1
  11. package/src/core/events/signal/Signal.d.ts.map +1 -1
  12. package/src/core/events/signal/Signal.js +53 -0
  13. package/src/core/math/spline/spline3_hermite_intersection_spline3_hermite_2d.d.ts +3 -3
  14. package/src/core/math/spline/spline3_hermite_intersection_spline3_hermite_2d.js +3 -3
  15. package/src/engine/Clock.d.ts +2 -2
  16. package/src/engine/Clock.js +2 -2
  17. package/src/engine/graphics/ecs/highlight/system/RenderableHighlightSystem.d.ts.map +1 -1
  18. package/src/engine/graphics/ecs/highlight/system/RenderableHighlightSystem.js +17 -29
  19. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts.map +1 -1
  20. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js +18 -31
  21. package/src/engine/network/NetworkSession.d.ts +386 -0
  22. package/src/engine/network/NetworkSession.d.ts.map +1 -0
  23. package/src/engine/network/NetworkSession.js +1841 -0
  24. package/src/engine/network/PriorityFetch.d.ts.map +1 -1
  25. package/src/engine/network/PriorityFetch.js +3 -2
  26. package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts +14 -0
  27. package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts.map +1 -0
  28. package/src/engine/network/adapters/QuaternionInterpolationAdapter.js +44 -0
  29. package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts +18 -0
  30. package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts.map +1 -0
  31. package/src/engine/network/adapters/TransformInterpolationAdapter.js +79 -0
  32. package/src/engine/network/adapters/TransformReplicationAdapter.d.ts +37 -0
  33. package/src/engine/network/adapters/TransformReplicationAdapter.d.ts.map +1 -0
  34. package/src/engine/network/adapters/TransformReplicationAdapter.js +87 -0
  35. package/src/engine/network/adapters/Vector3InterpolationAdapter.d.ts +18 -0
  36. package/src/engine/network/adapters/Vector3InterpolationAdapter.d.ts.map +1 -0
  37. package/src/engine/network/adapters/Vector3InterpolationAdapter.js +46 -0
  38. package/src/engine/network/convertPathToURL.js +107 -107
  39. package/src/engine/network/core/quantize/quantize_float.d.ts +54 -0
  40. package/src/engine/network/core/quantize/quantize_float.d.ts.map +1 -0
  41. package/src/engine/network/core/quantize/quantize_float.js +66 -0
  42. package/src/engine/network/core/quantize/quantize_position.d.ts +44 -0
  43. package/src/engine/network/core/quantize/quantize_position.d.ts.map +1 -0
  44. package/src/engine/network/core/quantize/quantize_position.js +54 -0
  45. package/src/engine/network/core/sequence/ack_bitfield.d.ts +47 -0
  46. package/src/engine/network/core/sequence/ack_bitfield.d.ts.map +1 -0
  47. package/src/engine/network/core/sequence/ack_bitfield.js +77 -0
  48. package/src/engine/network/core/sequence/seq16.d.ts +53 -0
  49. package/src/engine/network/core/sequence/seq16.d.ts.map +1 -0
  50. package/src/engine/network/core/sequence/seq16.js +69 -0
  51. package/src/engine/network/core/sequence/seq32.d.ts +55 -0
  52. package/src/engine/network/core/sequence/seq32.d.ts.map +1 -0
  53. package/src/engine/network/core/sequence/seq32.js +73 -0
  54. package/src/engine/network/diagnostics/BandwidthMeter.d.ts +76 -0
  55. package/src/engine/network/diagnostics/BandwidthMeter.d.ts.map +1 -0
  56. package/src/engine/network/diagnostics/BandwidthMeter.js +155 -0
  57. package/src/engine/network/diagnostics/ReplayLog.d.ts +74 -0
  58. package/src/engine/network/diagnostics/ReplayLog.d.ts.map +1 -0
  59. package/src/engine/network/diagnostics/ReplayLog.js +137 -0
  60. package/src/engine/network/diagnostics/SyncTest.d.ts +74 -0
  61. package/src/engine/network/diagnostics/SyncTest.d.ts.map +1 -0
  62. package/src/engine/network/diagnostics/SyncTest.js +151 -0
  63. package/src/engine/network/ecs/NetworkSystem.d.ts +57 -0
  64. package/src/engine/network/ecs/NetworkSystem.d.ts.map +1 -0
  65. package/src/engine/network/ecs/NetworkSystem.js +84 -0
  66. package/src/engine/network/ecs/components/NetworkIdentity.d.ts +58 -0
  67. package/src/engine/network/ecs/components/NetworkIdentity.d.ts.map +1 -0
  68. package/src/engine/network/ecs/components/NetworkIdentity.js +73 -0
  69. package/src/engine/network/ecs/serialization/NetworkIdentitySerializationAdapter.d.ts +40 -0
  70. package/src/engine/network/ecs/serialization/NetworkIdentitySerializationAdapter.d.ts.map +1 -0
  71. package/src/engine/network/ecs/serialization/NetworkIdentitySerializationAdapter.js +64 -0
  72. package/src/engine/network/orchestrator/NetworkPeer.d.ts +389 -0
  73. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -0
  74. package/src/engine/network/orchestrator/NetworkPeer.js +1107 -0
  75. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +260 -0
  76. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -0
  77. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +425 -0
  78. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +217 -0
  79. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -0
  80. package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +562 -0
  81. package/src/engine/network/replication/Replicator.d.ts +134 -0
  82. package/src/engine/network/replication/Replicator.d.ts.map +1 -0
  83. package/src/engine/network/replication/Replicator.js +334 -0
  84. package/src/engine/network/replication/ScopeFilter.d.ts +64 -0
  85. package/src/engine/network/replication/ScopeFilter.d.ts.map +1 -0
  86. package/src/engine/network/replication/ScopeFilter.js +71 -0
  87. package/src/engine/network/sim/ActionLog.d.ts +94 -0
  88. package/src/engine/network/sim/ActionLog.d.ts.map +1 -0
  89. package/src/engine/network/sim/ActionLog.js +189 -0
  90. package/src/engine/network/sim/BinaryInterpolationAdapter.d.ts +58 -0
  91. package/src/engine/network/sim/BinaryInterpolationAdapter.d.ts.map +1 -0
  92. package/src/engine/network/sim/BinaryInterpolationAdapter.js +56 -0
  93. package/src/engine/network/sim/InterpolationLog.d.ts +165 -0
  94. package/src/engine/network/sim/InterpolationLog.d.ts.map +1 -0
  95. package/src/engine/network/sim/InterpolationLog.js +583 -0
  96. package/src/engine/network/sim/ReplicatedComponentRegistry.d.ts +59 -0
  97. package/src/engine/network/sim/ReplicatedComponentRegistry.d.ts.map +1 -0
  98. package/src/engine/network/sim/ReplicatedComponentRegistry.js +140 -0
  99. package/src/engine/network/sim/RewindEngine.d.ts +66 -0
  100. package/src/engine/network/sim/RewindEngine.d.ts.map +1 -0
  101. package/src/engine/network/sim/RewindEngine.js +182 -0
  102. package/src/engine/network/sim/SimAction.d.ts +133 -0
  103. package/src/engine/network/sim/SimAction.d.ts.map +1 -0
  104. package/src/engine/network/sim/SimAction.js +273 -0
  105. package/src/engine/network/sim/SimActionExecutor.d.ts +109 -0
  106. package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -0
  107. package/src/engine/network/sim/SimActionExecutor.js +238 -0
  108. package/src/engine/network/sim/SimActionRegistry.d.ts +60 -0
  109. package/src/engine/network/sim/SimActionRegistry.d.ts.map +1 -0
  110. package/src/engine/network/sim/SimActionRegistry.js +128 -0
  111. package/src/engine/network/sim/SmoothingState.d.ts +87 -0
  112. package/src/engine/network/sim/SmoothingState.d.ts.map +1 -0
  113. package/src/engine/network/sim/SmoothingState.js +223 -0
  114. package/src/engine/network/sim/Snapshotter.d.ts +98 -0
  115. package/src/engine/network/sim/Snapshotter.d.ts.map +1 -0
  116. package/src/engine/network/sim/Snapshotter.js +206 -0
  117. package/src/engine/network/sim/SpeculationLog.d.ts +53 -0
  118. package/src/engine/network/sim/SpeculationLog.d.ts.map +1 -0
  119. package/src/engine/network/sim/SpeculationLog.js +84 -0
  120. package/src/engine/network/state/Baseline.d.ts +48 -0
  121. package/src/engine/network/state/Baseline.d.ts.map +1 -0
  122. package/src/engine/network/state/Baseline.js +83 -0
  123. package/src/engine/network/state/ChangedEntitySet.d.ts +94 -0
  124. package/src/engine/network/state/ChangedEntitySet.d.ts.map +1 -0
  125. package/src/engine/network/state/ChangedEntitySet.js +256 -0
  126. package/src/engine/network/state/InputRing.d.ts +90 -0
  127. package/src/engine/network/state/InputRing.d.ts.map +1 -0
  128. package/src/engine/network/state/InputRing.js +173 -0
  129. package/src/engine/network/state/MutationLedger.d.ts +82 -0
  130. package/src/engine/network/state/MutationLedger.d.ts.map +1 -0
  131. package/src/engine/network/state/MutationLedger.js +182 -0
  132. package/src/engine/network/state/PriorityAccumulator.d.ts +104 -0
  133. package/src/engine/network/state/PriorityAccumulator.d.ts.map +1 -0
  134. package/src/engine/network/state/PriorityAccumulator.js +180 -0
  135. package/src/engine/network/state/ReplicationSlotTable.d.ts +78 -0
  136. package/src/engine/network/state/ReplicationSlotTable.d.ts.map +1 -0
  137. package/src/engine/network/state/ReplicationSlotTable.js +211 -0
  138. package/src/engine/network/time/AdaptiveRenderDelay.d.ts +128 -0
  139. package/src/engine/network/time/AdaptiveRenderDelay.d.ts.map +1 -0
  140. package/src/engine/network/time/AdaptiveRenderDelay.js +258 -0
  141. package/src/engine/network/time/JitterBuffer.d.ts +58 -0
  142. package/src/engine/network/time/JitterBuffer.d.ts.map +1 -0
  143. package/src/engine/network/time/JitterBuffer.js +116 -0
  144. package/src/engine/network/time/TimeDilation.d.ts +49 -0
  145. package/src/engine/network/time/TimeDilation.d.ts.map +1 -0
  146. package/src/engine/network/time/TimeDilation.js +62 -0
  147. package/src/engine/network/time/TimeSync.d.ts +68 -0
  148. package/src/engine/network/time/TimeSync.d.ts.map +1 -0
  149. package/src/engine/network/time/TimeSync.js +153 -0
  150. package/src/engine/network/transport/Channel.d.ts +74 -0
  151. package/src/engine/network/transport/Channel.d.ts.map +1 -0
  152. package/src/engine/network/transport/Channel.js +272 -0
  153. package/src/engine/network/transport/LoopbackTransport.d.ts +59 -0
  154. package/src/engine/network/transport/LoopbackTransport.d.ts.map +1 -0
  155. package/src/engine/network/transport/LoopbackTransport.js +194 -0
  156. package/src/engine/network/transport/ReliableCommandPipeline.d.ts +139 -0
  157. package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +1 -0
  158. package/src/engine/network/transport/ReliableCommandPipeline.js +291 -0
  159. package/src/engine/network/transport/Transport.d.ts +109 -0
  160. package/src/engine/network/transport/Transport.d.ts.map +1 -0
  161. package/src/engine/network/transport/Transport.js +119 -0
  162. package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts +60 -0
  163. package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -0
  164. package/src/engine/network/transport/adapters/NodeUDPTransport.js +206 -0
  165. package/src/engine/network/transport/adapters/SimulatedTransport.d.ts +110 -0
  166. package/src/engine/network/transport/adapters/SimulatedTransport.d.ts.map +1 -0
  167. package/src/engine/network/transport/adapters/SimulatedTransport.js +252 -0
  168. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.d.ts +33 -0
  169. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.d.ts.map +1 -0
  170. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.js +131 -0
  171. package/src/engine/network/transport/adapters/WebSocketTransport.d.ts +49 -0
  172. package/src/engine/network/transport/adapters/WebSocketTransport.d.ts.map +1 -0
  173. package/src/engine/network/transport/adapters/WebSocketTransport.js +180 -0
  174. package/src/engine/network/transport/adapters/WebTransportTransport.d.ts +73 -0
  175. package/src/engine/network/transport/adapters/WebTransportTransport.d.ts.map +1 -0
  176. package/src/engine/network/transport/adapters/WebTransportTransport.js +210 -0
  177. package/src/engine/network/transport/fragments/FragmentAssembler.d.ts +104 -0
  178. package/src/engine/network/transport/fragments/FragmentAssembler.d.ts.map +1 -0
  179. package/src/engine/network/transport/fragments/FragmentAssembler.js +291 -0
  180. package/src/engine/network/transport/fragments/FragmentRetention.d.ts +103 -0
  181. package/src/engine/network/transport/fragments/FragmentRetention.d.ts.map +1 -0
  182. package/src/engine/network/transport/fragments/FragmentRetention.js +194 -0
  183. package/src/engine/network/transport/fragments/fragment_send.d.ts +53 -0
  184. package/src/engine/network/transport/fragments/fragment_send.d.ts.map +1 -0
  185. package/src/engine/network/transport/fragments/fragment_send.js +147 -0
  186. package/src/engine/network/transport/fragments/packet_size.d.ts +93 -0
  187. package/src/engine/network/transport/fragments/packet_size.d.ts.map +1 -0
  188. package/src/engine/network/transport/fragments/packet_size.js +101 -0
  189. package/src/engine/network/xhr.js +23 -23
  190. package/src/engine/simulation/Ticker.d.ts +7 -0
  191. package/src/engine/simulation/Ticker.d.ts.map +1 -1
  192. package/src/engine/simulation/Ticker.js +15 -4
  193. package/src/engine/network/DataChannel.js +0 -1210
  194. package/src/engine/network/RemoteController.d.ts +0 -23
  195. package/src/engine/network/RemoteController.d.ts.map +0 -1
  196. package/src/engine/network/RemoteController.js +0 -114
  197. package/src/engine/network/remoteEditor.d.ts +0 -2
  198. package/src/engine/network/remoteEditor.d.ts.map +0 -1
  199. package/src/engine/network/remoteEditor.js +0 -142
@@ -0,0 +1,84 @@
1
+ import { assert } from "../../../core/assert.js";
2
+ import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
3
+ import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
4
+ import { System } from "../../ecs/System.js";
5
+ import { NetworkIdentity } from "./components/NetworkIdentity.js";
6
+
7
+ /**
8
+ * ECS system that owns the per-entity replication lifecycle.
9
+ *
10
+ * Responsibilities:
11
+ * - When an entity gains a {@link NetworkIdentity}, allocate a `network_id`
12
+ * in the peer's slot table (or honour an explicit pre-set one — used by
13
+ * `Snapshotter` and incoming-packet flows).
14
+ * - When an entity loses its `NetworkIdentity` (or is destroyed), free the
15
+ * slot.
16
+ *
17
+ * **Not** responsible for the per-tick `begin_tick` / `end_tick` cadence —
18
+ * the engine's `EntityManager` doesn't expose pre/post-simulate hooks, so the
19
+ * application code wraps its `engine.simulate(dt)` call:
20
+ *
21
+ * ```js
22
+ * peer.begin_tick(frame_number);
23
+ * engine.simulate(dt);
24
+ * peer.end_tick();
25
+ * ```
26
+ *
27
+ * Add this system to the engine once per `NetworkPeer` instance:
28
+ *
29
+ * ```js
30
+ * const peer = new NetworkPeer({ ... });
31
+ * const network_system = new NetworkSystem(peer);
32
+ * engine.entityManager.addSystem(network_system);
33
+ * ```
34
+ *
35
+ * @author Alex Goldring
36
+ * @copyright Company Named Limited (c) 2025
37
+ */
38
+ export class NetworkSystem extends System {
39
+
40
+ dependencies = [NetworkIdentity];
41
+
42
+ components_used = [
43
+ ResourceAccessSpecification.from(NetworkIdentity, ResourceAccessKind.Write),
44
+ ];
45
+
46
+ /**
47
+ * @param {NetworkPeer} peer
48
+ */
49
+ constructor(peer) {
50
+ super();
51
+ assert.ok(peer && peer.slot_table, 'NetworkSystem: peer must be a NetworkPeer instance with a slot_table');
52
+
53
+ /**
54
+ * @type {NetworkPeer}
55
+ */
56
+ this.peer = peer;
57
+ }
58
+
59
+ /**
60
+ * @param {NetworkIdentity} identity
61
+ * @param {number} entity
62
+ */
63
+ link(identity, entity) {
64
+ if (identity.network_id < 0) {
65
+ // Local spawn: allocate a fresh network_id.
66
+ identity.network_id = this.peer.slot_table.allocate(entity);
67
+ } else {
68
+ // Pre-set (e.g. from a Snapshotter or a remote peer's spawn action).
69
+ // Honour the explicit ID so both sides share the same slot.
70
+ this.peer.slot_table.allocate_at(identity.network_id, entity);
71
+ }
72
+ }
73
+
74
+ /**
75
+ * @param {NetworkIdentity} identity
76
+ * @param {number} entity
77
+ */
78
+ unlink(identity, entity) {
79
+ if (identity.network_id >= 0) {
80
+ this.peer.slot_table.free(identity.network_id);
81
+ identity.network_id = -1;
82
+ }
83
+ }
84
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Marks an entity as replicated and stores its peer-shared `network_id`.
3
+ *
4
+ * Replication is opt-in: only entities with this component are visible to
5
+ * the network layer. Add it before adding any other replicated component;
6
+ * remove it to stop replication (the entity stays alive locally).
7
+ *
8
+ * `network_id` is assigned automatically by {@link NetworkSystem.link} when
9
+ * the component is added to an entity. If the value is non-negative at link
10
+ * time, the system uses it as an explicit hint (typical when a packet from a
11
+ * remote peer carries a `network_id` that must map to a fresh local entity).
12
+ *
13
+ * `owner_peer_id` is the peer that has authority over this entity. Default
14
+ * value `-1` means "the local peer" (server-spawned entities on the server,
15
+ * or unowned). Game logic uses this to decide whether to trust incoming
16
+ * mutations or to predict locally.
17
+ *
18
+ * @author Alex Goldring
19
+ * @copyright Company Named Limited (c) 2025
20
+ */
21
+ export class NetworkIdentity {
22
+ /**
23
+ * Peer-shared identifier. Negative until {@link NetworkSystem.link} runs.
24
+ * @type {number}
25
+ */
26
+ network_id: number;
27
+ /**
28
+ * Peer that authoritatively owns this entity, or -1 for "local / server-owned".
29
+ * @type {number}
30
+ */
31
+ owner_peer_id: number;
32
+ /**
33
+ * Reserved for game-defined replication policy bits (priority class,
34
+ * always-relevant flag, interpolation profile, etc.). Layout is up to the game.
35
+ * @type {number}
36
+ */
37
+ replication_flags: number;
38
+ /**
39
+ *
40
+ * @param {NetworkIdentity} other
41
+ * @returns {boolean}
42
+ */
43
+ equals(other: NetworkIdentity): boolean;
44
+ /**
45
+ *
46
+ * @returns {number}
47
+ */
48
+ hash(): number;
49
+ /**
50
+ * @readonly
51
+ * @type {boolean}
52
+ */
53
+ readonly isNetworkIdentity: boolean;
54
+ }
55
+ export namespace NetworkIdentity {
56
+ let typeName: string;
57
+ }
58
+ //# sourceMappingURL=NetworkIdentity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkIdentity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/network/ecs/components/NetworkIdentity.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAEI;;;OAGG;IACH,YAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,eAFU,MAAM,CAEG;IAEnB;;;;OAIG;IACH,mBAFU,MAAM,CAEM;IAEtB;;;;OAIG;IACH,cAHW,eAAe,GACb,OAAO,CAOnB;IAED;;;OAGG;IACH,QAFa,MAAM,CAIlB;IASL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;CAZ1C;;kBAIS,MAAM"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Marks an entity as replicated and stores its peer-shared `network_id`.
3
+ *
4
+ * Replication is opt-in: only entities with this component are visible to
5
+ * the network layer. Add it before adding any other replicated component;
6
+ * remove it to stop replication (the entity stays alive locally).
7
+ *
8
+ * `network_id` is assigned automatically by {@link NetworkSystem.link} when
9
+ * the component is added to an entity. If the value is non-negative at link
10
+ * time, the system uses it as an explicit hint (typical when a packet from a
11
+ * remote peer carries a `network_id` that must map to a fresh local entity).
12
+ *
13
+ * `owner_peer_id` is the peer that has authority over this entity. Default
14
+ * value `-1` means "the local peer" (server-spawned entities on the server,
15
+ * or unowned). Game logic uses this to decide whether to trust incoming
16
+ * mutations or to predict locally.
17
+ *
18
+ * @author Alex Goldring
19
+ * @copyright Company Named Limited (c) 2025
20
+ */
21
+ export class NetworkIdentity {
22
+
23
+ /**
24
+ * Peer-shared identifier. Negative until {@link NetworkSystem.link} runs.
25
+ * @type {number}
26
+ */
27
+ network_id = -1;
28
+
29
+ /**
30
+ * Peer that authoritatively owns this entity, or -1 for "local / server-owned".
31
+ * @type {number}
32
+ */
33
+ owner_peer_id = -1;
34
+
35
+ /**
36
+ * Reserved for game-defined replication policy bits (priority class,
37
+ * always-relevant flag, interpolation profile, etc.). Layout is up to the game.
38
+ * @type {number}
39
+ */
40
+ replication_flags = 0;
41
+
42
+ /**
43
+ *
44
+ * @param {NetworkIdentity} other
45
+ * @returns {boolean}
46
+ */
47
+ equals(other) {
48
+ return this.network_id === other.network_id
49
+ && this.owner_peer_id === other.owner_peer_id
50
+ && this.replication_flags === other.replication_flags
51
+ ;
52
+ }
53
+
54
+ /**
55
+ *
56
+ * @returns {number}
57
+ */
58
+ hash() {
59
+ return this.network_id ^ this.owner_peer_id ^ this.replication_flags;
60
+ }
61
+ }
62
+
63
+ /**
64
+ * @readonly
65
+ * @type {string}
66
+ */
67
+ NetworkIdentity.typeName = "NetworkIdentity";
68
+
69
+ /**
70
+ * @readonly
71
+ * @type {boolean}
72
+ */
73
+ NetworkIdentity.prototype.isNetworkIdentity = true;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Highest `owner_peer_id` value the wire format can faithfully represent.
3
+ * Above this the +1 bias would alias into the "unowned" sentinel encoding.
4
+ * Documented here so callers can see the limit without spelunking the
5
+ * adapter internals.
6
+ *
7
+ * @type {number}
8
+ */
9
+ export const MAX_OWNER_PEER_ID: number;
10
+ /**
11
+ * Save-game adapter for {@link NetworkIdentity}.
12
+ *
13
+ * Wire layout: `network_id_varint, owner_peer_id_uint16, replication_flags_uint8`.
14
+ *
15
+ * Note: this is for *save-game* persistence, not the per-tick replication
16
+ * stream. Network packets carry `network_id` inside individual `SimAction`
17
+ * payloads; the component itself doesn't go on the wire (the receiver creates
18
+ * a fresh NetworkIdentity locally).
19
+ *
20
+ * @author Alex Goldring
21
+ * @copyright Company Named Limited (c) 2025
22
+ */
23
+ export class NetworkIdentitySerializationAdapter extends BinaryClassSerializationAdapter<any> {
24
+ constructor();
25
+ klass: typeof NetworkIdentity;
26
+ version: number;
27
+ /**
28
+ * @param {BinaryBuffer} buffer
29
+ * @param {NetworkIdentity} value
30
+ */
31
+ serialize(buffer: BinaryBuffer, value: NetworkIdentity): void;
32
+ /**
33
+ * @param {BinaryBuffer} buffer
34
+ * @param {NetworkIdentity} value
35
+ */
36
+ deserialize(buffer: BinaryBuffer, value: NetworkIdentity): void;
37
+ }
38
+ import { BinaryClassSerializationAdapter } from "../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
39
+ import { NetworkIdentity } from "../components/NetworkIdentity.js";
40
+ //# sourceMappingURL=NetworkIdentitySerializationAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkIdentitySerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/network/ecs/serialization/NetworkIdentitySerializationAdapter.js"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,gCAFU,MAAM,CAEwB;AAExC;;;;;;;;;;;;GAYG;AACH;;IAEI,8BAAwB;IACxB,gBAAY;IAEZ;;;OAGG;IACH,uCAFW,eAAe,QAmBzB;IAED;;;OAGG;IACH,yCAFW,eAAe,QAMzB;CACJ;gDA/D+C,gEAAgE;gCAChF,kCAAkC"}
@@ -0,0 +1,64 @@
1
+ import { BinaryClassSerializationAdapter } from "../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
+ import { NetworkIdentity } from "../components/NetworkIdentity.js";
3
+
4
+ /**
5
+ * Highest `owner_peer_id` value the wire format can faithfully represent.
6
+ * Above this the +1 bias would alias into the "unowned" sentinel encoding.
7
+ * Documented here so callers can see the limit without spelunking the
8
+ * adapter internals.
9
+ *
10
+ * @type {number}
11
+ */
12
+ export const MAX_OWNER_PEER_ID = 0xFFFD;
13
+
14
+ /**
15
+ * Save-game adapter for {@link NetworkIdentity}.
16
+ *
17
+ * Wire layout: `network_id_varint, owner_peer_id_uint16, replication_flags_uint8`.
18
+ *
19
+ * Note: this is for *save-game* persistence, not the per-tick replication
20
+ * stream. Network packets carry `network_id` inside individual `SimAction`
21
+ * payloads; the component itself doesn't go on the wire (the receiver creates
22
+ * a fresh NetworkIdentity locally).
23
+ *
24
+ * @author Alex Goldring
25
+ * @copyright Company Named Limited (c) 2025
26
+ */
27
+ export class NetworkIdentitySerializationAdapter extends BinaryClassSerializationAdapter {
28
+
29
+ klass = NetworkIdentity;
30
+ version = 1;
31
+
32
+ /**
33
+ * @param {BinaryBuffer} buffer
34
+ * @param {NetworkIdentity} value
35
+ */
36
+ serialize(buffer, value) {
37
+ // network_id can be -1 (unassigned). Bias by 1 so the varint stays small.
38
+ buffer.writeUintVar(value.network_id + 1);
39
+ // owner_peer_id can also be -1; bias by 1 into uint16 range. Mask
40
+ // would silently alias values >= 0xFFFE into the "unowned" sentinel.
41
+ // We throw instead so the truncation can't slip through in a
42
+ // production bundle (where assertions are stripped). Lift to a
43
+ // wider field on the wire if we ever expect more than ~65k
44
+ // concurrent peers.
45
+ if (value.owner_peer_id > MAX_OWNER_PEER_ID) {
46
+ throw new Error(
47
+ `NetworkIdentitySerializationAdapter: owner_peer_id ${value.owner_peer_id} exceeds the wire format limit (${MAX_OWNER_PEER_ID}); ` +
48
+ `widen the wire format if more peers are needed`
49
+ );
50
+ }
51
+ buffer.writeUint16((value.owner_peer_id + 1) & 0xFFFF);
52
+ buffer.writeUint8(value.replication_flags & 0xFF);
53
+ }
54
+
55
+ /**
56
+ * @param {BinaryBuffer} buffer
57
+ * @param {NetworkIdentity} value
58
+ */
59
+ deserialize(buffer, value) {
60
+ value.network_id = buffer.readUintVar() - 1;
61
+ value.owner_peer_id = buffer.readUint16() - 1;
62
+ value.replication_flags = buffer.readUint8();
63
+ }
64
+ }