@alife-sdk/ai 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 (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +385 -0
  3. package/dist/animation/AnimationController.d.ts +60 -0
  4. package/dist/animation/AnimationController.d.ts.map +1 -0
  5. package/dist/animation/AnimationController.js +71 -0
  6. package/dist/animation/AnimationController.js.map +1 -0
  7. package/dist/animation/AnimationSelector.d.ts +108 -0
  8. package/dist/animation/AnimationSelector.d.ts.map +1 -0
  9. package/dist/animation/AnimationSelector.js +194 -0
  10. package/dist/animation/AnimationSelector.js.map +1 -0
  11. package/dist/animation/index.d.ts +5 -0
  12. package/dist/animation/index.d.ts.map +1 -0
  13. package/dist/animation/index.js +4 -0
  14. package/dist/animation/index.js.map +1 -0
  15. package/dist/combat/CombatTransitionChain.d.ts +95 -0
  16. package/dist/combat/CombatTransitionChain.d.ts.map +1 -0
  17. package/dist/combat/CombatTransitionChain.js +117 -0
  18. package/dist/combat/CombatTransitionChain.js.map +1 -0
  19. package/dist/combat/LoadoutBuilder.d.ts +83 -0
  20. package/dist/combat/LoadoutBuilder.d.ts.map +1 -0
  21. package/dist/combat/LoadoutBuilder.js +213 -0
  22. package/dist/combat/LoadoutBuilder.js.map +1 -0
  23. package/dist/combat/MonsterAbilityData.d.ts +97 -0
  24. package/dist/combat/MonsterAbilityData.d.ts.map +1 -0
  25. package/dist/combat/MonsterAbilityData.js +94 -0
  26. package/dist/combat/MonsterAbilityData.js.map +1 -0
  27. package/dist/combat/WeaponSelector.d.ts +47 -0
  28. package/dist/combat/WeaponSelector.d.ts.map +1 -0
  29. package/dist/combat/WeaponSelector.js +180 -0
  30. package/dist/combat/WeaponSelector.js.map +1 -0
  31. package/dist/combat/index.d.ts +9 -0
  32. package/dist/combat/index.d.ts.map +1 -0
  33. package/dist/combat/index.js +6 -0
  34. package/dist/combat/index.js.map +1 -0
  35. package/dist/conditions/ConditionBank.d.ts +179 -0
  36. package/dist/conditions/ConditionBank.d.ts.map +1 -0
  37. package/dist/conditions/ConditionBank.js +220 -0
  38. package/dist/conditions/ConditionBank.js.map +1 -0
  39. package/dist/conditions/index.d.ts +3 -0
  40. package/dist/conditions/index.d.ts.map +1 -0
  41. package/dist/conditions/index.js +3 -0
  42. package/dist/conditions/index.js.map +1 -0
  43. package/dist/config/createDefaultAIConfig.d.ts +25 -0
  44. package/dist/config/createDefaultAIConfig.d.ts.map +1 -0
  45. package/dist/config/createDefaultAIConfig.js +147 -0
  46. package/dist/config/createDefaultAIConfig.js.map +1 -0
  47. package/dist/config/index.d.ts +2 -0
  48. package/dist/config/index.d.ts.map +1 -0
  49. package/dist/config/index.js +3 -0
  50. package/dist/config/index.js.map +1 -0
  51. package/dist/cover/CoverAccessAdapter.d.ts +61 -0
  52. package/dist/cover/CoverAccessAdapter.d.ts.map +1 -0
  53. package/dist/cover/CoverAccessAdapter.js +74 -0
  54. package/dist/cover/CoverAccessAdapter.js.map +1 -0
  55. package/dist/cover/CoverEvaluators.d.ts +43 -0
  56. package/dist/cover/CoverEvaluators.d.ts.map +1 -0
  57. package/dist/cover/CoverEvaluators.js +193 -0
  58. package/dist/cover/CoverEvaluators.js.map +1 -0
  59. package/dist/cover/CoverLockRegistry.d.ts +50 -0
  60. package/dist/cover/CoverLockRegistry.d.ts.map +1 -0
  61. package/dist/cover/CoverLockRegistry.js +164 -0
  62. package/dist/cover/CoverLockRegistry.js.map +1 -0
  63. package/dist/cover/CoverRecommender.d.ts +32 -0
  64. package/dist/cover/CoverRecommender.d.ts.map +1 -0
  65. package/dist/cover/CoverRecommender.js +45 -0
  66. package/dist/cover/CoverRecommender.js.map +1 -0
  67. package/dist/cover/CoverRegistry.d.ts +97 -0
  68. package/dist/cover/CoverRegistry.d.ts.map +1 -0
  69. package/dist/cover/CoverRegistry.js +223 -0
  70. package/dist/cover/CoverRegistry.js.map +1 -0
  71. package/dist/cover/ICoverEvaluator.d.ts +15 -0
  72. package/dist/cover/ICoverEvaluator.d.ts.map +1 -0
  73. package/dist/cover/ICoverEvaluator.js +4 -0
  74. package/dist/cover/ICoverEvaluator.js.map +1 -0
  75. package/dist/cover/ICoverLockConfig.d.ts +83 -0
  76. package/dist/cover/ICoverLockConfig.d.ts.map +1 -0
  77. package/dist/cover/ICoverLockConfig.js +21 -0
  78. package/dist/cover/ICoverLockConfig.js.map +1 -0
  79. package/dist/cover/LoopholeGenerator.d.ts +44 -0
  80. package/dist/cover/LoopholeGenerator.d.ts.map +1 -0
  81. package/dist/cover/LoopholeGenerator.js +96 -0
  82. package/dist/cover/LoopholeGenerator.js.map +1 -0
  83. package/dist/cover/index.d.ts +11 -0
  84. package/dist/cover/index.d.ts.map +1 -0
  85. package/dist/cover/index.js +8 -0
  86. package/dist/cover/index.js.map +1 -0
  87. package/dist/goap/EvadeHazardAction.d.ts +34 -0
  88. package/dist/goap/EvadeHazardAction.d.ts.map +1 -0
  89. package/dist/goap/EvadeHazardAction.js +48 -0
  90. package/dist/goap/EvadeHazardAction.js.map +1 -0
  91. package/dist/goap/GOAPController.d.ts +114 -0
  92. package/dist/goap/GOAPController.d.ts.map +1 -0
  93. package/dist/goap/GOAPController.js +191 -0
  94. package/dist/goap/GOAPController.js.map +1 -0
  95. package/dist/goap/GoalSelector.d.ts +40 -0
  96. package/dist/goap/GoalSelector.d.ts.map +1 -0
  97. package/dist/goap/GoalSelector.js +115 -0
  98. package/dist/goap/GoalSelector.js.map +1 -0
  99. package/dist/goap/IHazardZoneAccess.d.ts +16 -0
  100. package/dist/goap/IHazardZoneAccess.d.ts.map +1 -0
  101. package/dist/goap/IHazardZoneAccess.js +2 -0
  102. package/dist/goap/IHazardZoneAccess.js.map +1 -0
  103. package/dist/goap/WorldStateBuilder.d.ts +27 -0
  104. package/dist/goap/WorldStateBuilder.d.ts.map +1 -0
  105. package/dist/goap/WorldStateBuilder.js +51 -0
  106. package/dist/goap/WorldStateBuilder.js.map +1 -0
  107. package/dist/goap/index.d.ts +9 -0
  108. package/dist/goap/index.d.ts.map +1 -0
  109. package/dist/goap/index.js +6 -0
  110. package/dist/goap/index.js.map +1 -0
  111. package/dist/index.d.ts +16 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +18 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/navigation/PathSmoother.d.ts +29 -0
  116. package/dist/navigation/PathSmoother.d.ts.map +1 -0
  117. package/dist/navigation/PathSmoother.js +172 -0
  118. package/dist/navigation/PathSmoother.js.map +1 -0
  119. package/dist/navigation/RestrictedZoneManager.d.ts +83 -0
  120. package/dist/navigation/RestrictedZoneManager.d.ts.map +1 -0
  121. package/dist/navigation/RestrictedZoneManager.js +179 -0
  122. package/dist/navigation/RestrictedZoneManager.js.map +1 -0
  123. package/dist/navigation/SmoothPathFollower.d.ts +55 -0
  124. package/dist/navigation/SmoothPathFollower.d.ts.map +1 -0
  125. package/dist/navigation/SmoothPathFollower.js +132 -0
  126. package/dist/navigation/SmoothPathFollower.js.map +1 -0
  127. package/dist/navigation/SteeringBehaviors.d.ts +123 -0
  128. package/dist/navigation/SteeringBehaviors.d.ts.map +1 -0
  129. package/dist/navigation/SteeringBehaviors.js +211 -0
  130. package/dist/navigation/SteeringBehaviors.js.map +1 -0
  131. package/dist/navigation/index.d.ts +7 -0
  132. package/dist/navigation/index.d.ts.map +1 -0
  133. package/dist/navigation/index.js +6 -0
  134. package/dist/navigation/index.js.map +1 -0
  135. package/dist/perception/NPCSensors.d.ts +129 -0
  136. package/dist/perception/NPCSensors.d.ts.map +1 -0
  137. package/dist/perception/NPCSensors.js +147 -0
  138. package/dist/perception/NPCSensors.js.map +1 -0
  139. package/dist/perception/PerceptionQuery.d.ts +65 -0
  140. package/dist/perception/PerceptionQuery.d.ts.map +1 -0
  141. package/dist/perception/PerceptionQuery.js +199 -0
  142. package/dist/perception/PerceptionQuery.js.map +1 -0
  143. package/dist/perception/index.d.ts +4 -0
  144. package/dist/perception/index.d.ts.map +1 -0
  145. package/dist/perception/index.js +4 -0
  146. package/dist/perception/index.js.map +1 -0
  147. package/dist/plugin/AIPlugin.d.ts +71 -0
  148. package/dist/plugin/AIPlugin.d.ts.map +1 -0
  149. package/dist/plugin/AIPlugin.js +134 -0
  150. package/dist/plugin/AIPlugin.js.map +1 -0
  151. package/dist/plugin/index.d.ts +3 -0
  152. package/dist/plugin/index.d.ts.map +1 -0
  153. package/dist/plugin/index.js +3 -0
  154. package/dist/plugin/index.js.map +1 -0
  155. package/dist/ports/AIPorts.d.ts +13 -0
  156. package/dist/ports/AIPorts.d.ts.map +1 -0
  157. package/dist/ports/AIPorts.js +14 -0
  158. package/dist/ports/AIPorts.js.map +1 -0
  159. package/dist/ports/ICoverPointSource.d.ts +27 -0
  160. package/dist/ports/ICoverPointSource.d.ts.map +1 -0
  161. package/dist/ports/ICoverPointSource.js +4 -0
  162. package/dist/ports/ICoverPointSource.js.map +1 -0
  163. package/dist/ports/IPerceptionProvider.d.ts +42 -0
  164. package/dist/ports/IPerceptionProvider.d.ts.map +1 -0
  165. package/dist/ports/IPerceptionProvider.js +4 -0
  166. package/dist/ports/IPerceptionProvider.js.map +1 -0
  167. package/dist/ports/index.d.ts +4 -0
  168. package/dist/ports/index.d.ts.map +1 -0
  169. package/dist/ports/index.js +3 -0
  170. package/dist/ports/index.js.map +1 -0
  171. package/dist/sound/VocalizationTypes.d.ts +57 -0
  172. package/dist/sound/VocalizationTypes.d.ts.map +1 -0
  173. package/dist/sound/VocalizationTypes.js +87 -0
  174. package/dist/sound/VocalizationTypes.js.map +1 -0
  175. package/dist/sound/index.d.ts +3 -0
  176. package/dist/sound/index.d.ts.map +1 -0
  177. package/dist/sound/index.js +3 -0
  178. package/dist/sound/index.js.map +1 -0
  179. package/dist/squad/SquadSharedTarget.d.ts +137 -0
  180. package/dist/squad/SquadSharedTarget.d.ts.map +1 -0
  181. package/dist/squad/SquadSharedTarget.js +145 -0
  182. package/dist/squad/SquadSharedTarget.js.map +1 -0
  183. package/dist/squad/SquadTactics.d.ts +63 -0
  184. package/dist/squad/SquadTactics.d.ts.map +1 -0
  185. package/dist/squad/SquadTactics.js +76 -0
  186. package/dist/squad/SquadTactics.js.map +1 -0
  187. package/dist/squad/index.d.ts +5 -0
  188. package/dist/squad/index.d.ts.map +1 -0
  189. package/dist/squad/index.js +4 -0
  190. package/dist/squad/index.js.map +1 -0
  191. package/dist/states/INPCContext.d.ts +550 -0
  192. package/dist/states/INPCContext.d.ts.map +1 -0
  193. package/dist/states/INPCContext.js +17 -0
  194. package/dist/states/INPCContext.js.map +1 -0
  195. package/dist/states/INPCOnlineState.d.ts +202 -0
  196. package/dist/states/INPCOnlineState.d.ts.map +1 -0
  197. package/dist/states/INPCOnlineState.js +9 -0
  198. package/dist/states/INPCOnlineState.js.map +1 -0
  199. package/dist/states/IOnlineStateHandler.d.ts +58 -0
  200. package/dist/states/IOnlineStateHandler.d.ts.map +1 -0
  201. package/dist/states/IOnlineStateHandler.js +13 -0
  202. package/dist/states/IOnlineStateHandler.js.map +1 -0
  203. package/dist/states/IStateConfig.d.ts +272 -0
  204. package/dist/states/IStateConfig.d.ts.map +1 -0
  205. package/dist/states/IStateConfig.js +100 -0
  206. package/dist/states/IStateConfig.js.map +1 -0
  207. package/dist/states/IStateTransitionMap.d.ts +89 -0
  208. package/dist/states/IStateTransitionMap.d.ts.map +1 -0
  209. package/dist/states/IStateTransitionMap.js +75 -0
  210. package/dist/states/IStateTransitionMap.js.map +1 -0
  211. package/dist/states/NPCOnlineState.d.ts +19 -0
  212. package/dist/states/NPCOnlineState.d.ts.map +1 -0
  213. package/dist/states/NPCOnlineState.js +75 -0
  214. package/dist/states/NPCOnlineState.js.map +1 -0
  215. package/dist/states/NPCPerception.d.ts +108 -0
  216. package/dist/states/NPCPerception.d.ts.map +1 -0
  217. package/dist/states/NPCPerception.js +122 -0
  218. package/dist/states/NPCPerception.js.map +1 -0
  219. package/dist/states/OnlineAIDriver.d.ts +64 -0
  220. package/dist/states/OnlineAIDriver.d.ts.map +1 -0
  221. package/dist/states/OnlineAIDriver.js +171 -0
  222. package/dist/states/OnlineAIDriver.js.map +1 -0
  223. package/dist/states/OnlineStateRegistryBuilder.d.ts +115 -0
  224. package/dist/states/OnlineStateRegistryBuilder.d.ts.map +1 -0
  225. package/dist/states/OnlineStateRegistryBuilder.js +184 -0
  226. package/dist/states/OnlineStateRegistryBuilder.js.map +1 -0
  227. package/dist/states/StateHandlerMap.d.ts +52 -0
  228. package/dist/states/StateHandlerMap.d.ts.map +1 -0
  229. package/dist/states/StateHandlerMap.js +88 -0
  230. package/dist/states/StateHandlerMap.js.map +1 -0
  231. package/dist/states/eat-corpse/EatCorpseState.d.ts +32 -0
  232. package/dist/states/eat-corpse/EatCorpseState.d.ts.map +1 -0
  233. package/dist/states/eat-corpse/EatCorpseState.js +126 -0
  234. package/dist/states/eat-corpse/EatCorpseState.js.map +1 -0
  235. package/dist/states/eat-corpse/EatCorpseTransitionGuard.d.ts +34 -0
  236. package/dist/states/eat-corpse/EatCorpseTransitionGuard.d.ts.map +1 -0
  237. package/dist/states/eat-corpse/EatCorpseTransitionGuard.js +82 -0
  238. package/dist/states/eat-corpse/EatCorpseTransitionGuard.js.map +1 -0
  239. package/dist/states/eat-corpse/ICorpseSource.d.ts +87 -0
  240. package/dist/states/eat-corpse/ICorpseSource.d.ts.map +1 -0
  241. package/dist/states/eat-corpse/ICorpseSource.js +5 -0
  242. package/dist/states/eat-corpse/ICorpseSource.js.map +1 -0
  243. package/dist/states/eat-corpse/IEatCorpseConfig.d.ts +75 -0
  244. package/dist/states/eat-corpse/IEatCorpseConfig.d.ts.map +1 -0
  245. package/dist/states/eat-corpse/IEatCorpseConfig.js +23 -0
  246. package/dist/states/eat-corpse/IEatCorpseConfig.js.map +1 -0
  247. package/dist/states/eat-corpse/IEatCorpsePhase.d.ts +23 -0
  248. package/dist/states/eat-corpse/IEatCorpsePhase.d.ts.map +1 -0
  249. package/dist/states/eat-corpse/IEatCorpsePhase.js +5 -0
  250. package/dist/states/eat-corpse/IEatCorpsePhase.js.map +1 -0
  251. package/dist/states/eat-corpse/index.d.ts +7 -0
  252. package/dist/states/eat-corpse/index.d.ts.map +1 -0
  253. package/dist/states/eat-corpse/index.js +11 -0
  254. package/dist/states/eat-corpse/index.js.map +1 -0
  255. package/dist/states/handlers/AlertState.d.ts +18 -0
  256. package/dist/states/handlers/AlertState.d.ts.map +1 -0
  257. package/dist/states/handlers/AlertState.js +104 -0
  258. package/dist/states/handlers/AlertState.js.map +1 -0
  259. package/dist/states/handlers/CampState.d.ts +18 -0
  260. package/dist/states/handlers/CampState.d.ts.map +1 -0
  261. package/dist/states/handlers/CampState.js +94 -0
  262. package/dist/states/handlers/CampState.js.map +1 -0
  263. package/dist/states/handlers/ChargeState.d.ts +18 -0
  264. package/dist/states/handlers/ChargeState.d.ts.map +1 -0
  265. package/dist/states/handlers/ChargeState.js +103 -0
  266. package/dist/states/handlers/ChargeState.js.map +1 -0
  267. package/dist/states/handlers/CombatState.d.ts +19 -0
  268. package/dist/states/handlers/CombatState.d.ts.map +1 -0
  269. package/dist/states/handlers/CombatState.js +137 -0
  270. package/dist/states/handlers/CombatState.js.map +1 -0
  271. package/dist/states/handlers/CombatTransitionHandler.d.ts +34 -0
  272. package/dist/states/handlers/CombatTransitionHandler.d.ts.map +1 -0
  273. package/dist/states/handlers/CombatTransitionHandler.js +137 -0
  274. package/dist/states/handlers/CombatTransitionHandler.js.map +1 -0
  275. package/dist/states/handlers/DeadState.d.ts +16 -0
  276. package/dist/states/handlers/DeadState.d.ts.map +1 -0
  277. package/dist/states/handlers/DeadState.js +35 -0
  278. package/dist/states/handlers/DeadState.js.map +1 -0
  279. package/dist/states/handlers/EvadeGrenadeState.d.ts +23 -0
  280. package/dist/states/handlers/EvadeGrenadeState.d.ts.map +1 -0
  281. package/dist/states/handlers/EvadeGrenadeState.js +93 -0
  282. package/dist/states/handlers/EvadeGrenadeState.js.map +1 -0
  283. package/dist/states/handlers/FleeState.d.ts +18 -0
  284. package/dist/states/handlers/FleeState.d.ts.map +1 -0
  285. package/dist/states/handlers/FleeState.js +61 -0
  286. package/dist/states/handlers/FleeState.js.map +1 -0
  287. package/dist/states/handlers/GrenadeState.d.ts +18 -0
  288. package/dist/states/handlers/GrenadeState.d.ts.map +1 -0
  289. package/dist/states/handlers/GrenadeState.js +61 -0
  290. package/dist/states/handlers/GrenadeState.js.map +1 -0
  291. package/dist/states/handlers/HelpWoundedState.d.ts +27 -0
  292. package/dist/states/handlers/HelpWoundedState.d.ts.map +1 -0
  293. package/dist/states/handlers/HelpWoundedState.js +131 -0
  294. package/dist/states/handlers/HelpWoundedState.js.map +1 -0
  295. package/dist/states/handlers/IdleState.d.ts +18 -0
  296. package/dist/states/handlers/IdleState.d.ts.map +1 -0
  297. package/dist/states/handlers/IdleState.js +127 -0
  298. package/dist/states/handlers/IdleState.js.map +1 -0
  299. package/dist/states/handlers/InvestigateState.d.ts +27 -0
  300. package/dist/states/handlers/InvestigateState.d.ts.map +1 -0
  301. package/dist/states/handlers/InvestigateState.js +145 -0
  302. package/dist/states/handlers/InvestigateState.js.map +1 -0
  303. package/dist/states/handlers/KillWoundedState.d.ts +27 -0
  304. package/dist/states/handlers/KillWoundedState.d.ts.map +1 -0
  305. package/dist/states/handlers/KillWoundedState.js +147 -0
  306. package/dist/states/handlers/KillWoundedState.js.map +1 -0
  307. package/dist/states/handlers/LeapState.d.ts +18 -0
  308. package/dist/states/handlers/LeapState.d.ts.map +1 -0
  309. package/dist/states/handlers/LeapState.js +115 -0
  310. package/dist/states/handlers/LeapState.js.map +1 -0
  311. package/dist/states/handlers/MonsterCombatController.d.ts +55 -0
  312. package/dist/states/handlers/MonsterCombatController.d.ts.map +1 -0
  313. package/dist/states/handlers/MonsterCombatController.js +152 -0
  314. package/dist/states/handlers/MonsterCombatController.js.map +1 -0
  315. package/dist/states/handlers/PatrolState.d.ts +18 -0
  316. package/dist/states/handlers/PatrolState.d.ts.map +1 -0
  317. package/dist/states/handlers/PatrolState.js +137 -0
  318. package/dist/states/handlers/PatrolState.js.map +1 -0
  319. package/dist/states/handlers/PsiAttackState.d.ts +18 -0
  320. package/dist/states/handlers/PsiAttackState.d.ts.map +1 -0
  321. package/dist/states/handlers/PsiAttackState.js +101 -0
  322. package/dist/states/handlers/PsiAttackState.js.map +1 -0
  323. package/dist/states/handlers/RetreatState.d.ts +18 -0
  324. package/dist/states/handlers/RetreatState.d.ts.map +1 -0
  325. package/dist/states/handlers/RetreatState.js +131 -0
  326. package/dist/states/handlers/RetreatState.js.map +1 -0
  327. package/dist/states/handlers/SearchState.d.ts +18 -0
  328. package/dist/states/handlers/SearchState.d.ts.map +1 -0
  329. package/dist/states/handlers/SearchState.js +64 -0
  330. package/dist/states/handlers/SearchState.js.map +1 -0
  331. package/dist/states/handlers/SleepState.d.ts +18 -0
  332. package/dist/states/handlers/SleepState.d.ts.map +1 -0
  333. package/dist/states/handlers/SleepState.js +94 -0
  334. package/dist/states/handlers/SleepState.js.map +1 -0
  335. package/dist/states/handlers/StalkState.d.ts +18 -0
  336. package/dist/states/handlers/StalkState.d.ts.map +1 -0
  337. package/dist/states/handlers/StalkState.js +82 -0
  338. package/dist/states/handlers/StalkState.js.map +1 -0
  339. package/dist/states/handlers/TakeCoverState.d.ts +18 -0
  340. package/dist/states/handlers/TakeCoverState.d.ts.map +1 -0
  341. package/dist/states/handlers/TakeCoverState.js +208 -0
  342. package/dist/states/handlers/TakeCoverState.js.map +1 -0
  343. package/dist/states/handlers/WoundedState.d.ts +18 -0
  344. package/dist/states/handlers/WoundedState.d.ts.map +1 -0
  345. package/dist/states/handlers/WoundedState.js +71 -0
  346. package/dist/states/handlers/WoundedState.js.map +1 -0
  347. package/dist/states/handlers/_utils.d.ts +55 -0
  348. package/dist/states/handlers/_utils.d.ts.map +1 -0
  349. package/dist/states/handlers/_utils.js +88 -0
  350. package/dist/states/handlers/_utils.js.map +1 -0
  351. package/dist/states/handlers/index.d.ts +25 -0
  352. package/dist/states/handlers/index.d.ts.map +1 -0
  353. package/dist/states/handlers/index.js +28 -0
  354. package/dist/states/handlers/index.js.map +1 -0
  355. package/dist/states/index.d.ts +17 -0
  356. package/dist/states/index.d.ts.map +1 -0
  357. package/dist/states/index.js +12 -0
  358. package/dist/states/index.js.map +1 -0
  359. package/dist/states/pack/IPackAccess.d.ts +46 -0
  360. package/dist/states/pack/IPackAccess.d.ts.map +1 -0
  361. package/dist/states/pack/IPackAccess.js +8 -0
  362. package/dist/states/pack/IPackAccess.js.map +1 -0
  363. package/dist/suspicion/SuspicionAccumulator.d.ts +166 -0
  364. package/dist/suspicion/SuspicionAccumulator.d.ts.map +1 -0
  365. package/dist/suspicion/SuspicionAccumulator.js +191 -0
  366. package/dist/suspicion/SuspicionAccumulator.js.map +1 -0
  367. package/dist/suspicion/index.d.ts +3 -0
  368. package/dist/suspicion/index.d.ts.map +1 -0
  369. package/dist/suspicion/index.js +2 -0
  370. package/dist/suspicion/index.js.map +1 -0
  371. package/dist/types/IAnimationTypes.d.ts +28 -0
  372. package/dist/types/IAnimationTypes.d.ts.map +1 -0
  373. package/dist/types/IAnimationTypes.js +17 -0
  374. package/dist/types/IAnimationTypes.js.map +1 -0
  375. package/dist/types/ICoverPoint.d.ts +76 -0
  376. package/dist/types/ICoverPoint.d.ts.map +1 -0
  377. package/dist/types/ICoverPoint.js +21 -0
  378. package/dist/types/ICoverPoint.js.map +1 -0
  379. package/dist/types/IOnlineAIConfig.d.ts +150 -0
  380. package/dist/types/IOnlineAIConfig.d.ts.map +1 -0
  381. package/dist/types/IOnlineAIConfig.js +5 -0
  382. package/dist/types/IOnlineAIConfig.js.map +1 -0
  383. package/dist/types/IPerceptionTypes.d.ts +94 -0
  384. package/dist/types/IPerceptionTypes.d.ts.map +1 -0
  385. package/dist/types/IPerceptionTypes.js +37 -0
  386. package/dist/types/IPerceptionTypes.js.map +1 -0
  387. package/dist/types/IWeaponTypes.d.ts +56 -0
  388. package/dist/types/IWeaponTypes.d.ts.map +1 -0
  389. package/dist/types/IWeaponTypes.js +15 -0
  390. package/dist/types/IWeaponTypes.js.map +1 -0
  391. package/dist/types/index.d.ts +10 -0
  392. package/dist/types/index.d.ts.map +1 -0
  393. package/dist/types/index.js +5 -0
  394. package/dist/types/index.js.map +1 -0
  395. package/package.json +123 -0
@@ -0,0 +1,64 @@
1
+ import type { INPCContext } from './INPCContext';
2
+ import type { IOnlineStateHandler } from './IOnlineStateHandler';
3
+ import { StateHandlerMap } from './StateHandlerMap';
4
+ /**
5
+ * Minimal host interface provided by the caller when constructing an
6
+ * {@link OnlineAIDriver}.
7
+ *
8
+ * Omits `transition` and `currentStateId` from {@link INPCContext} because
9
+ * those two fields are owned by the driver itself — it wraps `hostCtx` and
10
+ * injects its own implementations.
11
+ *
12
+ * All other fields are delegated transparently to the host object.
13
+ */
14
+ export type IOnlineDriverHost = Omit<INPCContext, 'transition' | 'currentStateId'>;
15
+ /**
16
+ * Per-NPC coordinator that drives a lightweight finite state machine over a
17
+ * set of {@link IOnlineStateHandler} instances.
18
+ *
19
+ * Create one driver per active NPC entity and call {@link update} each frame.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const handlers = buildDefaultHandlerMap();
24
+ * const driver = new OnlineAIDriver(phaserNPCContext, handlers, 'IDLE');
25
+ *
26
+ * // Game loop:
27
+ * driver.update(scene.game.loop.delta);
28
+ *
29
+ * // On NPC death / scene shutdown:
30
+ * driver.destroy();
31
+ * ```
32
+ */
33
+ export declare class OnlineAIDriver {
34
+ private readonly handlers;
35
+ private _currentStateId;
36
+ private readonly ctx;
37
+ /** True while a transition is in progress (guards against re-entrant transitions). */
38
+ private _transitioning;
39
+ /** True after destroy() has been called. Guards against use-after-destroy. */
40
+ private _destroyed;
41
+ constructor(host: IOnlineDriverHost, handlers: StateHandlerMap | ReadonlyMap<string, IOnlineStateHandler>, initialState: string);
42
+ /** Identifier of the currently active state. */
43
+ get currentStateId(): string;
44
+ /**
45
+ * Run one frame of the AI.
46
+ *
47
+ * Calls `update(ctx, deltaMs)` on the current state handler.
48
+ * If the handler called `ctx.transition()` the FSM will have already
49
+ * performed exit/enter — no additional bookkeeping is required.
50
+ *
51
+ * @param deltaMs - Elapsed time since the last frame (milliseconds).
52
+ */
53
+ update(deltaMs: number): void;
54
+ /**
55
+ * Exit the current state.
56
+ *
57
+ * Call when the NPC entity is destroyed or the scene shuts down.
58
+ */
59
+ destroy(): void;
60
+ /** @internal Called by {@link DriverContext.transition}. */
61
+ _doTransition(newStateId: string): void;
62
+ private getHandler;
63
+ }
64
+ //# sourceMappingURL=OnlineAIDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnlineAIDriver.d.ts","sourceRoot":"","sources":["../../src/states/OnlineAIDriver.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,gBAAgB,CAAC,CAAC;AAMnF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAElC,sFAAsF;IACtF,OAAO,CAAC,cAAc,CAAS;IAE/B,8EAA8E;IAC9E,OAAO,CAAC,UAAU,CAAS;gBAGzB,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACpE,YAAY,EAAE,MAAM;IAkBtB,gDAAgD;IAChD,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK7B;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAUf,4DAA4D;IAC5D,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAqBvC,OAAO,CAAC,UAAU;CAOnB"}
@@ -0,0 +1,171 @@
1
+ // states/OnlineAIDriver.ts
2
+ // Per-NPC coordinator for the online AI tick.
3
+ //
4
+ // Owns:
5
+ // - A Map<stateId, IOnlineStateHandler> shared handler registry
6
+ // - An INPCContext facade wired to drive FSM transitions
7
+ //
8
+ // Design: OnlineAIDriver does NOT use the core StateMachine (which works with
9
+ // IEntity + AIStateRegistry). Instead it owns a minimal FSM — a currentStateId
10
+ // string and direct enter/update/exit calls — to keep alife-ai independent of
11
+ // any entity or registry contract.
12
+ //
13
+ // The host (e.g. Phaser layer) calls:
14
+ // 1. update(deltaMs) — each frame
15
+ // 2. destroy() — when the entity is removed
16
+ import { StateHandlerMap } from './StateHandlerMap';
17
+ // ---------------------------------------------------------------------------
18
+ // OnlineAIDriver
19
+ // ---------------------------------------------------------------------------
20
+ /**
21
+ * Per-NPC coordinator that drives a lightweight finite state machine over a
22
+ * set of {@link IOnlineStateHandler} instances.
23
+ *
24
+ * Create one driver per active NPC entity and call {@link update} each frame.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const handlers = buildDefaultHandlerMap();
29
+ * const driver = new OnlineAIDriver(phaserNPCContext, handlers, 'IDLE');
30
+ *
31
+ * // Game loop:
32
+ * driver.update(scene.game.loop.delta);
33
+ *
34
+ * // On NPC death / scene shutdown:
35
+ * driver.destroy();
36
+ * ```
37
+ */
38
+ export class OnlineAIDriver {
39
+ constructor(host, handlers, initialState) {
40
+ /** True while a transition is in progress (guards against re-entrant transitions). */
41
+ this._transitioning = false;
42
+ /** True after destroy() has been called. Guards against use-after-destroy. */
43
+ this._destroyed = false;
44
+ this.handlers = handlers instanceof StateHandlerMap ? handlers.toMap() : handlers;
45
+ this._currentStateId = initialState;
46
+ // Build the wrapped context that intercepts transition() and currentStateId.
47
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
48
+ const driver = this;
49
+ this.ctx = new DriverContext(host, driver);
50
+ // Call enter() on the initial state.
51
+ this.getHandler(initialState).enter(this.ctx);
52
+ }
53
+ // -------------------------------------------------------------------------
54
+ // Public API
55
+ // -------------------------------------------------------------------------
56
+ /** Identifier of the currently active state. */
57
+ get currentStateId() {
58
+ return this._currentStateId;
59
+ }
60
+ /**
61
+ * Run one frame of the AI.
62
+ *
63
+ * Calls `update(ctx, deltaMs)` on the current state handler.
64
+ * If the handler called `ctx.transition()` the FSM will have already
65
+ * performed exit/enter — no additional bookkeeping is required.
66
+ *
67
+ * @param deltaMs - Elapsed time since the last frame (milliseconds).
68
+ */
69
+ update(deltaMs) {
70
+ if (this._destroyed)
71
+ return;
72
+ this.getHandler(this._currentStateId).update(this.ctx, deltaMs);
73
+ }
74
+ /**
75
+ * Exit the current state.
76
+ *
77
+ * Call when the NPC entity is destroyed or the scene shuts down.
78
+ */
79
+ destroy() {
80
+ if (this._destroyed)
81
+ return;
82
+ this._destroyed = true;
83
+ this.getHandler(this._currentStateId).exit(this.ctx);
84
+ }
85
+ // -------------------------------------------------------------------------
86
+ // Internal — called by DriverContext
87
+ // -------------------------------------------------------------------------
88
+ /** @internal Called by {@link DriverContext.transition}. */
89
+ _doTransition(newStateId) {
90
+ if (this._transitioning) {
91
+ // Re-entrant guard: a transition triggered while another is in progress
92
+ // is silently ignored to prevent stack overflow in pathological handlers.
93
+ return;
94
+ }
95
+ this._transitioning = true;
96
+ try {
97
+ this.getHandler(this._currentStateId).exit(this.ctx);
98
+ this._currentStateId = newStateId;
99
+ this.getHandler(newStateId).enter(this.ctx);
100
+ }
101
+ finally {
102
+ this._transitioning = false;
103
+ }
104
+ }
105
+ // -------------------------------------------------------------------------
106
+ // Private helpers
107
+ // -------------------------------------------------------------------------
108
+ getHandler(stateId) {
109
+ const h = this.handlers.get(stateId);
110
+ if (!h) {
111
+ throw new Error(`OnlineAIDriver: no handler registered for state "${stateId}"`);
112
+ }
113
+ return h;
114
+ }
115
+ }
116
+ // ---------------------------------------------------------------------------
117
+ // DriverContext — internal INPCContext wrapper
118
+ // ---------------------------------------------------------------------------
119
+ /**
120
+ * Internal wrapper that delegates all INPCContext members to the host object
121
+ * except `currentStateId` and `transition`, which are owned by the driver.
122
+ *
123
+ * Using a class (rather than an object literal) lets us refer to it by type
124
+ * internally and avoids closure-per-field allocation on hot paths.
125
+ *
126
+ * @internal
127
+ */
128
+ class DriverContext {
129
+ constructor(host, driver) {
130
+ this.host = host;
131
+ this.driver = driver;
132
+ }
133
+ // Identity
134
+ get npcId() { return this.host.npcId; }
135
+ get factionId() { return this.host.factionId; }
136
+ get entityType() { return this.host.entityType; }
137
+ // Position
138
+ get x() { return this.host.x; }
139
+ get y() { return this.host.y; }
140
+ // Mutable AI state bag
141
+ get state() { return this.host.state; }
142
+ // Optional subsystems
143
+ get perception() { return this.host.perception; }
144
+ get health() { return this.host.health; }
145
+ get cover() { return this.host.cover; }
146
+ get danger() { return this.host.danger; }
147
+ get restrictedZones() { return this.host.restrictedZones; }
148
+ get squad() { return this.host.squad; }
149
+ get pack() { return this.host.pack; }
150
+ get conditions() { return this.host.conditions; }
151
+ get suspicion() { return this.host.suspicion; }
152
+ // Movement & rendering — delegate to host
153
+ setVelocity(vx, vy) { this.host.setVelocity(vx, vy); }
154
+ halt() { this.host.halt(); }
155
+ setRotation(r) { this.host.setRotation(r); }
156
+ setAlpha(a) { this.host.setAlpha(a); }
157
+ teleport(x, y) { this.host.teleport(x, y); }
158
+ disablePhysics() { this.host.disablePhysics(); }
159
+ // FSM control — owned by driver
160
+ get currentStateId() { return this.driver.currentStateId; }
161
+ transition(newStateId) { this.driver._doTransition(newStateId); }
162
+ // Event emission — delegate to host
163
+ emitShoot(p) { this.host.emitShoot(p); }
164
+ emitMeleeHit(p) { this.host.emitMeleeHit(p); }
165
+ emitVocalization(t) { this.host.emitVocalization(t); }
166
+ emitPsiAttackStart(x, y) { this.host.emitPsiAttackStart(x, y); }
167
+ // Utilities — delegate to host
168
+ now() { return this.host.now(); }
169
+ random() { return this.host.random(); }
170
+ }
171
+ //# sourceMappingURL=OnlineAIDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnlineAIDriver.js","sourceRoot":"","sources":["../../src/states/OnlineAIDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import type { IStateConfig } from './IStateConfig';
2
+ import type { IStateTransitionMap } from './IStateTransitionMap';
3
+ import { StateHandlerMap } from './StateHandlerMap';
4
+ /**
5
+ * Canonical state identifier strings used by both factory functions.
6
+ *
7
+ * Exported so hosts can reference them without hard-coding string literals.
8
+ */
9
+ export declare const ONLINE_STATE: {
10
+ readonly DEAD: "DEAD";
11
+ readonly IDLE: "IDLE";
12
+ readonly PATROL: "PATROL";
13
+ readonly ALERT: "ALERT";
14
+ readonly FLEE: "FLEE";
15
+ readonly SEARCH: "SEARCH";
16
+ readonly CAMP: "CAMP";
17
+ readonly SLEEP: "SLEEP";
18
+ readonly COMBAT: "COMBAT";
19
+ readonly TAKE_COVER: "TAKE_COVER";
20
+ readonly GRENADE: "GRENADE";
21
+ readonly EVADE_GRENADE: "EVADE_GRENADE";
22
+ readonly WOUNDED: "WOUNDED";
23
+ readonly RETREAT: "RETREAT";
24
+ readonly CHARGE: "CHARGE";
25
+ readonly STALK: "STALK";
26
+ readonly LEAP: "LEAP";
27
+ readonly PSI_ATTACK: "PSI_ATTACK";
28
+ };
29
+ /**
30
+ * Build a handler map for human NPC entities.
31
+ *
32
+ * Registers 14 states: the 13 shared core states plus {@link CombatState}
33
+ * (ranged weapon engagement, cover seeking, morale checks).
34
+ *
35
+ * The returned Map is a new instance each call — safe to mutate (e.g. replace
36
+ * individual entries) without affecting other callers.
37
+ *
38
+ * @param config - Optional partial config overrides; merged with defaults.
39
+ * @param tr - Optional partial transition map overrides; handlers use these
40
+ * instead of hard-coded state IDs, allowing SDK users to rename states.
41
+ * @returns Fresh {@link StateHandlerMap} ready for {@link OnlineAIDriver}.
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * const handlers = buildDefaultHandlerMap({ combatRange: 300 })
46
+ * .register('HUNT', new HuntState(cfg));
47
+ * const driver = new OnlineAIDriver(ctx, handlers, 'IDLE');
48
+ * ```
49
+ */
50
+ export declare function buildDefaultHandlerMap(config?: Partial<IStateConfig>, tr?: Partial<IStateTransitionMap>): StateHandlerMap;
51
+ /**
52
+ * Build a handler map for monster entities.
53
+ *
54
+ * Registers 14 states: the 13 shared core states plus
55
+ * {@link MonsterCombatController} (melee attacks, no special abilities by
56
+ * default). Monster ability states are opt-in — register them explicitly and
57
+ * provide a matching {@link MonsterAbilitySelector}.
58
+ *
59
+ * @param config - Optional partial config overrides; merged with defaults.
60
+ * @param tr - Optional partial transition map overrides; passed to all handlers.
61
+ * @returns Fresh {@link StateHandlerMap} ready for {@link OnlineAIDriver}.
62
+ *
63
+ * @example Basic monster (melee only):
64
+ * ```ts
65
+ * const handlers = buildMonsterHandlerMap({ meleeRange: 64 });
66
+ * const driver = new OnlineAIDriver(monsterCtx, handlers, 'IDLE');
67
+ * ```
68
+ *
69
+ * @example Stalker-style monster with ability states:
70
+ * ```ts
71
+ * import { CHORNOBYL_ABILITY_SELECTOR } from '@alife-sdk/ai/states';
72
+ *
73
+ * const cfg = { meleeRange: 64 };
74
+ * const handlers = buildMonsterHandlerMap(cfg)
75
+ * .register(ONLINE_STATE.COMBAT, new MonsterCombatController(cfg, tr, CHORNOBYL_ABILITY_SELECTOR))
76
+ * .register(ONLINE_STATE.CHARGE, new ChargeState(cfg, tr))
77
+ * .register(ONLINE_STATE.STALK, new StalkState(cfg, tr))
78
+ * .register(ONLINE_STATE.LEAP, new LeapState(cfg, tr))
79
+ * .register(ONLINE_STATE.PSI_ATTACK, new PsiAttackState(cfg, tr));
80
+ * ```
81
+ */
82
+ export declare function buildMonsterHandlerMap(config?: Partial<IStateConfig>, tr?: Partial<IStateTransitionMap>): StateHandlerMap;
83
+ /**
84
+ * Build a handler map for Stalker-style monster entities.
85
+ *
86
+ * Registers 18 states: the 13 shared core states plus
87
+ * {@link MonsterCombatController} wired to {@link CHORNOBYL_ABILITY_SELECTOR}
88
+ * and the four species-specific ability states:
89
+ *
90
+ * | Entity type | Ability state |
91
+ * |---------------|--------------|
92
+ * | `boar` | `CHARGE` |
93
+ * | `bloodsucker` | `STALK` |
94
+ * | `snork` | `LEAP` |
95
+ * | `controller` | `PSI_ATTACK` |
96
+ *
97
+ * All five state registrations are guaranteed to be consistent — no risk of
98
+ * the ability selector returning a state ID that is not in the map.
99
+ *
100
+ * For a custom entity-to-ability mapping pass `abilitySelector` to
101
+ * {@link MonsterCombatController} and register only the states you need via
102
+ * {@link buildMonsterHandlerMap} + `.register()`.
103
+ *
104
+ * @param config - Optional partial config overrides; merged with defaults.
105
+ * @param tr - Optional partial transition map overrides; passed to all handlers.
106
+ * @returns Fresh {@link StateHandlerMap} ready for {@link OnlineAIDriver}.
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * const handlers = buildChornobylMonsterHandlerMap({ meleeRange: 64 });
111
+ * const driver = new OnlineAIDriver(monsterCtx, handlers, 'IDLE');
112
+ * ```
113
+ */
114
+ export declare function buildChornobylMonsterHandlerMap(config?: Partial<IStateConfig>, tr?: Partial<IStateTransitionMap>): StateHandlerMap;
115
+ //# sourceMappingURL=OnlineStateRegistryBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnlineStateRegistryBuilder.d.ts","sourceRoot":"","sources":["../../src/states/OnlineStateRegistryBuilder.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;CAmBf,CAAC;AAmCX;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAC9B,EAAE,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAChC,eAAe,CAIjB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAC9B,EAAE,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAChC,eAAe,CAIjB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAC9B,EAAE,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAChC,eAAe,CAQjB"}
@@ -0,0 +1,184 @@
1
+ // states/OnlineStateRegistryBuilder.ts
2
+ // Factory functions that assemble the Map<stateId, IOnlineStateHandler> for
3
+ // OnlineAIDriver.
4
+ //
5
+ // All handlers are stateless — per-NPC runtime data lives in INPCOnlineState.
6
+ // The returned StateHandlerMap is a fresh instance each call and safe to mutate.
7
+ //
8
+ // Four functions:
9
+ // buildCoreHandlerMap() — private: 13 shared states, no COMBAT
10
+ // buildDefaultHandlerMap() — human NPCs: core + CombatState (14 states)
11
+ // buildMonsterHandlerMap() — monsters: core + MonsterCombatController (14 states)
12
+ // buildChornobylMonsterHandlerMap() — Stalker-style: core + MonsterCombatController
13
+ // (CHORNOBYL_ABILITY_SELECTOR) + 4 ability states (18 states)
14
+ //
15
+ // Monster ability states (CHARGE, STALK, LEAP, PSI_ATTACK) are opt-in:
16
+ // - Use buildChornobylMonsterHandlerMap() for the full Stalker preset, or
17
+ // - Manually extend buildMonsterHandlerMap() for custom ability sets.
18
+ import { DeadState, IdleState, PatrolState, AlertState, FleeState, SearchState, CampState, SleepState, CombatState, TakeCoverState, GrenadeState, EvadeGrenadeState, WoundedState, RetreatState, MonsterCombatController, CHORNOBYL_ABILITY_SELECTOR, ChargeState, StalkState, LeapState, PsiAttackState, } from './handlers/index';
19
+ import { createDefaultStateConfig } from './IStateConfig';
20
+ import { StateHandlerMap } from './StateHandlerMap';
21
+ // ---------------------------------------------------------------------------
22
+ // State identifiers (string constants — not const enum, so hosts can extend)
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Canonical state identifier strings used by both factory functions.
26
+ *
27
+ * Exported so hosts can reference them without hard-coding string literals.
28
+ */
29
+ export const ONLINE_STATE = {
30
+ DEAD: 'DEAD',
31
+ IDLE: 'IDLE',
32
+ PATROL: 'PATROL',
33
+ ALERT: 'ALERT',
34
+ FLEE: 'FLEE',
35
+ SEARCH: 'SEARCH',
36
+ CAMP: 'CAMP',
37
+ SLEEP: 'SLEEP',
38
+ COMBAT: 'COMBAT',
39
+ TAKE_COVER: 'TAKE_COVER',
40
+ GRENADE: 'GRENADE',
41
+ EVADE_GRENADE: 'EVADE_GRENADE',
42
+ WOUNDED: 'WOUNDED',
43
+ RETREAT: 'RETREAT',
44
+ CHARGE: 'CHARGE',
45
+ STALK: 'STALK',
46
+ LEAP: 'LEAP',
47
+ PSI_ATTACK: 'PSI_ATTACK',
48
+ };
49
+ // ---------------------------------------------------------------------------
50
+ // buildCoreHandlerMap (private)
51
+ // ---------------------------------------------------------------------------
52
+ /**
53
+ * Shared base: 13 states common to both humans and monsters.
54
+ * Does NOT include COMBAT (differs per entity type) nor monster ability states.
55
+ */
56
+ function buildCoreHandlerMap(cfg, tr) {
57
+ return new StateHandlerMap([
58
+ [ONLINE_STATE.DEAD, new DeadState(cfg, tr)],
59
+ [ONLINE_STATE.IDLE, new IdleState(cfg, tr)],
60
+ [ONLINE_STATE.PATROL, new PatrolState(cfg, tr)],
61
+ [ONLINE_STATE.ALERT, new AlertState(cfg, tr)],
62
+ [ONLINE_STATE.FLEE, new FleeState(cfg, tr)],
63
+ [ONLINE_STATE.SEARCH, new SearchState(cfg, tr)],
64
+ [ONLINE_STATE.CAMP, new CampState(cfg, tr)],
65
+ [ONLINE_STATE.SLEEP, new SleepState(cfg, tr)],
66
+ [ONLINE_STATE.TAKE_COVER, new TakeCoverState(cfg, tr)],
67
+ [ONLINE_STATE.GRENADE, new GrenadeState(cfg, tr)],
68
+ [ONLINE_STATE.EVADE_GRENADE, new EvadeGrenadeState(cfg, tr)],
69
+ [ONLINE_STATE.WOUNDED, new WoundedState(cfg, tr)],
70
+ [ONLINE_STATE.RETREAT, new RetreatState(cfg, tr)],
71
+ ]);
72
+ }
73
+ // ---------------------------------------------------------------------------
74
+ // buildDefaultHandlerMap
75
+ // ---------------------------------------------------------------------------
76
+ /**
77
+ * Build a handler map for human NPC entities.
78
+ *
79
+ * Registers 14 states: the 13 shared core states plus {@link CombatState}
80
+ * (ranged weapon engagement, cover seeking, morale checks).
81
+ *
82
+ * The returned Map is a new instance each call — safe to mutate (e.g. replace
83
+ * individual entries) without affecting other callers.
84
+ *
85
+ * @param config - Optional partial config overrides; merged with defaults.
86
+ * @param tr - Optional partial transition map overrides; handlers use these
87
+ * instead of hard-coded state IDs, allowing SDK users to rename states.
88
+ * @returns Fresh {@link StateHandlerMap} ready for {@link OnlineAIDriver}.
89
+ *
90
+ * @example
91
+ * ```ts
92
+ * const handlers = buildDefaultHandlerMap({ combatRange: 300 })
93
+ * .register('HUNT', new HuntState(cfg));
94
+ * const driver = new OnlineAIDriver(ctx, handlers, 'IDLE');
95
+ * ```
96
+ */
97
+ export function buildDefaultHandlerMap(config, tr) {
98
+ const cfg = createDefaultStateConfig(config);
99
+ return buildCoreHandlerMap(cfg, tr)
100
+ .register(ONLINE_STATE.COMBAT, new CombatState(cfg, tr));
101
+ }
102
+ // ---------------------------------------------------------------------------
103
+ // buildMonsterHandlerMap
104
+ // ---------------------------------------------------------------------------
105
+ /**
106
+ * Build a handler map for monster entities.
107
+ *
108
+ * Registers 14 states: the 13 shared core states plus
109
+ * {@link MonsterCombatController} (melee attacks, no special abilities by
110
+ * default). Monster ability states are opt-in — register them explicitly and
111
+ * provide a matching {@link MonsterAbilitySelector}.
112
+ *
113
+ * @param config - Optional partial config overrides; merged with defaults.
114
+ * @param tr - Optional partial transition map overrides; passed to all handlers.
115
+ * @returns Fresh {@link StateHandlerMap} ready for {@link OnlineAIDriver}.
116
+ *
117
+ * @example Basic monster (melee only):
118
+ * ```ts
119
+ * const handlers = buildMonsterHandlerMap({ meleeRange: 64 });
120
+ * const driver = new OnlineAIDriver(monsterCtx, handlers, 'IDLE');
121
+ * ```
122
+ *
123
+ * @example Stalker-style monster with ability states:
124
+ * ```ts
125
+ * import { CHORNOBYL_ABILITY_SELECTOR } from '@alife-sdk/ai/states';
126
+ *
127
+ * const cfg = { meleeRange: 64 };
128
+ * const handlers = buildMonsterHandlerMap(cfg)
129
+ * .register(ONLINE_STATE.COMBAT, new MonsterCombatController(cfg, tr, CHORNOBYL_ABILITY_SELECTOR))
130
+ * .register(ONLINE_STATE.CHARGE, new ChargeState(cfg, tr))
131
+ * .register(ONLINE_STATE.STALK, new StalkState(cfg, tr))
132
+ * .register(ONLINE_STATE.LEAP, new LeapState(cfg, tr))
133
+ * .register(ONLINE_STATE.PSI_ATTACK, new PsiAttackState(cfg, tr));
134
+ * ```
135
+ */
136
+ export function buildMonsterHandlerMap(config, tr) {
137
+ const cfg = createDefaultStateConfig(config);
138
+ return buildCoreHandlerMap(cfg, tr)
139
+ .register(ONLINE_STATE.COMBAT, new MonsterCombatController(cfg, tr));
140
+ }
141
+ // ---------------------------------------------------------------------------
142
+ // buildChornobylMonsterHandlerMap
143
+ // ---------------------------------------------------------------------------
144
+ /**
145
+ * Build a handler map for Stalker-style monster entities.
146
+ *
147
+ * Registers 18 states: the 13 shared core states plus
148
+ * {@link MonsterCombatController} wired to {@link CHORNOBYL_ABILITY_SELECTOR}
149
+ * and the four species-specific ability states:
150
+ *
151
+ * | Entity type | Ability state |
152
+ * |---------------|--------------|
153
+ * | `boar` | `CHARGE` |
154
+ * | `bloodsucker` | `STALK` |
155
+ * | `snork` | `LEAP` |
156
+ * | `controller` | `PSI_ATTACK` |
157
+ *
158
+ * All five state registrations are guaranteed to be consistent — no risk of
159
+ * the ability selector returning a state ID that is not in the map.
160
+ *
161
+ * For a custom entity-to-ability mapping pass `abilitySelector` to
162
+ * {@link MonsterCombatController} and register only the states you need via
163
+ * {@link buildMonsterHandlerMap} + `.register()`.
164
+ *
165
+ * @param config - Optional partial config overrides; merged with defaults.
166
+ * @param tr - Optional partial transition map overrides; passed to all handlers.
167
+ * @returns Fresh {@link StateHandlerMap} ready for {@link OnlineAIDriver}.
168
+ *
169
+ * @example
170
+ * ```ts
171
+ * const handlers = buildChornobylMonsterHandlerMap({ meleeRange: 64 });
172
+ * const driver = new OnlineAIDriver(monsterCtx, handlers, 'IDLE');
173
+ * ```
174
+ */
175
+ export function buildChornobylMonsterHandlerMap(config, tr) {
176
+ const cfg = createDefaultStateConfig(config);
177
+ return buildCoreHandlerMap(cfg, tr)
178
+ .register(ONLINE_STATE.COMBAT, new MonsterCombatController(cfg, tr, CHORNOBYL_ABILITY_SELECTOR))
179
+ .register(ONLINE_STATE.CHARGE, new ChargeState(cfg, tr))
180
+ .register(ONLINE_STATE.STALK, new StalkState(cfg, tr))
181
+ .register(ONLINE_STATE.LEAP, new LeapState(cfg, tr))
182
+ .register(ONLINE_STATE.PSI_ATTACK, new PsiAttackState(cfg, tr));
183
+ }
184
+ //# sourceMappingURL=OnlineStateRegistryBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnlineStateRegistryBuilder.js","sourceRoot":"","sources":["../../src/states/OnlineStateRegistryBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { IOnlineStateHandler } from './IOnlineStateHandler';
2
+ /**
3
+ * Type-safe registry for online NPC state handlers.
4
+ *
5
+ * Wraps a Map<string, IOnlineStateHandler> with a fluent API to make
6
+ * custom state registration explicit and discoverable.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * // Zombie game with custom states
11
+ * const handlers = buildDefaultHandlerMap(cfg, {
12
+ * combatOnPanicked: 'shamble_away',
13
+ * monsterOnNoEnemy: 'wander',
14
+ * })
15
+ * .register('HUNT', new HuntState(cfg))
16
+ * .register('shamble_away', new ShamblingFleeState(cfg))
17
+ * .extend(buildMonsterHandlerMap(cfg));
18
+ * ```
19
+ */
20
+ export declare class StateHandlerMap {
21
+ private readonly _map;
22
+ constructor(entries?: Iterable<[string, IOnlineStateHandler]>);
23
+ /**
24
+ * Register a handler for a state ID.
25
+ * Overwrites any existing handler for that ID.
26
+ * Returns `this` for fluent chaining.
27
+ */
28
+ register(stateId: string, handler: IOnlineStateHandler): this;
29
+ /**
30
+ * Merge all handlers from another StateHandlerMap or Map.
31
+ * Existing IDs in `this` are NOT overwritten — use {@link register} for targeted overrides.
32
+ * Returns `this` for fluent chaining.
33
+ */
34
+ extend(other: StateHandlerMap | Map<string, IOnlineStateHandler>): this;
35
+ /**
36
+ * Override all handlers from another StateHandlerMap or Map.
37
+ * Existing IDs in `this` ARE overwritten.
38
+ * Returns `this` for fluent chaining.
39
+ */
40
+ override(other: StateHandlerMap | Map<string, IOnlineStateHandler>): this;
41
+ /** Returns the handler registered for `stateId`, or undefined. */
42
+ get(stateId: string): IOnlineStateHandler | undefined;
43
+ /** Returns true if a handler for `stateId` is registered. */
44
+ has(stateId: string): boolean;
45
+ /** Number of registered handlers. */
46
+ get size(): number;
47
+ /** Iterate over all [stateId, handler] pairs. */
48
+ [Symbol.iterator](): IterableIterator<[string, IOnlineStateHandler]>;
49
+ /** Returns the underlying Map (read-only view). */
50
+ toMap(): ReadonlyMap<string, IOnlineStateHandler>;
51
+ }
52
+ //# sourceMappingURL=StateHandlerMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateHandlerMap.d.ts","sourceRoot":"","sources":["../../src/states/StateHandlerMap.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;gBAE5C,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAI7D;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAK7D;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,IAAI;IAUvE;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,IAAI;IAQzE,kEAAkE;IAClE,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIrD,6DAA6D;IAC7D,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7B,qCAAqC;IACrC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,iDAAiD;IACjD,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAIpE,mDAAmD;IACnD,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC;CAGlD"}