@open-core/framework 0.1.0-alpha.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 (281) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +360 -0
  3. package/dist/client/client-bootstrap.d.ts +1 -0
  4. package/dist/client/client-bootstrap.js +50 -0
  5. package/dist/client/client-container.d.ts +2 -0
  6. package/dist/client/client-container.js +6 -0
  7. package/dist/client/client-core.d.ts +1 -0
  8. package/dist/client/client-core.js +7 -0
  9. package/dist/client/controllers/spawner.controller.d.ts +12 -0
  10. package/dist/client/controllers/spawner.controller.js +51 -0
  11. package/dist/client/decorators/controller.d.ts +3 -0
  12. package/dist/client/decorators/controller.js +14 -0
  13. package/dist/client/decorators/export.d.ts +7 -0
  14. package/dist/client/decorators/export.js +15 -0
  15. package/dist/client/decorators/gameEvent.d.ts +47 -0
  16. package/dist/client/decorators/gameEvent.js +54 -0
  17. package/dist/client/decorators/index.d.ts +10 -0
  18. package/dist/client/decorators/index.js +26 -0
  19. package/dist/client/decorators/interval.d.ts +7 -0
  20. package/dist/client/decorators/interval.js +15 -0
  21. package/dist/client/decorators/key.d.ts +2 -0
  22. package/dist/client/decorators/key.js +10 -0
  23. package/dist/client/decorators/localEvent.d.ts +7 -0
  24. package/dist/client/decorators/localEvent.js +15 -0
  25. package/dist/client/decorators/nui.d.ts +1 -0
  26. package/dist/client/decorators/nui.js +9 -0
  27. package/dist/client/decorators/onNet.d.ts +1 -0
  28. package/dist/client/decorators/onNet.js +9 -0
  29. package/dist/client/decorators/resourceLifecycle.d.ts +11 -0
  30. package/dist/client/decorators/resourceLifecycle.js +24 -0
  31. package/dist/client/decorators/tick.d.ts +1 -0
  32. package/dist/client/decorators/tick.js +9 -0
  33. package/dist/client/index.d.ts +7 -0
  34. package/dist/client/index.js +23 -0
  35. package/dist/client/interfaces/appearance.interface.d.ts +19 -0
  36. package/dist/client/interfaces/appearance.interface.js +2 -0
  37. package/dist/client/player/player.d.ts +262 -0
  38. package/dist/client/player/player.js +480 -0
  39. package/dist/client/player/player.loader.d.ts +1 -0
  40. package/dist/client/player/player.loader.js +22 -0
  41. package/dist/client/services/appearance.service.d.ts +6 -0
  42. package/dist/client/services/appearance.service.js +89 -0
  43. package/dist/client/services/blip.service.d.ts +112 -0
  44. package/dist/client/services/blip.service.js +215 -0
  45. package/dist/client/services/index.d.ts +9 -0
  46. package/dist/client/services/index.js +25 -0
  47. package/dist/client/services/marker.service.d.ts +94 -0
  48. package/dist/client/services/marker.service.js +153 -0
  49. package/dist/client/services/notification.service.d.ts +76 -0
  50. package/dist/client/services/notification.service.js +111 -0
  51. package/dist/client/services/ped.service.d.ts +182 -0
  52. package/dist/client/services/ped.service.js +302 -0
  53. package/dist/client/services/progress.service.d.ts +82 -0
  54. package/dist/client/services/progress.service.js +210 -0
  55. package/dist/client/services/spawn.service.d.ts +73 -0
  56. package/dist/client/services/spawn.service.js +261 -0
  57. package/dist/client/services/streaming.service.d.ts +165 -0
  58. package/dist/client/services/streaming.service.js +341 -0
  59. package/dist/client/services/textui.service.d.ts +82 -0
  60. package/dist/client/services/textui.service.js +156 -0
  61. package/dist/client/services/vehicle.service.d.ts +168 -0
  62. package/dist/client/services/vehicle.service.js +296 -0
  63. package/dist/client/system/metadata-client.keys.d.ts +13 -0
  64. package/dist/client/system/metadata-client.keys.js +16 -0
  65. package/dist/client/system/processors/export.processor.d.ts +7 -0
  66. package/dist/client/system/processors/export.processor.js +39 -0
  67. package/dist/client/system/processors/gameEvent.processor.d.ts +10 -0
  68. package/dist/client/system/processors/gameEvent.processor.js +58 -0
  69. package/dist/client/system/processors/interval.processor.d.ts +7 -0
  70. package/dist/client/system/processors/interval.processor.js +43 -0
  71. package/dist/client/system/processors/key.processor.d.ts +8 -0
  72. package/dist/client/system/processors/key.processor.js +27 -0
  73. package/dist/client/system/processors/localEvent.processor.d.ts +7 -0
  74. package/dist/client/system/processors/localEvent.processor.js +38 -0
  75. package/dist/client/system/processors/netEvent.processor.d.ts +7 -0
  76. package/dist/client/system/processors/netEvent.processor.js +38 -0
  77. package/dist/client/system/processors/nui.processor.d.ts +7 -0
  78. package/dist/client/system/processors/nui.processor.js +40 -0
  79. package/dist/client/system/processors/resourceLifecycle.processor.d.ts +9 -0
  80. package/dist/client/system/processors/resourceLifecycle.processor.js +69 -0
  81. package/dist/client/system/processors/tick.processor.d.ts +5 -0
  82. package/dist/client/system/processors/tick.processor.js +37 -0
  83. package/dist/client/system/processors.register.d.ts +1 -0
  84. package/dist/client/system/processors.register.js +27 -0
  85. package/dist/client/types/game-events.d.ts +126 -0
  86. package/dist/client/types/game-events.js +83 -0
  87. package/dist/client/types/index.d.ts +1 -0
  88. package/dist/client/types/index.js +17 -0
  89. package/dist/client/ui-bridge.d.ts +116 -0
  90. package/dist/client/ui-bridge.js +201 -0
  91. package/dist/index.d.ts +5 -0
  92. package/dist/index.js +41 -0
  93. package/dist/server/bootstrap.d.ts +16 -0
  94. package/dist/server/bootstrap.js +57 -0
  95. package/dist/server/bus/core-event-bus.d.ts +6 -0
  96. package/dist/server/bus/core-event-bus.js +31 -0
  97. package/dist/server/configs/api.config.d.ts +71 -0
  98. package/dist/server/configs/api.config.js +81 -0
  99. package/dist/server/configs/config.base.d.ts +63 -0
  100. package/dist/server/configs/config.base.js +64 -0
  101. package/dist/server/configs/index.d.ts +2 -0
  102. package/dist/server/configs/index.js +18 -0
  103. package/dist/server/container.d.ts +2 -0
  104. package/dist/server/container.js +6 -0
  105. package/dist/server/controllers/chat.controller.d.ts +10 -0
  106. package/dist/server/controllers/chat.controller.js +50 -0
  107. package/dist/server/controllers/command.controller.d.ts +7 -0
  108. package/dist/server/controllers/command.controller.js +47 -0
  109. package/dist/server/controllers/session.controller.d.ts +9 -0
  110. package/dist/server/controllers/session.controller.js +70 -0
  111. package/dist/server/core.d.ts +1 -0
  112. package/dist/server/core.js +7 -0
  113. package/dist/server/database/adapters/oxmysql.adapter.d.ts +89 -0
  114. package/dist/server/database/adapters/oxmysql.adapter.js +149 -0
  115. package/dist/server/database/database.contract.d.ts +128 -0
  116. package/dist/server/database/database.contract.js +29 -0
  117. package/dist/server/database/database.service.d.ts +216 -0
  118. package/dist/server/database/database.service.js +301 -0
  119. package/dist/server/database/index.d.ts +53 -0
  120. package/dist/server/database/index.js +70 -0
  121. package/dist/server/database/types.d.ts +67 -0
  122. package/dist/server/database/types.js +7 -0
  123. package/dist/server/database.d.ts +7 -0
  124. package/dist/server/database.js +23 -0
  125. package/dist/server/decorators/bind.d.ts +2 -0
  126. package/dist/server/decorators/bind.js +15 -0
  127. package/dist/server/decorators/command.d.ts +49 -0
  128. package/dist/server/decorators/command.js +23 -0
  129. package/dist/server/decorators/controller.d.ts +25 -0
  130. package/dist/server/decorators/controller.js +36 -0
  131. package/dist/server/decorators/export.d.ts +39 -0
  132. package/dist/server/decorators/export.js +47 -0
  133. package/dist/server/decorators/guard.d.ts +56 -0
  134. package/dist/server/decorators/guard.js +82 -0
  135. package/dist/server/decorators/index.d.ts +10 -0
  136. package/dist/server/decorators/index.js +29 -0
  137. package/dist/server/decorators/onFiveMEvent.d.ts +6 -0
  138. package/dist/server/decorators/onFiveMEvent.js +14 -0
  139. package/dist/server/decorators/onFrameworkEvent.d.ts +22 -0
  140. package/dist/server/decorators/onFrameworkEvent.js +29 -0
  141. package/dist/server/decorators/onNet.d.ts +58 -0
  142. package/dist/server/decorators/onNet.js +57 -0
  143. package/dist/server/decorators/onTick.d.ts +32 -0
  144. package/dist/server/decorators/onTick.js +40 -0
  145. package/dist/server/decorators/public.d.ts +27 -0
  146. package/dist/server/decorators/public.js +36 -0
  147. package/dist/server/decorators/requiresState.d.ts +56 -0
  148. package/dist/server/decorators/requiresState.js +63 -0
  149. package/dist/server/decorators/throttle.d.ts +48 -0
  150. package/dist/server/decorators/throttle.js +63 -0
  151. package/dist/server/decorators/utils.d.ts +57 -0
  152. package/dist/server/decorators/utils.js +63 -0
  153. package/dist/server/entities/index.d.ts +1 -0
  154. package/dist/server/entities/index.js +17 -0
  155. package/dist/server/entities/player.d.ts +157 -0
  156. package/dist/server/entities/player.js +217 -0
  157. package/dist/server/error-handler.d.ts +2 -0
  158. package/dist/server/error-handler.js +43 -0
  159. package/dist/server/helpers/resolve-method.d.ts +5 -0
  160. package/dist/server/helpers/resolve-method.js +18 -0
  161. package/dist/server/index.d.ts +10 -0
  162. package/dist/server/index.js +31 -0
  163. package/dist/server/loaders/exports.loader.d.ts +0 -0
  164. package/dist/server/loaders/exports.loader.js +23 -0
  165. package/dist/server/loaders/playerSession.loader.d.ts +1 -0
  166. package/dist/server/loaders/playerSession.loader.js +51 -0
  167. package/dist/server/services/access-control.service.d.ts +56 -0
  168. package/dist/server/services/access-control.service.js +99 -0
  169. package/dist/server/services/chat.service.d.ts +7 -0
  170. package/dist/server/services/chat.service.js +31 -0
  171. package/dist/server/services/command.service.d.ts +15 -0
  172. package/dist/server/services/command.service.js +77 -0
  173. package/dist/server/services/config.service.d.ts +75 -0
  174. package/dist/server/services/config.service.js +116 -0
  175. package/dist/server/services/default/default-security.handler.d.ts +6 -0
  176. package/dist/server/services/default/default-security.handler.js +26 -0
  177. package/dist/server/services/http/http.service.d.ts +50 -0
  178. package/dist/server/services/http/http.service.js +126 -0
  179. package/dist/server/services/index.d.ts +10 -0
  180. package/dist/server/services/index.js +26 -0
  181. package/dist/server/services/parallel/index.d.ts +49 -0
  182. package/dist/server/services/parallel/index.js +67 -0
  183. package/dist/server/services/parallel/parallel-compute.service.d.ts +132 -0
  184. package/dist/server/services/parallel/parallel-compute.service.js +449 -0
  185. package/dist/server/services/parallel/types.d.ts +188 -0
  186. package/dist/server/services/parallel/types.js +7 -0
  187. package/dist/server/services/parallel/worker-pool.d.ts +83 -0
  188. package/dist/server/services/parallel/worker-pool.js +350 -0
  189. package/dist/server/services/parallel/worker.d.ts +19 -0
  190. package/dist/server/services/parallel/worker.js +49 -0
  191. package/dist/server/services/persistence.service.d.ts +59 -0
  192. package/dist/server/services/persistence.service.js +166 -0
  193. package/dist/server/services/player.service.d.ts +96 -0
  194. package/dist/server/services/player.service.js +132 -0
  195. package/dist/server/services/rate-limiter.service.d.ts +5 -0
  196. package/dist/server/services/rate-limiter.service.js +39 -0
  197. package/dist/server/services/registers.d.ts +1 -0
  198. package/dist/server/services/registers.js +18 -0
  199. package/dist/server/setup.d.ts +9 -0
  200. package/dist/server/setup.js +28 -0
  201. package/dist/server/system/metadata-server.keys.d.ts +10 -0
  202. package/dist/server/system/metadata-server.keys.js +13 -0
  203. package/dist/server/system/processors/command.processor.d.ts +9 -0
  204. package/dist/server/system/processors/command.processor.js +30 -0
  205. package/dist/server/system/processors/coreEvent.processor.d.ts +7 -0
  206. package/dist/server/system/processors/coreEvent.processor.js +41 -0
  207. package/dist/server/system/processors/export.processor.d.ts +7 -0
  208. package/dist/server/system/processors/export.processor.js +30 -0
  209. package/dist/server/system/processors/fivemEvent.processor.d.ts +7 -0
  210. package/dist/server/system/processors/fivemEvent.processor.js +40 -0
  211. package/dist/server/system/processors/netEvent.processor.d.ts +11 -0
  212. package/dist/server/system/processors/netEvent.processor.js +103 -0
  213. package/dist/server/system/processors/tick.processor.d.ts +5 -0
  214. package/dist/server/system/processors/tick.processor.js +36 -0
  215. package/dist/server/system/processors.register.d.ts +1 -0
  216. package/dist/server/system/processors.register.js +23 -0
  217. package/dist/server/system/schema-generator.d.ts +2 -0
  218. package/dist/server/system/schema-generator.js +34 -0
  219. package/dist/server/templates/admin/admin.controller-template.d.ts +12 -0
  220. package/dist/server/templates/admin/admin.controller-template.js +2 -0
  221. package/dist/server/templates/auth/auth-provider.contract.d.ts +58 -0
  222. package/dist/server/templates/auth/auth-provider.contract.js +23 -0
  223. package/dist/server/templates/index.d.ts +8 -0
  224. package/dist/server/templates/index.js +21 -0
  225. package/dist/server/templates/persistence/index.d.ts +30 -0
  226. package/dist/server/templates/persistence/index.js +34 -0
  227. package/dist/server/templates/persistence/player-persistence.contract.d.ts +86 -0
  228. package/dist/server/templates/persistence/player-persistence.contract.js +52 -0
  229. package/dist/server/templates/repository/index.d.ts +57 -0
  230. package/dist/server/templates/repository/index.js +61 -0
  231. package/dist/server/templates/repository/repository.contract.d.ts +224 -0
  232. package/dist/server/templates/repository/repository.contract.js +342 -0
  233. package/dist/server/templates/repository/repository.types.d.ts +51 -0
  234. package/dist/server/templates/repository/repository.types.js +7 -0
  235. package/dist/server/templates/security/permission.types.d.ts +32 -0
  236. package/dist/server/templates/security/permission.types.js +2 -0
  237. package/dist/server/templates/security/principal-provider.contract.d.ts +43 -0
  238. package/dist/server/templates/security/principal-provider.contract.js +19 -0
  239. package/dist/server/templates/security/security-handler.contract.d.ts +5 -0
  240. package/dist/server/templates/security/security-handler.contract.js +6 -0
  241. package/dist/server/types/core-events.d.ts +22 -0
  242. package/dist/server/types/core-events.js +2 -0
  243. package/dist/server/types/security.types.d.ts +7 -0
  244. package/dist/server/types/security.types.js +2 -0
  245. package/dist/shared/index.d.ts +1 -0
  246. package/dist/shared/index.js +17 -0
  247. package/dist/shared/logger/core-logger.d.ts +35 -0
  248. package/dist/shared/logger/core-logger.js +52 -0
  249. package/dist/shared/logger/index.d.ts +11 -0
  250. package/dist/shared/logger/index.js +26 -0
  251. package/dist/shared/logger/logger.config.d.ts +47 -0
  252. package/dist/shared/logger/logger.config.js +33 -0
  253. package/dist/shared/logger/logger.service.d.ts +161 -0
  254. package/dist/shared/logger/logger.service.js +279 -0
  255. package/dist/shared/logger/logger.types.d.ts +85 -0
  256. package/dist/shared/logger/logger.types.js +74 -0
  257. package/dist/shared/logger/transports/buffered.transport.d.ts +88 -0
  258. package/dist/shared/logger/transports/buffered.transport.js +174 -0
  259. package/dist/shared/logger/transports/console.transport.d.ts +37 -0
  260. package/dist/shared/logger/transports/console.transport.js +134 -0
  261. package/dist/shared/logger/transports/index.d.ts +3 -0
  262. package/dist/shared/logger/transports/index.js +19 -0
  263. package/dist/shared/logger/transports/transport.interface.d.ts +40 -0
  264. package/dist/shared/logger/transports/transport.interface.js +2 -0
  265. package/dist/system/class-constructor.d.ts +1 -0
  266. package/dist/system/class-constructor.js +2 -0
  267. package/dist/system/decorator-processor.d.ts +4 -0
  268. package/dist/system/decorator-processor.js +2 -0
  269. package/dist/system/metadata.scanner.d.ts +7 -0
  270. package/dist/system/metadata.scanner.js +45 -0
  271. package/dist/utils/errors.d.ts +14 -0
  272. package/dist/utils/errors.js +25 -0
  273. package/dist/utils/index.d.ts +4 -0
  274. package/dist/utils/index.js +20 -0
  275. package/dist/utils/result.d.ts +12 -0
  276. package/dist/utils/result.js +10 -0
  277. package/dist/utils/rgb.d.ts +5 -0
  278. package/dist/utils/rgb.js +2 -0
  279. package/dist/utils/vector3.d.ts +13 -0
  280. package/dist/utils/vector3.js +27 -0
  281. package/package.json +98 -0
@@ -0,0 +1,165 @@
1
+ export interface StreamingRequest {
2
+ type: 'model' | 'animDict' | 'ptfx' | 'texture' | 'audio';
3
+ asset: string;
4
+ loaded: boolean;
5
+ hash?: number;
6
+ }
7
+ /**
8
+ * Service for managing asset streaming (models, animations, particles, etc.).
9
+ */
10
+ export declare class StreamingService {
11
+ private loadedAssets;
12
+ /**
13
+ * Request and load a model.
14
+ *
15
+ * @param model - Model name or hash
16
+ * @param timeout - Maximum wait time in ms
17
+ * @returns Whether the model was loaded successfully
18
+ */
19
+ requestModel(model: string | number, timeout?: number): Promise<boolean>;
20
+ /**
21
+ * Check if a model is loaded.
22
+ *
23
+ * @param model - Model name or hash
24
+ */
25
+ isModelLoaded(model: string | number): boolean;
26
+ /**
27
+ * Release a loaded model.
28
+ *
29
+ * @param model - Model name or hash
30
+ */
31
+ releaseModel(model: string | number): void;
32
+ /**
33
+ * Check if a model is valid and exists in the game files.
34
+ *
35
+ * @param model - Model name or hash
36
+ */
37
+ isModelValid(model: string | number): boolean;
38
+ /**
39
+ * Check if a model is a vehicle.
40
+ *
41
+ * @param model - Model name or hash
42
+ */
43
+ isModelVehicle(model: string | number): boolean;
44
+ /**
45
+ * Check if a model is a ped.
46
+ *
47
+ * @param model - Model name or hash
48
+ */
49
+ isModelPed(model: string | number): boolean;
50
+ /**
51
+ * Request and load an animation dictionary.
52
+ *
53
+ * @param dict - Animation dictionary name
54
+ * @param timeout - Maximum wait time in ms
55
+ * @returns Whether the dictionary was loaded successfully
56
+ */
57
+ requestAnimDict(dict: string, timeout?: number): Promise<boolean>;
58
+ /**
59
+ * Check if an animation dictionary is loaded.
60
+ *
61
+ * @param dict - Animation dictionary name
62
+ */
63
+ isAnimDictLoaded(dict: string): boolean;
64
+ /**
65
+ * Release a loaded animation dictionary.
66
+ *
67
+ * @param dict - Animation dictionary name
68
+ */
69
+ releaseAnimDict(dict: string): void;
70
+ /**
71
+ * Request and load a particle effect asset.
72
+ *
73
+ * @param asset - PTFX asset name
74
+ * @param timeout - Maximum wait time in ms
75
+ * @returns Whether the asset was loaded successfully
76
+ */
77
+ requestPtfxAsset(asset: string, timeout?: number): Promise<boolean>;
78
+ /**
79
+ * Check if a PTFX asset is loaded.
80
+ *
81
+ * @param asset - PTFX asset name
82
+ */
83
+ isPtfxAssetLoaded(asset: string): boolean;
84
+ /**
85
+ * Release a loaded PTFX asset.
86
+ *
87
+ * @param asset - PTFX asset name
88
+ */
89
+ releasePtfxAsset(asset: string): void;
90
+ /**
91
+ * Start a particle effect at a position.
92
+ *
93
+ * @param asset - PTFX asset name
94
+ * @param effectName - Effect name within the asset
95
+ * @param position - World position
96
+ * @param rotation - Rotation
97
+ * @param scale - Scale
98
+ * @param looped - Whether to loop
99
+ * @returns The particle effect handle
100
+ */
101
+ startParticleEffect(asset: string, effectName: string, position: {
102
+ x: number;
103
+ y: number;
104
+ z: number;
105
+ }, rotation?: {
106
+ x: number;
107
+ y: number;
108
+ z: number;
109
+ }, scale?: number, looped?: boolean): Promise<number>;
110
+ /**
111
+ * Stop a looped particle effect.
112
+ *
113
+ * @param handle - Particle effect handle
114
+ */
115
+ stopParticleEffect(handle: number): void;
116
+ /**
117
+ * Request and load a texture dictionary.
118
+ *
119
+ * @param dict - Texture dictionary name
120
+ * @param timeout - Maximum wait time in ms
121
+ * @returns Whether the dictionary was loaded successfully
122
+ */
123
+ requestTextureDict(dict: string, timeout?: number): Promise<boolean>;
124
+ /**
125
+ * Check if a texture dictionary is loaded.
126
+ *
127
+ * @param dict - Texture dictionary name
128
+ */
129
+ isTextureDictLoaded(dict: string): boolean;
130
+ /**
131
+ * Release a loaded texture dictionary.
132
+ *
133
+ * @param dict - Texture dictionary name
134
+ */
135
+ releaseTextureDict(dict: string): void;
136
+ /**
137
+ * Request and load a script audio bank.
138
+ *
139
+ * @param audioBank - Audio bank name
140
+ * @param networked - Whether the audio should be networked
141
+ * @param timeout - Maximum wait time in ms
142
+ * @returns Whether the audio bank was loaded successfully
143
+ */
144
+ requestAudioBank(audioBank: string, networked?: boolean, _timeout?: number): Promise<boolean>;
145
+ /**
146
+ * Release a loaded audio bank.
147
+ *
148
+ * @param audioBank - Audio bank name
149
+ */
150
+ releaseAudioBank(audioBank: string): void;
151
+ /**
152
+ * Get all currently loaded assets.
153
+ */
154
+ getLoadedAssets(): StreamingRequest[];
155
+ /**
156
+ * Release all loaded assets.
157
+ */
158
+ releaseAll(): void;
159
+ /**
160
+ * Get hash key for a string.
161
+ *
162
+ * @param str - String to hash
163
+ */
164
+ getHash(str: string): number;
165
+ }
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.StreamingService = void 0;
10
+ const tsyringe_1 = require("tsyringe");
11
+ /**
12
+ * Service for managing asset streaming (models, animations, particles, etc.).
13
+ */
14
+ let StreamingService = class StreamingService {
15
+ constructor() {
16
+ this.loadedAssets = new Map();
17
+ }
18
+ // ─────────────────────────────────────────────────────────────────────────────
19
+ // Model Loading
20
+ // ─────────────────────────────────────────────────────────────────────────────
21
+ /**
22
+ * Request and load a model.
23
+ *
24
+ * @param model - Model name or hash
25
+ * @param timeout - Maximum wait time in ms
26
+ * @returns Whether the model was loaded successfully
27
+ */
28
+ async requestModel(model, timeout = 10000) {
29
+ var _a;
30
+ const hash = typeof model === 'string' ? GetHashKey(model) : model;
31
+ const key = `model:${hash}`;
32
+ // Already loaded
33
+ if ((_a = this.loadedAssets.get(key)) === null || _a === void 0 ? void 0 : _a.loaded) {
34
+ return true;
35
+ }
36
+ // Check if valid
37
+ if (!IsModelInCdimage(hash) || !IsModelValid(hash)) {
38
+ return false;
39
+ }
40
+ RequestModel(hash);
41
+ const startTime = GetGameTimer();
42
+ while (!HasModelLoaded(hash)) {
43
+ if (GetGameTimer() - startTime > timeout) {
44
+ return false;
45
+ }
46
+ await new Promise((r) => setTimeout(r, 0));
47
+ }
48
+ this.loadedAssets.set(key, { type: 'model', asset: String(model), loaded: true, hash });
49
+ return true;
50
+ }
51
+ /**
52
+ * Check if a model is loaded.
53
+ *
54
+ * @param model - Model name or hash
55
+ */
56
+ isModelLoaded(model) {
57
+ const hash = typeof model === 'string' ? GetHashKey(model) : model;
58
+ return HasModelLoaded(hash);
59
+ }
60
+ /**
61
+ * Release a loaded model.
62
+ *
63
+ * @param model - Model name or hash
64
+ */
65
+ releaseModel(model) {
66
+ const hash = typeof model === 'string' ? GetHashKey(model) : model;
67
+ SetModelAsNoLongerNeeded(hash);
68
+ this.loadedAssets.delete(`model:${hash}`);
69
+ }
70
+ /**
71
+ * Check if a model is valid and exists in the game files.
72
+ *
73
+ * @param model - Model name or hash
74
+ */
75
+ isModelValid(model) {
76
+ const hash = typeof model === 'string' ? GetHashKey(model) : model;
77
+ return IsModelInCdimage(hash) && IsModelValid(hash);
78
+ }
79
+ /**
80
+ * Check if a model is a vehicle.
81
+ *
82
+ * @param model - Model name or hash
83
+ */
84
+ isModelVehicle(model) {
85
+ const hash = typeof model === 'string' ? GetHashKey(model) : model;
86
+ return IsModelAVehicle(hash);
87
+ }
88
+ /**
89
+ * Check if a model is a ped.
90
+ *
91
+ * @param model - Model name or hash
92
+ */
93
+ isModelPed(model) {
94
+ const hash = typeof model === 'string' ? GetHashKey(model) : model;
95
+ return IsModelAPed(hash);
96
+ }
97
+ // ─────────────────────────────────────────────────────────────────────────────
98
+ // Animation Dictionary Loading
99
+ // ─────────────────────────────────────────────────────────────────────────────
100
+ /**
101
+ * Request and load an animation dictionary.
102
+ *
103
+ * @param dict - Animation dictionary name
104
+ * @param timeout - Maximum wait time in ms
105
+ * @returns Whether the dictionary was loaded successfully
106
+ */
107
+ async requestAnimDict(dict, timeout = 10000) {
108
+ var _a;
109
+ const key = `anim:${dict}`;
110
+ // Already loaded
111
+ if ((_a = this.loadedAssets.get(key)) === null || _a === void 0 ? void 0 : _a.loaded) {
112
+ return true;
113
+ }
114
+ RequestAnimDict(dict);
115
+ const startTime = GetGameTimer();
116
+ while (!HasAnimDictLoaded(dict)) {
117
+ if (GetGameTimer() - startTime > timeout) {
118
+ return false;
119
+ }
120
+ await new Promise((r) => setTimeout(r, 0));
121
+ }
122
+ this.loadedAssets.set(key, { type: 'animDict', asset: dict, loaded: true });
123
+ return true;
124
+ }
125
+ /**
126
+ * Check if an animation dictionary is loaded.
127
+ *
128
+ * @param dict - Animation dictionary name
129
+ */
130
+ isAnimDictLoaded(dict) {
131
+ return HasAnimDictLoaded(dict);
132
+ }
133
+ /**
134
+ * Release a loaded animation dictionary.
135
+ *
136
+ * @param dict - Animation dictionary name
137
+ */
138
+ releaseAnimDict(dict) {
139
+ RemoveAnimDict(dict);
140
+ this.loadedAssets.delete(`anim:${dict}`);
141
+ }
142
+ // ─────────────────────────────────────────────────────────────────────────────
143
+ // Particle Effects (PTFX) Loading
144
+ // ─────────────────────────────────────────────────────────────────────────────
145
+ /**
146
+ * Request and load a particle effect asset.
147
+ *
148
+ * @param asset - PTFX asset name
149
+ * @param timeout - Maximum wait time in ms
150
+ * @returns Whether the asset was loaded successfully
151
+ */
152
+ async requestPtfxAsset(asset, timeout = 10000) {
153
+ var _a;
154
+ const key = `ptfx:${asset}`;
155
+ // Already loaded
156
+ if ((_a = this.loadedAssets.get(key)) === null || _a === void 0 ? void 0 : _a.loaded) {
157
+ return true;
158
+ }
159
+ RequestNamedPtfxAsset(asset);
160
+ const startTime = GetGameTimer();
161
+ while (!HasNamedPtfxAssetLoaded(asset)) {
162
+ if (GetGameTimer() - startTime > timeout) {
163
+ return false;
164
+ }
165
+ await new Promise((r) => setTimeout(r, 0));
166
+ }
167
+ this.loadedAssets.set(key, { type: 'ptfx', asset, loaded: true });
168
+ return true;
169
+ }
170
+ /**
171
+ * Check if a PTFX asset is loaded.
172
+ *
173
+ * @param asset - PTFX asset name
174
+ */
175
+ isPtfxAssetLoaded(asset) {
176
+ return HasNamedPtfxAssetLoaded(asset);
177
+ }
178
+ /**
179
+ * Release a loaded PTFX asset.
180
+ *
181
+ * @param asset - PTFX asset name
182
+ */
183
+ releasePtfxAsset(asset) {
184
+ RemoveNamedPtfxAsset(asset);
185
+ this.loadedAssets.delete(`ptfx:${asset}`);
186
+ }
187
+ /**
188
+ * Start a particle effect at a position.
189
+ *
190
+ * @param asset - PTFX asset name
191
+ * @param effectName - Effect name within the asset
192
+ * @param position - World position
193
+ * @param rotation - Rotation
194
+ * @param scale - Scale
195
+ * @param looped - Whether to loop
196
+ * @returns The particle effect handle
197
+ */
198
+ async startParticleEffect(asset, effectName, position, rotation = { x: 0, y: 0, z: 0 }, scale = 1.0, looped = false) {
199
+ await this.requestPtfxAsset(asset);
200
+ UseParticleFxAssetNextCall(asset);
201
+ if (looped) {
202
+ return StartParticleFxLoopedAtCoord(effectName, position.x, position.y, position.z, rotation.x, rotation.y, rotation.z, scale, false, false, false, false);
203
+ }
204
+ else {
205
+ return StartParticleFxNonLoopedAtCoord(effectName, position.x, position.y, position.z, rotation.x, rotation.y, rotation.z, scale, false, false, false);
206
+ }
207
+ }
208
+ /**
209
+ * Stop a looped particle effect.
210
+ *
211
+ * @param handle - Particle effect handle
212
+ */
213
+ stopParticleEffect(handle) {
214
+ StopParticleFxLooped(handle, false);
215
+ }
216
+ // ─────────────────────────────────────────────────────────────────────────────
217
+ // Texture Dictionary Loading
218
+ // ─────────────────────────────────────────────────────────────────────────────
219
+ /**
220
+ * Request and load a texture dictionary.
221
+ *
222
+ * @param dict - Texture dictionary name
223
+ * @param timeout - Maximum wait time in ms
224
+ * @returns Whether the dictionary was loaded successfully
225
+ */
226
+ async requestTextureDict(dict, timeout = 10000) {
227
+ var _a;
228
+ const key = `texture:${dict}`;
229
+ // Already loaded
230
+ if ((_a = this.loadedAssets.get(key)) === null || _a === void 0 ? void 0 : _a.loaded) {
231
+ return true;
232
+ }
233
+ RequestStreamedTextureDict(dict, true);
234
+ const startTime = GetGameTimer();
235
+ while (!HasStreamedTextureDictLoaded(dict)) {
236
+ if (GetGameTimer() - startTime > timeout) {
237
+ return false;
238
+ }
239
+ await new Promise((r) => setTimeout(r, 0));
240
+ }
241
+ this.loadedAssets.set(key, { type: 'texture', asset: dict, loaded: true });
242
+ return true;
243
+ }
244
+ /**
245
+ * Check if a texture dictionary is loaded.
246
+ *
247
+ * @param dict - Texture dictionary name
248
+ */
249
+ isTextureDictLoaded(dict) {
250
+ return HasStreamedTextureDictLoaded(dict);
251
+ }
252
+ /**
253
+ * Release a loaded texture dictionary.
254
+ *
255
+ * @param dict - Texture dictionary name
256
+ */
257
+ releaseTextureDict(dict) {
258
+ SetStreamedTextureDictAsNoLongerNeeded(dict);
259
+ this.loadedAssets.delete(`texture:${dict}`);
260
+ }
261
+ // ─────────────────────────────────────────────────────────────────────────────
262
+ // Audio Loading
263
+ // ─────────────────────────────────────────────────────────────────────────────
264
+ /**
265
+ * Request and load a script audio bank.
266
+ *
267
+ * @param audioBank - Audio bank name
268
+ * @param networked - Whether the audio should be networked
269
+ * @param timeout - Maximum wait time in ms
270
+ * @returns Whether the audio bank was loaded successfully
271
+ */
272
+ async requestAudioBank(audioBank, networked = false, _timeout = 10000) {
273
+ var _a;
274
+ const key = `audio:${audioBank}`;
275
+ // Already loaded
276
+ if ((_a = this.loadedAssets.get(key)) === null || _a === void 0 ? void 0 : _a.loaded) {
277
+ return true;
278
+ }
279
+ const success = RequestScriptAudioBank(audioBank, networked);
280
+ if (!success)
281
+ return false;
282
+ this.loadedAssets.set(key, { type: 'audio', asset: audioBank, loaded: true });
283
+ return true;
284
+ }
285
+ /**
286
+ * Release a loaded audio bank.
287
+ *
288
+ * @param audioBank - Audio bank name
289
+ */
290
+ releaseAudioBank(audioBank) {
291
+ ReleaseScriptAudioBank();
292
+ this.loadedAssets.delete(`audio:${audioBank}`);
293
+ }
294
+ // ─────────────────────────────────────────────────────────────────────────────
295
+ // Utility Methods
296
+ // ─────────────────────────────────────────────────────────────────────────────
297
+ /**
298
+ * Get all currently loaded assets.
299
+ */
300
+ getLoadedAssets() {
301
+ return Array.from(this.loadedAssets.values());
302
+ }
303
+ /**
304
+ * Release all loaded assets.
305
+ */
306
+ releaseAll() {
307
+ for (const asset of this.loadedAssets.values()) {
308
+ switch (asset.type) {
309
+ case 'model':
310
+ if (asset.hash)
311
+ SetModelAsNoLongerNeeded(asset.hash);
312
+ break;
313
+ case 'animDict':
314
+ RemoveAnimDict(asset.asset);
315
+ break;
316
+ case 'ptfx':
317
+ RemoveNamedPtfxAsset(asset.asset);
318
+ break;
319
+ case 'texture':
320
+ SetStreamedTextureDictAsNoLongerNeeded(asset.asset);
321
+ break;
322
+ case 'audio':
323
+ ReleaseScriptAudioBank();
324
+ break;
325
+ }
326
+ }
327
+ this.loadedAssets.clear();
328
+ }
329
+ /**
330
+ * Get hash key for a string.
331
+ *
332
+ * @param str - String to hash
333
+ */
334
+ getHash(str) {
335
+ return GetHashKey(str);
336
+ }
337
+ };
338
+ exports.StreamingService = StreamingService;
339
+ exports.StreamingService = StreamingService = __decorate([
340
+ (0, tsyringe_1.injectable)()
341
+ ], StreamingService);
@@ -0,0 +1,82 @@
1
+ import type { Vector3 } from '../../utils';
2
+ export interface TextUIOptions {
3
+ /** Font (0-8) */
4
+ font?: number;
5
+ /** Scale (0.0-1.0+) */
6
+ scale?: number;
7
+ /** Color */
8
+ color?: {
9
+ r: number;
10
+ g: number;
11
+ b: number;
12
+ a: number;
13
+ };
14
+ /** Text alignment (0=center, 1=left, 2=right) */
15
+ alignment?: number;
16
+ /** Drop shadow */
17
+ dropShadow?: boolean;
18
+ /** Text outline */
19
+ outline?: boolean;
20
+ /** Word wrap width (0 = no wrap) */
21
+ wrapWidth?: number;
22
+ }
23
+ export interface Text3DOptions extends TextUIOptions {
24
+ /** Whether to draw a background behind text */
25
+ background?: boolean;
26
+ /** Background color */
27
+ backgroundColor?: {
28
+ r: number;
29
+ g: number;
30
+ b: number;
31
+ a: number;
32
+ };
33
+ /** Background padding */
34
+ backgroundPadding?: number;
35
+ }
36
+ /**
37
+ * Service for rendering text UI elements on screen and in 3D world.
38
+ */
39
+ export declare class TextUIService {
40
+ private activeTextUI;
41
+ private tickHandle;
42
+ /**
43
+ * Show persistent text UI at the bottom-right of the screen.
44
+ *
45
+ * @param text - The text to display
46
+ * @param options - Text options
47
+ */
48
+ show(text: string, options?: TextUIOptions): void;
49
+ /**
50
+ * Hide the persistent text UI.
51
+ */
52
+ hide(): void;
53
+ /**
54
+ * Check if text UI is currently visible.
55
+ */
56
+ isVisible(): boolean;
57
+ /**
58
+ * Draw text on screen for one frame.
59
+ * Call this every frame for persistent display.
60
+ *
61
+ * @param text - The text to draw
62
+ * @param x - Screen X position (0.0-1.0)
63
+ * @param y - Screen Y position (0.0-1.0)
64
+ * @param options - Text options
65
+ */
66
+ drawText(text: string, x: number, y: number, options?: TextUIOptions): void;
67
+ /**
68
+ * Draw 3D text in the game world.
69
+ *
70
+ * @param position - World position
71
+ * @param text - The text to draw
72
+ * @param options - Text options
73
+ */
74
+ drawText3D(position: Vector3, text: string, options?: Text3DOptions): void;
75
+ /**
76
+ * Get text width for layout calculations.
77
+ * Note: This is an approximation based on character count and scale.
78
+ */
79
+ getTextWidth(text: string, _font: number, scale: number): number;
80
+ private ensureTickRunning;
81
+ private stopTick;
82
+ }