@alife-sdk/core 0.1.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 (367) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +283 -0
  3. package/dist/ai/DangerManager.d.ts +71 -0
  4. package/dist/ai/DangerManager.d.ts.map +1 -0
  5. package/dist/ai/DangerManager.js +176 -0
  6. package/dist/ai/DangerManager.js.map +1 -0
  7. package/dist/ai/GOAPAction.d.ts +45 -0
  8. package/dist/ai/GOAPAction.d.ts.map +1 -0
  9. package/dist/ai/GOAPAction.js +32 -0
  10. package/dist/ai/GOAPAction.js.map +1 -0
  11. package/dist/ai/GOAPPlanner.d.ts +80 -0
  12. package/dist/ai/GOAPPlanner.d.ts.map +1 -0
  13. package/dist/ai/GOAPPlanner.js +259 -0
  14. package/dist/ai/GOAPPlanner.js.map +1 -0
  15. package/dist/ai/IStateHandler.d.ts +8 -0
  16. package/dist/ai/IStateHandler.d.ts.map +1 -0
  17. package/dist/ai/IStateHandler.js +8 -0
  18. package/dist/ai/IStateHandler.js.map +1 -0
  19. package/dist/ai/MemorySystem.d.ts +94 -0
  20. package/dist/ai/MemorySystem.d.ts.map +1 -0
  21. package/dist/ai/MemorySystem.js +207 -0
  22. package/dist/ai/MemorySystem.js.map +1 -0
  23. package/dist/ai/StateMachine.d.ts +49 -0
  24. package/dist/ai/StateMachine.d.ts.map +1 -0
  25. package/dist/ai/StateMachine.js +83 -0
  26. package/dist/ai/StateMachine.js.map +1 -0
  27. package/dist/ai/WorldState.d.ts +48 -0
  28. package/dist/ai/WorldState.d.ts.map +1 -0
  29. package/dist/ai/WorldState.js +93 -0
  30. package/dist/ai/WorldState.js.map +1 -0
  31. package/dist/ai/index.d.ts +10 -0
  32. package/dist/ai/index.d.ts.map +1 -0
  33. package/dist/ai/index.js +8 -0
  34. package/dist/ai/index.js.map +1 -0
  35. package/dist/combat/DamageInstance.d.ts +26 -0
  36. package/dist/combat/DamageInstance.d.ts.map +1 -0
  37. package/dist/combat/DamageInstance.js +25 -0
  38. package/dist/combat/DamageInstance.js.map +1 -0
  39. package/dist/combat/MoraleStateMachine.d.ts +53 -0
  40. package/dist/combat/MoraleStateMachine.d.ts.map +1 -0
  41. package/dist/combat/MoraleStateMachine.js +84 -0
  42. package/dist/combat/MoraleStateMachine.js.map +1 -0
  43. package/dist/combat/index.d.ts +5 -0
  44. package/dist/combat/index.d.ts.map +1 -0
  45. package/dist/combat/index.js +3 -0
  46. package/dist/combat/index.js.map +1 -0
  47. package/dist/config/ALifeConfig.d.ts +131 -0
  48. package/dist/config/ALifeConfig.d.ts.map +1 -0
  49. package/dist/config/ALifeConfig.js +82 -0
  50. package/dist/config/ALifeConfig.js.map +1 -0
  51. package/dist/config/index.d.ts +3 -0
  52. package/dist/config/index.d.ts.map +1 -0
  53. package/dist/config/index.js +2 -0
  54. package/dist/config/index.js.map +1 -0
  55. package/dist/core/ALifeKernel.d.ts +163 -0
  56. package/dist/core/ALifeKernel.d.ts.map +1 -0
  57. package/dist/core/ALifeKernel.js +542 -0
  58. package/dist/core/ALifeKernel.js.map +1 -0
  59. package/dist/core/Clock.d.ts +123 -0
  60. package/dist/core/Clock.d.ts.map +1 -0
  61. package/dist/core/Clock.js +228 -0
  62. package/dist/core/Clock.js.map +1 -0
  63. package/dist/core/DevToolsInspector.d.ts +53 -0
  64. package/dist/core/DevToolsInspector.d.ts.map +1 -0
  65. package/dist/core/DevToolsInspector.js +8 -0
  66. package/dist/core/DevToolsInspector.js.map +1 -0
  67. package/dist/core/Diagnostics.d.ts +64 -0
  68. package/dist/core/Diagnostics.d.ts.map +1 -0
  69. package/dist/core/Diagnostics.js +107 -0
  70. package/dist/core/Diagnostics.js.map +1 -0
  71. package/dist/core/ISerializable.d.ts +12 -0
  72. package/dist/core/ISerializable.d.ts.map +1 -0
  73. package/dist/core/ISerializable.js +2 -0
  74. package/dist/core/ISerializable.js.map +1 -0
  75. package/dist/core/PortRegistry.d.ts +57 -0
  76. package/dist/core/PortRegistry.d.ts.map +1 -0
  77. package/dist/core/PortRegistry.js +72 -0
  78. package/dist/core/PortRegistry.js.map +1 -0
  79. package/dist/core/PortTokens.d.ts +39 -0
  80. package/dist/core/PortTokens.d.ts.map +1 -0
  81. package/dist/core/PortTokens.js +39 -0
  82. package/dist/core/PortTokens.js.map +1 -0
  83. package/dist/core/SpatialGrid.d.ts +114 -0
  84. package/dist/core/SpatialGrid.d.ts.map +1 -0
  85. package/dist/core/SpatialGrid.js +258 -0
  86. package/dist/core/SpatialGrid.js.map +1 -0
  87. package/dist/core/Vec2.d.ts +34 -0
  88. package/dist/core/Vec2.d.ts.map +1 -0
  89. package/dist/core/Vec2.js +52 -0
  90. package/dist/core/Vec2.js.map +1 -0
  91. package/dist/core/math/CatmullRom.d.ts +20 -0
  92. package/dist/core/math/CatmullRom.d.ts.map +1 -0
  93. package/dist/core/math/CatmullRom.js +37 -0
  94. package/dist/core/math/CatmullRom.js.map +1 -0
  95. package/dist/core/math/index.d.ts +6 -0
  96. package/dist/core/math/index.d.ts.map +1 -0
  97. package/dist/core/math/index.js +5 -0
  98. package/dist/core/math/index.js.map +1 -0
  99. package/dist/core/math/intersects.d.ts +32 -0
  100. package/dist/core/math/intersects.d.ts.map +1 -0
  101. package/dist/core/math/intersects.js +92 -0
  102. package/dist/core/math/intersects.js.map +1 -0
  103. package/dist/core/math/utils.d.ts +5 -0
  104. package/dist/core/math/utils.d.ts.map +1 -0
  105. package/dist/core/math/utils.js +13 -0
  106. package/dist/core/math/utils.js.map +1 -0
  107. package/dist/entity/IComponent.d.ts +17 -0
  108. package/dist/entity/IComponent.d.ts.map +1 -0
  109. package/dist/entity/IComponent.js +2 -0
  110. package/dist/entity/IComponent.js.map +1 -0
  111. package/dist/entity/IEntity.d.ts +33 -0
  112. package/dist/entity/IEntity.d.ts.map +1 -0
  113. package/dist/entity/IEntity.js +2 -0
  114. package/dist/entity/IEntity.js.map +1 -0
  115. package/dist/entity/index.d.ts +3 -0
  116. package/dist/entity/index.d.ts.map +1 -0
  117. package/dist/entity/index.js +2 -0
  118. package/dist/entity/index.js.map +1 -0
  119. package/dist/events/ALifeEvents.d.ts +241 -0
  120. package/dist/events/ALifeEvents.d.ts.map +1 -0
  121. package/dist/events/ALifeEvents.js +53 -0
  122. package/dist/events/ALifeEvents.js.map +1 -0
  123. package/dist/events/EventBus.d.ts +52 -0
  124. package/dist/events/EventBus.d.ts.map +1 -0
  125. package/dist/events/EventBus.js +129 -0
  126. package/dist/events/EventBus.js.map +1 -0
  127. package/dist/events/index.d.ts +4 -0
  128. package/dist/events/index.d.ts.map +1 -0
  129. package/dist/events/index.js +4 -0
  130. package/dist/events/index.js.map +1 -0
  131. package/dist/faction/Faction.d.ts +53 -0
  132. package/dist/faction/Faction.d.ts.map +1 -0
  133. package/dist/faction/Faction.js +101 -0
  134. package/dist/faction/Faction.js.map +1 -0
  135. package/dist/faction/FactionBuilder.d.ts +32 -0
  136. package/dist/faction/FactionBuilder.d.ts.map +1 -0
  137. package/dist/faction/FactionBuilder.js +80 -0
  138. package/dist/faction/FactionBuilder.js.map +1 -0
  139. package/dist/faction/ImmunityProfile.d.ts +24 -0
  140. package/dist/faction/ImmunityProfile.d.ts.map +1 -0
  141. package/dist/faction/ImmunityProfile.js +43 -0
  142. package/dist/faction/ImmunityProfile.js.map +1 -0
  143. package/dist/faction/index.d.ts +6 -0
  144. package/dist/faction/index.d.ts.map +1 -0
  145. package/dist/faction/index.js +5 -0
  146. package/dist/faction/index.js.map +1 -0
  147. package/dist/index.d.ts +32 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +34 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/logger/ILogEntry.d.ts +16 -0
  152. package/dist/logger/ILogEntry.d.ts.map +1 -0
  153. package/dist/logger/ILogEntry.js +2 -0
  154. package/dist/logger/ILogEntry.js.map +1 -0
  155. package/dist/logger/LogChannel.d.ts +27 -0
  156. package/dist/logger/LogChannel.d.ts.map +1 -0
  157. package/dist/logger/LogChannel.js +26 -0
  158. package/dist/logger/LogChannel.js.map +1 -0
  159. package/dist/logger/LogLevel.d.ts +10 -0
  160. package/dist/logger/LogLevel.d.ts.map +1 -0
  161. package/dist/logger/LogLevel.js +9 -0
  162. package/dist/logger/LogLevel.js.map +1 -0
  163. package/dist/logger/Logger.d.ts +56 -0
  164. package/dist/logger/Logger.d.ts.map +1 -0
  165. package/dist/logger/Logger.js +106 -0
  166. package/dist/logger/Logger.js.map +1 -0
  167. package/dist/logger/index.d.ts +8 -0
  168. package/dist/logger/index.d.ts.map +1 -0
  169. package/dist/logger/index.js +5 -0
  170. package/dist/logger/index.js.map +1 -0
  171. package/dist/movement/MonsterHome.d.ts +49 -0
  172. package/dist/movement/MonsterHome.d.ts.map +1 -0
  173. package/dist/movement/MonsterHome.js +75 -0
  174. package/dist/movement/MonsterHome.js.map +1 -0
  175. package/dist/movement/PatrolRoute.d.ts +99 -0
  176. package/dist/movement/PatrolRoute.d.ts.map +1 -0
  177. package/dist/movement/PatrolRoute.js +141 -0
  178. package/dist/movement/PatrolRoute.js.map +1 -0
  179. package/dist/movement/index.d.ts +5 -0
  180. package/dist/movement/index.d.ts.map +1 -0
  181. package/dist/movement/index.js +4 -0
  182. package/dist/movement/index.js.map +1 -0
  183. package/dist/navigation/LevelGraph.d.ts +78 -0
  184. package/dist/navigation/LevelGraph.d.ts.map +1 -0
  185. package/dist/navigation/LevelGraph.js +268 -0
  186. package/dist/navigation/LevelGraph.js.map +1 -0
  187. package/dist/navigation/NPCGraphMover.d.ts +87 -0
  188. package/dist/navigation/NPCGraphMover.d.ts.map +1 -0
  189. package/dist/navigation/NPCGraphMover.js +193 -0
  190. package/dist/navigation/NPCGraphMover.js.map +1 -0
  191. package/dist/navigation/index.d.ts +5 -0
  192. package/dist/navigation/index.d.ts.map +1 -0
  193. package/dist/navigation/index.js +4 -0
  194. package/dist/navigation/index.js.map +1 -0
  195. package/dist/plugins/AnomaliesPlugin.d.ts +26 -0
  196. package/dist/plugins/AnomaliesPlugin.d.ts.map +1 -0
  197. package/dist/plugins/AnomaliesPlugin.js +30 -0
  198. package/dist/plugins/AnomaliesPlugin.js.map +1 -0
  199. package/dist/plugins/CombatSchemaPlugin.d.ts +35 -0
  200. package/dist/plugins/CombatSchemaPlugin.d.ts.map +1 -0
  201. package/dist/plugins/CombatSchemaPlugin.js +44 -0
  202. package/dist/plugins/CombatSchemaPlugin.js.map +1 -0
  203. package/dist/plugins/FactionsPlugin.d.ts +26 -0
  204. package/dist/plugins/FactionsPlugin.d.ts.map +1 -0
  205. package/dist/plugins/FactionsPlugin.js +30 -0
  206. package/dist/plugins/FactionsPlugin.js.map +1 -0
  207. package/dist/plugins/IALifePlugin.d.ts +91 -0
  208. package/dist/plugins/IALifePlugin.d.ts.map +1 -0
  209. package/dist/plugins/IALifePlugin.js +2 -0
  210. package/dist/plugins/IALifePlugin.js.map +1 -0
  211. package/dist/plugins/MonstersPlugin.d.ts +26 -0
  212. package/dist/plugins/MonstersPlugin.d.ts.map +1 -0
  213. package/dist/plugins/MonstersPlugin.js +30 -0
  214. package/dist/plugins/MonstersPlugin.js.map +1 -0
  215. package/dist/plugins/NPCTypesPlugin.d.ts +26 -0
  216. package/dist/plugins/NPCTypesPlugin.d.ts.map +1 -0
  217. package/dist/plugins/NPCTypesPlugin.js +30 -0
  218. package/dist/plugins/NPCTypesPlugin.js.map +1 -0
  219. package/dist/plugins/PluginToken.d.ts +26 -0
  220. package/dist/plugins/PluginToken.d.ts.map +1 -0
  221. package/dist/plugins/PluginToken.js +22 -0
  222. package/dist/plugins/PluginToken.js.map +1 -0
  223. package/dist/plugins/SocialPlugin.d.ts +14 -0
  224. package/dist/plugins/SocialPlugin.d.ts.map +1 -0
  225. package/dist/plugins/SocialPlugin.js +16 -0
  226. package/dist/plugins/SocialPlugin.js.map +1 -0
  227. package/dist/plugins/SpawnPlugin.d.ts +15 -0
  228. package/dist/plugins/SpawnPlugin.d.ts.map +1 -0
  229. package/dist/plugins/SpawnPlugin.js +26 -0
  230. package/dist/plugins/SpawnPlugin.js.map +1 -0
  231. package/dist/plugins/SquadPlugin.d.ts +14 -0
  232. package/dist/plugins/SquadPlugin.d.ts.map +1 -0
  233. package/dist/plugins/SquadPlugin.js +16 -0
  234. package/dist/plugins/SquadPlugin.js.map +1 -0
  235. package/dist/plugins/SurgePlugin.d.ts +20 -0
  236. package/dist/plugins/SurgePlugin.d.ts.map +1 -0
  237. package/dist/plugins/SurgePlugin.js +22 -0
  238. package/dist/plugins/SurgePlugin.js.map +1 -0
  239. package/dist/plugins/TradePlugin.d.ts +16 -0
  240. package/dist/plugins/TradePlugin.d.ts.map +1 -0
  241. package/dist/plugins/TradePlugin.js +18 -0
  242. package/dist/plugins/TradePlugin.js.map +1 -0
  243. package/dist/plugins/index.d.ts +11 -0
  244. package/dist/plugins/index.d.ts.map +1 -0
  245. package/dist/plugins/index.js +10 -0
  246. package/dist/plugins/index.js.map +1 -0
  247. package/dist/plugins/pluginNames.d.ts +37 -0
  248. package/dist/plugins/pluginNames.d.ts.map +1 -0
  249. package/dist/plugins/pluginNames.js +28 -0
  250. package/dist/plugins/pluginNames.js.map +1 -0
  251. package/dist/plugins/presets.d.ts +31 -0
  252. package/dist/plugins/presets.d.ts.map +1 -0
  253. package/dist/plugins/presets.js +50 -0
  254. package/dist/plugins/presets.js.map +1 -0
  255. package/dist/ports/IDataLoader.d.ts +38 -0
  256. package/dist/ports/IDataLoader.d.ts.map +1 -0
  257. package/dist/ports/IDataLoader.js +12 -0
  258. package/dist/ports/IDataLoader.js.map +1 -0
  259. package/dist/ports/IEntityAdapter.d.ts +73 -0
  260. package/dist/ports/IEntityAdapter.d.ts.map +1 -0
  261. package/dist/ports/IEntityAdapter.js +36 -0
  262. package/dist/ports/IEntityAdapter.js.map +1 -0
  263. package/dist/ports/IEntityFactory.d.ts +66 -0
  264. package/dist/ports/IEntityFactory.d.ts.map +1 -0
  265. package/dist/ports/IEntityFactory.js +21 -0
  266. package/dist/ports/IEntityFactory.js.map +1 -0
  267. package/dist/ports/ILogger.d.ts +29 -0
  268. package/dist/ports/ILogger.d.ts.map +1 -0
  269. package/dist/ports/ILogger.js +2 -0
  270. package/dist/ports/ILogger.js.map +1 -0
  271. package/dist/ports/IPlayerPositionProvider.d.ts +20 -0
  272. package/dist/ports/IPlayerPositionProvider.d.ts.map +1 -0
  273. package/dist/ports/IPlayerPositionProvider.js +11 -0
  274. package/dist/ports/IPlayerPositionProvider.js.map +1 -0
  275. package/dist/ports/IRandom.d.ts +25 -0
  276. package/dist/ports/IRandom.d.ts.map +1 -0
  277. package/dist/ports/IRandom.js +39 -0
  278. package/dist/ports/IRandom.js.map +1 -0
  279. package/dist/ports/IRuntimeClock.d.ts +18 -0
  280. package/dist/ports/IRuntimeClock.d.ts.map +1 -0
  281. package/dist/ports/IRuntimeClock.js +2 -0
  282. package/dist/ports/IRuntimeClock.js.map +1 -0
  283. package/dist/ports/index.d.ts +12 -0
  284. package/dist/ports/index.d.ts.map +1 -0
  285. package/dist/ports/index.js +5 -0
  286. package/dist/ports/index.js.map +1 -0
  287. package/dist/registry/AIStateRegistry.d.ts +42 -0
  288. package/dist/registry/AIStateRegistry.d.ts.map +1 -0
  289. package/dist/registry/AIStateRegistry.js +27 -0
  290. package/dist/registry/AIStateRegistry.js.map +1 -0
  291. package/dist/registry/AnomalyTypeRegistry.d.ts +21 -0
  292. package/dist/registry/AnomalyTypeRegistry.d.ts.map +1 -0
  293. package/dist/registry/AnomalyTypeRegistry.js +20 -0
  294. package/dist/registry/AnomalyTypeRegistry.js.map +1 -0
  295. package/dist/registry/BehaviorSchemeRegistry.d.ts +21 -0
  296. package/dist/registry/BehaviorSchemeRegistry.d.ts.map +1 -0
  297. package/dist/registry/BehaviorSchemeRegistry.js +24 -0
  298. package/dist/registry/BehaviorSchemeRegistry.js.map +1 -0
  299. package/dist/registry/DamageTypeRegistry.d.ts +17 -0
  300. package/dist/registry/DamageTypeRegistry.d.ts.map +1 -0
  301. package/dist/registry/DamageTypeRegistry.js +24 -0
  302. package/dist/registry/DamageTypeRegistry.js.map +1 -0
  303. package/dist/registry/FactionRegistry.d.ts +41 -0
  304. package/dist/registry/FactionRegistry.d.ts.map +1 -0
  305. package/dist/registry/FactionRegistry.js +29 -0
  306. package/dist/registry/FactionRegistry.js.map +1 -0
  307. package/dist/registry/MonsterRegistry.d.ts +44 -0
  308. package/dist/registry/MonsterRegistry.d.ts.map +1 -0
  309. package/dist/registry/MonsterRegistry.js +43 -0
  310. package/dist/registry/MonsterRegistry.js.map +1 -0
  311. package/dist/registry/NPCTypeRegistry.d.ts +34 -0
  312. package/dist/registry/NPCTypeRegistry.d.ts.map +1 -0
  313. package/dist/registry/NPCTypeRegistry.js +20 -0
  314. package/dist/registry/NPCTypeRegistry.js.map +1 -0
  315. package/dist/registry/Registry.d.ts +44 -0
  316. package/dist/registry/Registry.d.ts.map +1 -0
  317. package/dist/registry/Registry.js +80 -0
  318. package/dist/registry/Registry.js.map +1 -0
  319. package/dist/registry/TaskTypeRegistry.d.ts +17 -0
  320. package/dist/registry/TaskTypeRegistry.d.ts.map +1 -0
  321. package/dist/registry/TaskTypeRegistry.js +16 -0
  322. package/dist/registry/TaskTypeRegistry.js.map +1 -0
  323. package/dist/registry/index.d.ts +19 -0
  324. package/dist/registry/index.d.ts.map +1 -0
  325. package/dist/registry/index.js +11 -0
  326. package/dist/registry/index.js.map +1 -0
  327. package/dist/schema/index.d.ts +3 -0
  328. package/dist/schema/index.d.ts.map +1 -0
  329. package/dist/schema/index.js +3 -0
  330. package/dist/schema/index.js.map +1 -0
  331. package/dist/schema/validators.d.ts +32 -0
  332. package/dist/schema/validators.d.ts.map +1 -0
  333. package/dist/schema/validators.js +249 -0
  334. package/dist/schema/validators.js.map +1 -0
  335. package/dist/spawn/SpawnRegistry.d.ts +48 -0
  336. package/dist/spawn/SpawnRegistry.d.ts.map +1 -0
  337. package/dist/spawn/SpawnRegistry.js +141 -0
  338. package/dist/spawn/SpawnRegistry.js.map +1 -0
  339. package/dist/spawn/index.d.ts +3 -0
  340. package/dist/spawn/index.d.ts.map +1 -0
  341. package/dist/spawn/index.js +3 -0
  342. package/dist/spawn/index.js.map +1 -0
  343. package/dist/terrain/SmartTerrain.d.ts +119 -0
  344. package/dist/terrain/SmartTerrain.d.ts.map +1 -0
  345. package/dist/terrain/SmartTerrain.js +124 -0
  346. package/dist/terrain/SmartTerrain.js.map +1 -0
  347. package/dist/terrain/TerrainBuilder.d.ts +44 -0
  348. package/dist/terrain/TerrainBuilder.d.ts.map +1 -0
  349. package/dist/terrain/TerrainBuilder.js +112 -0
  350. package/dist/terrain/TerrainBuilder.js.map +1 -0
  351. package/dist/terrain/Zone.d.ts +25 -0
  352. package/dist/terrain/Zone.d.ts.map +1 -0
  353. package/dist/terrain/Zone.js +29 -0
  354. package/dist/terrain/Zone.js.map +1 -0
  355. package/dist/terrain/index.d.ts +6 -0
  356. package/dist/terrain/index.d.ts.map +1 -0
  357. package/dist/terrain/index.js +5 -0
  358. package/dist/terrain/index.js.map +1 -0
  359. package/dist/time/TimeManager.d.ts +21 -0
  360. package/dist/time/TimeManager.d.ts.map +1 -0
  361. package/dist/time/TimeManager.js +41 -0
  362. package/dist/time/TimeManager.js.map +1 -0
  363. package/dist/time/index.d.ts +3 -0
  364. package/dist/time/index.d.ts.map +1 -0
  365. package/dist/time/index.js +2 -0
  366. package/dist/time/index.js.map +1 -0
  367. package/package.json +119 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnomalyTypeRegistry.js","sourceRoot":"","sources":["../../src/registry/AnomalyTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkBtC,SAAS,QAAQ,CAAC,CAAyB;IACzC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClG,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wGAAwG;AACxG,MAAM,OAAO,mBAAoB,SAAQ,QAAwC;IAC/E;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import { Registry } from './Registry';
2
+ /** Definition of an NPC behavior scheme used by the terrain behavior engine. */
3
+ export interface IBehaviorSchemeDefinition {
4
+ /** Human-readable display name. */
5
+ readonly name: string;
6
+ /** True if the NPC stays at a fixed position (e.g. camp, sleep). */
7
+ readonly isStationary: boolean;
8
+ /** True if the scheme needs a patrol route to operate. */
9
+ readonly requiresRoute: boolean;
10
+ /** Restrict to nighttime hours only. Cannot combine with dayOnly. */
11
+ readonly nightOnly: boolean;
12
+ /** Restrict to daytime hours only. Cannot combine with nightOnly. */
13
+ readonly dayOnly: boolean;
14
+ }
15
+ /** Registry of behavior schemes. Validates mutual exclusion of nightOnly/dayOnly. Call registerDefaults() for the 6 built-in schemes. */
16
+ export declare class BehaviorSchemeRegistry extends Registry<string, IBehaviorSchemeDefinition> {
17
+ constructor();
18
+ /** Register the 6 built-in behavior schemes (guard, patrol, camp, sleep, camper, wander). Returns `this` for chaining. */
19
+ registerDefaults(): this;
20
+ }
21
+ //# sourceMappingURL=BehaviorSchemeRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BehaviorSchemeRegistry.d.ts","sourceRoot":"","sources":["../../src/registry/BehaviorSchemeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,gFAAgF;AAChF,MAAM,WAAW,yBAAyB;IACxC,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAQD,yIAAyI;AACzI,qBAAa,sBAAuB,SAAQ,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;;IAKrF,0HAA0H;IAC1H,gBAAgB,IAAI,IAAI;CASzB"}
@@ -0,0 +1,24 @@
1
+ import { Registry } from './Registry';
2
+ function validate(c) {
3
+ const errors = [];
4
+ if (c.nightOnly && c.dayOnly)
5
+ errors.push('cannot be both nightOnly and dayOnly');
6
+ return errors;
7
+ }
8
+ /** Registry of behavior schemes. Validates mutual exclusion of nightOnly/dayOnly. Call registerDefaults() for the 6 built-in schemes. */
9
+ export class BehaviorSchemeRegistry extends Registry {
10
+ constructor() {
11
+ super({ name: 'BehaviorSchemeRegistry', validate });
12
+ }
13
+ /** Register the 6 built-in behavior schemes (guard, patrol, camp, sleep, camper, wander). Returns `this` for chaining. */
14
+ registerDefaults() {
15
+ return this
16
+ .register('guard', { name: 'Guard', isStationary: false, requiresRoute: false, nightOnly: false, dayOnly: false })
17
+ .register('patrol', { name: 'Patrol', isStationary: false, requiresRoute: true, nightOnly: false, dayOnly: false })
18
+ .register('camp', { name: 'Camp', isStationary: true, requiresRoute: false, nightOnly: false, dayOnly: false })
19
+ .register('sleep', { name: 'Sleep', isStationary: true, requiresRoute: false, nightOnly: true, dayOnly: false })
20
+ .register('camper', { name: 'Camper', isStationary: true, requiresRoute: false, nightOnly: false, dayOnly: false })
21
+ .register('wander', { name: 'Wander', isStationary: false, requiresRoute: false, nightOnly: false, dayOnly: false });
22
+ }
23
+ }
24
+ //# sourceMappingURL=BehaviorSchemeRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BehaviorSchemeRegistry.js","sourceRoot":"","sources":["../../src/registry/BehaviorSchemeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAgBtC,SAAS,QAAQ,CAAC,CAA4B;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,yIAAyI;AACzI,MAAM,OAAO,sBAAuB,SAAQ,QAA2C;IACrF;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,0HAA0H;IAC1H,gBAAgB;QACd,OAAO,IAAI;aACR,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;aACjH,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;aAClH,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;aAC9G,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;aAC/G,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;aAClH,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACzH,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import { Registry } from './Registry';
2
+ /** Definition of a damage type (e.g. 'physical', 'fire', 'psi'). */
3
+ export interface IDamageTypeDefinition {
4
+ /** Human-readable display name. */
5
+ readonly name: string;
6
+ /** Base resistance applied when a faction has no explicit override [0, 1]. */
7
+ readonly defaultImmunity: number;
8
+ /** Morale delta applied when an NPC takes damage of this type. Negative = demoralising. */
9
+ readonly moraleImpact: number;
10
+ }
11
+ /** Registry of damage types. Validates defaultImmunity [0, 1]. Call registerDefaults() for the standard 5 types. */
12
+ export declare class DamageTypeRegistry extends Registry<string, IDamageTypeDefinition> {
13
+ constructor();
14
+ /** Register the 5 built-in damage types (physical, fire, radiation, chemical, psi). Returns `this` for chaining. */
15
+ registerDefaults(): this;
16
+ }
17
+ //# sourceMappingURL=DamageTypeRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DamageTypeRegistry.d.ts","sourceRoot":"","sources":["../../src/registry/DamageTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,oEAAoE;AACpE,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,2FAA2F;IAC3F,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAUD,oHAAoH;AACpH,qBAAa,kBAAmB,SAAQ,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;;IAK7E,oHAAoH;IACpH,gBAAgB,IAAI,IAAI;CAQzB"}
@@ -0,0 +1,24 @@
1
+ import { Registry } from './Registry';
2
+ function validate(c) {
3
+ const errors = [];
4
+ if (c.defaultImmunity < 0 || c.defaultImmunity > 1) {
5
+ errors.push('defaultImmunity must be in [0, 1]');
6
+ }
7
+ return errors;
8
+ }
9
+ /** Registry of damage types. Validates defaultImmunity [0, 1]. Call registerDefaults() for the standard 5 types. */
10
+ export class DamageTypeRegistry extends Registry {
11
+ constructor() {
12
+ super({ name: 'DamageTypeRegistry', validate });
13
+ }
14
+ /** Register the 5 built-in damage types (physical, fire, radiation, chemical, psi). Returns `this` for chaining. */
15
+ registerDefaults() {
16
+ return this
17
+ .register('physical', { name: 'Physical', defaultImmunity: 0, moraleImpact: -0.15 })
18
+ .register('fire', { name: 'Fire', defaultImmunity: 0, moraleImpact: -0.2 })
19
+ .register('radiation', { name: 'Radiation', defaultImmunity: 0, moraleImpact: -0.1 })
20
+ .register('chemical', { name: 'Chemical', defaultImmunity: 0, moraleImpact: -0.1 })
21
+ .register('psi', { name: 'PSI', defaultImmunity: 0, moraleImpact: -0.25 });
22
+ }
23
+ }
24
+ //# sourceMappingURL=DamageTypeRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DamageTypeRegistry.js","sourceRoot":"","sources":["../../src/registry/DamageTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAYtC,SAAS,QAAQ,CAAC,CAAwB;IACxC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,oHAAoH;AACpH,MAAM,OAAO,kBAAmB,SAAQ,QAAuC;IAC7E;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,oHAAoH;IACpH,gBAAgB;QACd,OAAO,IAAI;aACR,QAAQ,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC;aACnF,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC;aAC1E,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC;aACpF,QAAQ,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC;aAClF,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ import { Registry } from './Registry';
2
+ /** Loadout preferences that influence offline weapon/armor selection for faction NPCs. */
3
+ export interface IEquipmentPreference {
4
+ /** Preferred weapon type string (e.g. 'rifle', 'shotgun'). */
5
+ readonly preferredWeapon: string;
6
+ /** Preferred armor tier string. */
7
+ readonly preferredArmor: string;
8
+ /** Tendency toward offensive behavior [0, 1]. Higher = more likely to PATROL/ATTACK. */
9
+ readonly aggressiveness: number;
10
+ /** Tendency toward defensive behavior [0, 1]. Higher = more likely to CAMP/GUARD. */
11
+ readonly cautiousness: number;
12
+ }
13
+ /** Controls how the spawn system maintains faction population balance. */
14
+ export interface IFactionSpawnRules {
15
+ /** Target fraction of total NPC population for this faction [0, 1]. */
16
+ readonly targetRatio: number;
17
+ /** Allowed deviation from targetRatio before the balancer intervenes [0, 1]. */
18
+ readonly balanceTolerance: number;
19
+ }
20
+ /** Complete definition of a faction for registration in FactionRegistry. */
21
+ export interface IFactionDefinition {
22
+ /** Human-readable display name. */
23
+ readonly name: string;
24
+ /** Immutable starting relations to other factions. Key = factionId, value = [-100, 100]. */
25
+ readonly baseRelations: Readonly<Record<string, number>>;
26
+ /** Base resistance per damage type. Key = damageTypeId, value = [0, 1] (0 = none, 1 = immune). */
27
+ readonly immunities: Readonly<Record<string, number>>;
28
+ /** Default loadout preferences for NPCs of this faction. */
29
+ readonly defaultEquipment: Partial<IEquipmentPreference>;
30
+ /** Population balance parameters. */
31
+ readonly spawnRules: IFactionSpawnRules;
32
+ /** Arbitrary extension data (e.g. UI color, description). */
33
+ readonly metadata?: Readonly<Record<string, unknown>>;
34
+ }
35
+ /** Type-safe registry of faction definitions. Validates relations [-100, 100] and immunities [0, 1] on register(). */
36
+ export declare class FactionRegistry extends Registry<string, IFactionDefinition> {
37
+ constructor();
38
+ /** @override Adds self-relation guard on top of base validation. */
39
+ register(id: string, config: IFactionDefinition): this;
40
+ }
41
+ //# sourceMappingURL=FactionRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FactionRegistry.d.ts","sourceRoot":"","sources":["../../src/registry/FactionRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,0FAA0F;AAC1F,MAAM,WAAW,oBAAoB;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,mCAAmC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,wFAAwF;IACxF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,qFAAqF;IACrF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,kGAAkG;IAClG,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,4DAA4D;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzD,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAcD,sHAAsH;AACtH,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;;IAKvE,oEAAoE;IAC3D,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI;CAMhE"}
@@ -0,0 +1,29 @@
1
+ import { Registry } from './Registry';
2
+ function validate(c) {
3
+ const errors = [];
4
+ if (!c.name)
5
+ errors.push('name must not be empty');
6
+ for (const [id, v] of Object.entries(c.baseRelations)) {
7
+ if (v < -100 || v > 100)
8
+ errors.push(`relation "${id}" must be in [-100, 100]`);
9
+ }
10
+ for (const [id, v] of Object.entries(c.immunities)) {
11
+ if (v < 0 || v > 1)
12
+ errors.push(`immunity "${id}" must be in [0, 1]`);
13
+ }
14
+ return errors;
15
+ }
16
+ /** Type-safe registry of faction definitions. Validates relations [-100, 100] and immunities [0, 1] on register(). */
17
+ export class FactionRegistry extends Registry {
18
+ constructor() {
19
+ super({ name: 'FactionRegistry', validate });
20
+ }
21
+ /** @override Adds self-relation guard on top of base validation. */
22
+ register(id, config) {
23
+ if (id in config.baseRelations) {
24
+ throw new Error(`[FactionRegistry] Faction "${id}" cannot define a relation to itself`);
25
+ }
26
+ return super.register(id, config);
27
+ }
28
+ }
29
+ //# sourceMappingURL=FactionRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FactionRegistry.js","sourceRoot":"","sources":["../../src/registry/FactionRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAsCtC,SAAS,QAAQ,CAAC,CAAqB;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,CAAC,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACnD,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG;YAAE,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,0BAA0B,CAAC,CAAC;IAClF,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sHAAsH;AACtH,MAAM,OAAO,eAAgB,SAAQ,QAAoC;IACvE;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,oEAAoE;IAC3D,QAAQ,CAAC,EAAU,EAAE,MAA0B;QACtD,IAAI,EAAE,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,sCAAsC,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ import { Registry } from './Registry';
2
+ /** Blueprint for a monster archetype (e.g. 'dog', 'bloodsucker', 'controller'). */
3
+ export interface IMonsterDefinition {
4
+ /** Human-readable display name. */
5
+ readonly name: string;
6
+ /** Base hit points (> 0). */
7
+ readonly hp: number;
8
+ /** Movement speed (px/s, > 0). */
9
+ readonly speed: number;
10
+ /** Melee damage per hit (> 0). */
11
+ readonly damage: number;
12
+ /** Melee attack range (px, > 0). */
13
+ readonly attackRange: number;
14
+ /** Sensory detection radius (px, > 0). */
15
+ readonly detectionRange: number;
16
+ /** Field of view (degrees, (0, 360]). */
17
+ readonly fov: number;
18
+ /** Pack spawn size as [min, max] tuple. min ≥ 1, min ≤ max. */
19
+ readonly packSize: readonly [number, number];
20
+ /** Ability IDs this monster can use (e.g. 'charge', 'stalk', 'leap', 'psi_attack'). */
21
+ readonly abilities: readonly string[];
22
+ /** Three-radius lair system (px). Must satisfy: inner < patrol < outer. */
23
+ readonly lair: {
24
+ readonly inner: number;
25
+ readonly patrol: number;
26
+ readonly outer: number;
27
+ };
28
+ /** Threat tier (1–5). Affects brain decisions and terrain scoring. */
29
+ readonly rank: number;
30
+ /** Optional faction override. Defaults to 'monster' if omitted. */
31
+ readonly faction?: string;
32
+ }
33
+ /** Configuration for MonsterRegistry rank validation bounds. */
34
+ export interface IMonsterRegistryConfig {
35
+ /** Minimum allowed rank value. Default: 1. */
36
+ readonly rankMin?: number;
37
+ /** Maximum allowed rank value. Default: 5. */
38
+ readonly rankMax?: number;
39
+ }
40
+ /** Type-safe registry of monster definitions. Validates lair radius ordering, pack size, and rank bounds. */
41
+ export declare class MonsterRegistry extends Registry<string, IMonsterDefinition> {
42
+ constructor(config?: IMonsterRegistryConfig);
43
+ }
44
+ //# sourceMappingURL=MonsterRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonsterRegistry.d.ts","sourceRoot":"","sources":["../../src/registry/MonsterRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,yCAAyC;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,uFAAuF;IACvF,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,gEAAgE;AAChE,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAuBD,6GAA6G;AAC7G,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;gBAC3D,MAAM,CAAC,EAAE,sBAAsB;CAQ5C"}
@@ -0,0 +1,43 @@
1
+ import { Registry } from './Registry';
2
+ const DEFAULT_RANK_MIN = 1;
3
+ const DEFAULT_RANK_MAX = 5;
4
+ function createValidator(rankMin, rankMax) {
5
+ return (c) => {
6
+ const errors = [];
7
+ if (c.hp <= 0)
8
+ errors.push('hp must be > 0');
9
+ if (c.speed <= 0)
10
+ errors.push('speed must be > 0');
11
+ if (c.damage <= 0)
12
+ errors.push('damage must be > 0');
13
+ if (c.attackRange <= 0)
14
+ errors.push('attackRange must be > 0');
15
+ if (c.detectionRange <= 0)
16
+ errors.push('detectionRange must be > 0');
17
+ if (c.fov <= 0 || c.fov > 360)
18
+ errors.push('fov must be in (0, 360]');
19
+ if (c.packSize[0] < 1)
20
+ errors.push('packSize min must be >= 1');
21
+ if (c.packSize[0] > c.packSize[1])
22
+ errors.push('packSize min must be <= max');
23
+ if (c.lair.inner >= c.lair.patrol)
24
+ errors.push('lair.inner must be < lair.patrol');
25
+ if (c.lair.patrol >= c.lair.outer)
26
+ errors.push('lair.patrol must be < lair.outer');
27
+ if (c.rank < rankMin || c.rank > rankMax)
28
+ errors.push(`rank must be ${rankMin}-${rankMax}`);
29
+ return errors;
30
+ };
31
+ }
32
+ /** Type-safe registry of monster definitions. Validates lair radius ordering, pack size, and rank bounds. */
33
+ export class MonsterRegistry extends Registry {
34
+ constructor(config) {
35
+ const rankMin = config?.rankMin ?? DEFAULT_RANK_MIN;
36
+ const rankMax = config?.rankMax ?? DEFAULT_RANK_MAX;
37
+ if (rankMin > rankMax) {
38
+ throw new Error(`[MonsterRegistry] rankMin (${rankMin}) must be <= rankMax (${rankMax})`);
39
+ }
40
+ super({ name: 'MonsterRegistry', validate: createValidator(rankMin, rankMax) });
41
+ }
42
+ }
43
+ //# sourceMappingURL=MonsterRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonsterRegistry.js","sourceRoot":"","sources":["../../src/registry/MonsterRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAsCtC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,SAAS,eAAe,CAAC,OAAe,EAAE,OAAe;IACvD,OAAO,CAAC,CAAqB,EAAY,EAAE;QACzC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7C,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACrD,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC/D,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG;YAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAChE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC9E,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACnF,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACnF,IAAI,CAAC,CAAC,IAAI,GAAG,OAAO,IAAI,CAAC,CAAC,IAAI,GAAG,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;QAC5F,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,6GAA6G;AAC7G,MAAM,OAAO,eAAgB,SAAQ,QAAoC;IACvE,YAAY,MAA+B;QACzC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,gBAAgB,CAAC;QACpD,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,gBAAgB,CAAC;QACpD,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,yBAAyB,OAAO,GAAG,CAAC,CAAC;QAC5F,CAAC;QACD,KAAK,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;CACF"}
@@ -0,0 +1,34 @@
1
+ import { Registry } from './Registry';
2
+ import type { IEquipmentPreference } from './FactionRegistry';
3
+ /** Blueprint for a humanoid NPC archetype (e.g. 'stalker_rookie', 'monolith_sniper'). */
4
+ export interface INPCTypeDefinition {
5
+ /** Human-readable display name. */
6
+ readonly name: string;
7
+ /** Default faction ID. Must be registered in FactionRegistry. */
8
+ readonly faction: string;
9
+ /** Base hit points (> 0). */
10
+ readonly hp: number;
11
+ /** Movement speed (px/s, > 0). */
12
+ readonly speed: number;
13
+ /** Base damage per hit. */
14
+ readonly damage: number;
15
+ /** Maximum engagement distance (px). */
16
+ readonly attackRange: number;
17
+ /** Visual detection radius (px). */
18
+ readonly detectionRange: number;
19
+ /** Field of view (degrees, (0, 360]). */
20
+ readonly fov: number;
21
+ /** Power tier (1–5). Affects equipment, GOAP eligibility (≥ 5), and terrain job suitability. */
22
+ readonly rank: number;
23
+ /** Hit probability factor [0, 1]. */
24
+ readonly accuracy: number;
25
+ /** HP fraction [0, 1] at which the NPC prefers retreat behavior. */
26
+ readonly retreatThreshold: number;
27
+ /** Per-type loadout overrides (merged with faction defaults). */
28
+ readonly equipmentPreference?: Partial<IEquipmentPreference>;
29
+ }
30
+ /** Type-safe registry of NPC type definitions. Validates hp > 0, rank 1–5, accuracy [0, 1]. */
31
+ export declare class NPCTypeRegistry extends Registry<string, INPCTypeDefinition> {
32
+ constructor();
33
+ }
34
+ //# sourceMappingURL=NPCTypeRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NPCTypeRegistry.d.ts","sourceRoot":"","sources":["../../src/registry/NPCTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,yFAAyF;AACzF,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,yCAAyC;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,gGAAgG;IAChG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,iEAAiE;IACjE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC9D;AAWD,+FAA+F;AAC/F,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;;CAIxE"}
@@ -0,0 +1,20 @@
1
+ import { Registry } from './Registry';
2
+ function validate(c) {
3
+ const errors = [];
4
+ if (c.hp <= 0)
5
+ errors.push('hp must be > 0');
6
+ if (c.speed <= 0)
7
+ errors.push('speed must be > 0');
8
+ if (c.rank < 1 || c.rank > 5)
9
+ errors.push('rank must be 1-5');
10
+ if (c.accuracy < 0 || c.accuracy > 1)
11
+ errors.push('accuracy must be in [0, 1]');
12
+ return errors;
13
+ }
14
+ /** Type-safe registry of NPC type definitions. Validates hp > 0, rank 1–5, accuracy [0, 1]. */
15
+ export class NPCTypeRegistry extends Registry {
16
+ constructor() {
17
+ super({ name: 'NPCTypeRegistry', validate });
18
+ }
19
+ }
20
+ //# sourceMappingURL=NPCTypeRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NPCTypeRegistry.js","sourceRoot":"","sources":["../../src/registry/NPCTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA+BtC,SAAS,QAAQ,CAAC,CAAqB;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+FAA+F;AAC/F,MAAM,OAAO,eAAgB,SAAQ,QAAoC;IACvE;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ export interface RegistryOptions<TConfig> {
2
+ /** Human-readable name for error messages (e.g., 'MonsterRegistry'). */
3
+ name: string;
4
+ /** Optional validation function. Returns error messages array (empty = valid). */
5
+ validate?: (config: TConfig) => string[];
6
+ }
7
+ /**
8
+ * Generic, freezable, validated ID → config registry.
9
+ *
10
+ * Base class for all content registries. Supports unique ID enforcement,
11
+ * optional validation on register(), and freezing to prevent mutation after init().
12
+ *
13
+ * @typeParam TId - String-like identifier type. Default: `string`.
14
+ * @typeParam TConfig - Shape of the stored configuration object.
15
+ */
16
+ export declare class Registry<TId extends string = string, TConfig = unknown> {
17
+ private readonly entries;
18
+ private readonly name;
19
+ private readonly validate?;
20
+ private frozen;
21
+ constructor(options: RegistryOptions<TConfig>);
22
+ /** Register a new entry. Throws if frozen, the ID is duplicate, or validation fails. Returns `this` for chaining. */
23
+ register(id: TId, config: TConfig): this;
24
+ /** Retrieve an entry by ID. Throws if not found. */
25
+ get(id: TId): TConfig;
26
+ /** Retrieve an entry by ID, or `undefined` if not found. */
27
+ tryGet(id: TId): TConfig | undefined;
28
+ /** Check whether an ID is registered. */
29
+ has(id: TId): boolean;
30
+ /** Return all registered IDs as an array. */
31
+ ids(): TId[];
32
+ /** Number of registered entries. */
33
+ get size(): number;
34
+ /** Iterate over [id, config] pairs. */
35
+ [Symbol.iterator](): IterableIterator<[TId, TConfig]>;
36
+ /** Lock the registry. All subsequent register() calls will throw. Called automatically by ALifeKernel.init(). */
37
+ freeze(): void;
38
+ /** True if the registry has been frozen. */
39
+ get isFrozen(): boolean;
40
+ private ensureNotFrozen;
41
+ private ensureUnique;
42
+ private runValidation;
43
+ }
44
+ //# sourceMappingURL=Registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.d.ts","sourceRoot":"","sources":["../../src/registry/Registry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe,CAAC,OAAO;IACtC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,EAAE,CAAC;CAC1C;AAED;;;;;;;;GAQG;AACH,qBAAa,QAAQ,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,OAAO;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAgC;IAC1D,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;IAK7C,qHAAqH;IACrH,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAQxC,oDAAoD;IACpD,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO;IAQrB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,GAAG,SAAS;IAIpC,yCAAyC;IACzC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO;IAIrB,6CAA6C;IAC7C,GAAG,IAAI,GAAG,EAAE;IAIZ,oCAAoC;IACpC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,uCAAuC;IACvC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAIrD,iHAAiH;IACjH,MAAM,IAAI,IAAI;IAId,4CAA4C;IAC5C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;CAStB"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Generic, freezable, validated ID → config registry.
3
+ *
4
+ * Base class for all content registries. Supports unique ID enforcement,
5
+ * optional validation on register(), and freezing to prevent mutation after init().
6
+ *
7
+ * @typeParam TId - String-like identifier type. Default: `string`.
8
+ * @typeParam TConfig - Shape of the stored configuration object.
9
+ */
10
+ export class Registry {
11
+ constructor(options) {
12
+ this.entries = new Map();
13
+ this.frozen = false;
14
+ this.name = options.name;
15
+ this.validate = options.validate;
16
+ }
17
+ /** Register a new entry. Throws if frozen, the ID is duplicate, or validation fails. Returns `this` for chaining. */
18
+ register(id, config) {
19
+ this.ensureNotFrozen('register');
20
+ this.ensureUnique(id);
21
+ this.runValidation(id, config);
22
+ this.entries.set(id, config);
23
+ return this;
24
+ }
25
+ /** Retrieve an entry by ID. Throws if not found. */
26
+ get(id) {
27
+ const config = this.entries.get(id);
28
+ if (config === undefined && !this.entries.has(id)) {
29
+ throw new Error(`[${this.name}] ID "${id}" not found`);
30
+ }
31
+ return config;
32
+ }
33
+ /** Retrieve an entry by ID, or `undefined` if not found. */
34
+ tryGet(id) {
35
+ return this.entries.get(id);
36
+ }
37
+ /** Check whether an ID is registered. */
38
+ has(id) {
39
+ return this.entries.has(id);
40
+ }
41
+ /** Return all registered IDs as an array. */
42
+ ids() {
43
+ return [...this.entries.keys()];
44
+ }
45
+ /** Number of registered entries. */
46
+ get size() {
47
+ return this.entries.size;
48
+ }
49
+ /** Iterate over [id, config] pairs. */
50
+ [Symbol.iterator]() {
51
+ return this.entries.entries();
52
+ }
53
+ /** Lock the registry. All subsequent register() calls will throw. Called automatically by ALifeKernel.init(). */
54
+ freeze() {
55
+ this.frozen = true;
56
+ }
57
+ /** True if the registry has been frozen. */
58
+ get isFrozen() {
59
+ return this.frozen;
60
+ }
61
+ ensureNotFrozen(operation) {
62
+ if (this.frozen) {
63
+ throw new Error(`[${this.name}] Cannot ${operation}: registry is frozen`);
64
+ }
65
+ }
66
+ ensureUnique(id) {
67
+ if (this.entries.has(id)) {
68
+ throw new Error(`[${this.name}] ID "${id}" already registered`);
69
+ }
70
+ }
71
+ runValidation(id, config) {
72
+ if (!this.validate)
73
+ return;
74
+ const errors = this.validate(config);
75
+ if (errors.length > 0) {
76
+ throw new Error(`[${this.name}] Invalid config for "${id}": ${errors.join('; ')}`);
77
+ }
78
+ }
79
+ }
80
+ //# sourceMappingURL=Registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../src/registry/Registry.ts"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,MAAM,OAAO,QAAQ;IAMnB,YAAY,OAAiC;QAL5B,YAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;QAG3C,WAAM,GAAG,KAAK,CAAC;QAGrB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,qHAAqH;IACrH,QAAQ,CAAC,EAAO,EAAE,MAAe;QAC/B,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oDAAoD;IACpD,GAAG,CAAC,EAAO;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,SAAS,EAAE,aAAa,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,MAAiB,CAAC;IAC3B,CAAC;IAED,4DAA4D;IAC5D,MAAM,CAAC,EAAO;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,yCAAyC;IACzC,GAAG,CAAC,EAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,6CAA6C;IAC7C,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,oCAAoC;IACpC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,uCAAuC;IACvC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,iHAAiH;IACjH,MAAM;QACJ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,4CAA4C;IAC5C,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,eAAe,CAAC,SAAiB;QACvC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,YAAY,SAAS,sBAAsB,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,EAAO;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,SAAS,EAAE,sBAAsB,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,EAAO,EAAE,MAAe;QAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,IAAI,IAAI,CAAC,IAAI,yBAAyB,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import { Registry } from './Registry';
2
+ /** Definition of a SmartTerrain task type (e.g. patrol, guard, camp). */
3
+ export interface ITaskTypeDefinition {
4
+ /** Human-readable display name. */
5
+ readonly name: string;
6
+ /** BehaviorScheme ID to activate when this task is assigned. */
7
+ readonly defaultBehavior: string;
8
+ /** Scheduling priority. Higher = assigned first when multiple tasks compete. */
9
+ readonly priority: number;
10
+ }
11
+ /** Registry of task types. Call registerDefaults() for the 4 built-in types (patrol, guard, camp, wander). */
12
+ export declare class TaskTypeRegistry extends Registry<string, ITaskTypeDefinition> {
13
+ constructor();
14
+ /** Register the 4 built-in task types (patrol, guard, camp, wander). Returns `this` for chaining. */
15
+ registerDefaults(): this;
16
+ }
17
+ //# sourceMappingURL=TaskTypeRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskTypeRegistry.d.ts","sourceRoot":"","sources":["../../src/registry/TaskTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,8GAA8G;AAC9G,qBAAa,gBAAiB,SAAQ,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;;IAKzE,qGAAqG;IACrG,gBAAgB,IAAI,IAAI;CAOzB"}
@@ -0,0 +1,16 @@
1
+ import { Registry } from './Registry';
2
+ /** Registry of task types. Call registerDefaults() for the 4 built-in types (patrol, guard, camp, wander). */
3
+ export class TaskTypeRegistry extends Registry {
4
+ constructor() {
5
+ super({ name: 'TaskTypeRegistry' });
6
+ }
7
+ /** Register the 4 built-in task types (patrol, guard, camp, wander). Returns `this` for chaining. */
8
+ registerDefaults() {
9
+ return this
10
+ .register('patrol', { name: 'Patrol', defaultBehavior: 'patrol', priority: 10 })
11
+ .register('guard', { name: 'Guard', defaultBehavior: 'guard', priority: 20 })
12
+ .register('camp', { name: 'Camp', defaultBehavior: 'camp', priority: 5 })
13
+ .register('wander', { name: 'Wander', defaultBehavior: 'wander', priority: 1 });
14
+ }
15
+ }
16
+ //# sourceMappingURL=TaskTypeRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskTypeRegistry.js","sourceRoot":"","sources":["../../src/registry/TaskTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAYtC,8GAA8G;AAC9G,MAAM,OAAO,gBAAiB,SAAQ,QAAqC;IACzE;QACE,KAAK,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,qGAAqG;IACrG,gBAAgB;QACd,OAAO,IAAI;aACR,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;aAC/E,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;aAC5E,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;aACxE,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ export { Registry } from './Registry';
2
+ export type { RegistryOptions } from './Registry';
3
+ export { MonsterRegistry } from './MonsterRegistry';
4
+ export type { IMonsterDefinition, IMonsterRegistryConfig } from './MonsterRegistry';
5
+ export { FactionRegistry } from './FactionRegistry';
6
+ export type { IFactionDefinition, IEquipmentPreference, IFactionSpawnRules } from './FactionRegistry';
7
+ export { NPCTypeRegistry } from './NPCTypeRegistry';
8
+ export type { INPCTypeDefinition } from './NPCTypeRegistry';
9
+ export { DamageTypeRegistry } from './DamageTypeRegistry';
10
+ export type { IDamageTypeDefinition } from './DamageTypeRegistry';
11
+ export { AnomalyTypeRegistry } from './AnomalyTypeRegistry';
12
+ export type { IAnomalyTypeDefinition } from './AnomalyTypeRegistry';
13
+ export { AIStateRegistry } from './AIStateRegistry';
14
+ export type { IStateHandler, ITransitionCondition, IAIStateDefinition } from './AIStateRegistry';
15
+ export { BehaviorSchemeRegistry } from './BehaviorSchemeRegistry';
16
+ export type { IBehaviorSchemeDefinition } from './BehaviorSchemeRegistry';
17
+ export { TaskTypeRegistry } from './TaskTypeRegistry';
18
+ export type { ITaskTypeDefinition } from './TaskTypeRegistry';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACtG,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,11 @@
1
+ // registry sub-path barrel
2
+ export { Registry } from './Registry';
3
+ export { MonsterRegistry } from './MonsterRegistry';
4
+ export { FactionRegistry } from './FactionRegistry';
5
+ export { NPCTypeRegistry } from './NPCTypeRegistry';
6
+ export { DamageTypeRegistry } from './DamageTypeRegistry';
7
+ export { AnomalyTypeRegistry } from './AnomalyTypeRegistry';
8
+ export { AIStateRegistry } from './AIStateRegistry';
9
+ export { BehaviorSchemeRegistry } from './BehaviorSchemeRegistry';
10
+ export { TaskTypeRegistry } from './TaskTypeRegistry';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { assertDefined, assertString, assertNumber, assertNumberInRange, assertBoolean, assertArray, assertObject, createValidator, validateMonsterDefinition, validateFactionDefinition, } from './validators';
2
+ export type { ValidationResult } from './validators';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,eAAe,EACf,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ // schema sub-path barrel
2
+ export { assertDefined, assertString, assertNumber, assertNumberInRange, assertBoolean, assertArray, assertObject, createValidator, validateMonsterDefinition, validateFactionDefinition, } from './validators';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,eAAe,EACf,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}