@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,100 @@
1
+ // states/IStateConfig.ts
2
+ // All hardcoded online-AI constants as a single config object.
3
+ // State handlers must read values exclusively from this interface —
4
+ // no magic numbers allowed in handler files.
5
+ // ---------------------------------------------------------------------------
6
+ // Factory
7
+ // ---------------------------------------------------------------------------
8
+ /**
9
+ * Create a {@link IStateConfig} pre-populated with the production defaults
10
+ * extracted from the game-layer constants.
11
+ *
12
+ * Call with a partial override object to customise individual values:
13
+ * ```ts
14
+ * const cfg = createDefaultStateConfig({ combatRange: 250 });
15
+ * ```
16
+ */
17
+ export function createDefaultStateConfig(overrides) {
18
+ return {
19
+ // -----------------------------------------------------------------------
20
+ // IMovementConfig
21
+ // -----------------------------------------------------------------------
22
+ approachSpeed: 150,
23
+ fleeSpeedMultiplier: 1.5,
24
+ panicFleeMultiplier: 1.3,
25
+ woundedCrawlMultiplier: 0.3,
26
+ evadeSpeedMultiplier: 1.5,
27
+ chargeSpeedMultiplier: 2.0,
28
+ stalkSpeedMultiplier: 0.4,
29
+ arriveThreshold: 12,
30
+ waypointArriveThreshold: 24,
31
+ combatRange: 200,
32
+ fleeDistance: 400,
33
+ evadeSafeDistance: 200,
34
+ woundedLastStandRange: 100,
35
+ meleeRange: 48,
36
+ stalkUnclockDistance: 80,
37
+ restrictedZoneCheckIntervalMs: 1000,
38
+ // -----------------------------------------------------------------------
39
+ // ICombatConfig
40
+ // -----------------------------------------------------------------------
41
+ woundedHpThreshold: 0.2,
42
+ retreatMoraleThreshold: -0.3,
43
+ panicMoraleThreshold: -0.7,
44
+ fireRateMs: 1000,
45
+ grenadeWindupMs: 1000,
46
+ bulletDamage: 10,
47
+ medkitHealRatio: 0.5,
48
+ medkitUseDurationMs: 3000,
49
+ killWoundedEnemyHpThreshold: 0.25,
50
+ killWoundedExecuteRange: 80,
51
+ // -----------------------------------------------------------------------
52
+ // IMonsterConfig
53
+ // -----------------------------------------------------------------------
54
+ meleeDamage: 15,
55
+ chargeDamageMultiplier: 2.0,
56
+ meleeCooldownMs: 1000,
57
+ chargeWindupMs: 600,
58
+ leapWindupMs: 400,
59
+ leapAirtimeMs: 350,
60
+ psiChannelMs: 2000,
61
+ innerLairRadius: 80,
62
+ patrolRadius: 180,
63
+ outerRadius: 350,
64
+ stalkAlphaInvisible: 0.08,
65
+ stalkAlphaShimmer: 0.3,
66
+ // -----------------------------------------------------------------------
67
+ // ITimingConfig
68
+ // -----------------------------------------------------------------------
69
+ alertDuration: 5000,
70
+ searchDuration: 8000,
71
+ woundedMaxDurationMs: 15000,
72
+ retreatMaxDurationMs: 8000,
73
+ retreatFireIntervalMs: 2000,
74
+ inertiaLockMs: 3000,
75
+ schemeReactionDelayMs: 400,
76
+ campSleepReactionDelayMs: 800,
77
+ idleConditionChannel: 'stamina',
78
+ idleConditionThreshold: 0.8,
79
+ suspicionAlertThreshold: 0.7,
80
+ investigateMaxDurationMs: 10000,
81
+ investigateLookAroundMs: 3000,
82
+ helpWoundedAssistMs: 5000,
83
+ helpWoundedMaxDurationMs: 10000,
84
+ corpseFoundSuspicion: 0.6,
85
+ killWoundedMaxApproachMs: 8000,
86
+ killWoundedAimMs: 800,
87
+ killWoundedTauntMs: 1200,
88
+ killWoundedBurstCount: 3,
89
+ killWoundedPauseMs: 1000,
90
+ packAlertIntervalMs: 500,
91
+ packAlertTtlMs: 5000,
92
+ loopholeWaitMinMs: 1500,
93
+ loopholeWaitMaxMs: 3000,
94
+ loopholePeekDurationMs: 600,
95
+ loopholeFireDurationMs: 1200,
96
+ loopholeReturnDurationMs: 400,
97
+ ...overrides,
98
+ };
99
+ }
100
+ //# sourceMappingURL=IStateConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IStateConfig.js","sourceRoot":"","sources":["../../src/states/IStateConfig.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,+DAA+D;AAC/D,oEAAoE;AACpE,6CAA6C;AAwY7C,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAiC;IAEjC,OAAO;QACL,0EAA0E;QAC1E,kBAAkB;QAClB,0EAA0E;QAC1E,aAAa,EAAE,GAAG;QAClB,mBAAmB,EAAE,GAAG;QACxB,mBAAmB,EAAE,GAAG;QACxB,sBAAsB,EAAE,GAAG;QAC3B,oBAAoB,EAAE,GAAG;QACzB,qBAAqB,EAAE,GAAG;QAC1B,oBAAoB,EAAE,GAAG;QAEzB,eAAe,EAAE,EAAE;QACnB,uBAAuB,EAAE,EAAE;QAC3B,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG;QACjB,iBAAiB,EAAE,GAAG;QACtB,qBAAqB,EAAE,GAAG;QAC1B,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,EAAE;QACxB,6BAA6B,EAAE,IAAK;QAEpC,0EAA0E;QAC1E,gBAAgB;QAChB,0EAA0E;QAC1E,kBAAkB,EAAE,GAAG;QACvB,sBAAsB,EAAE,CAAC,GAAG;QAC5B,oBAAoB,EAAE,CAAC,GAAG;QAE1B,UAAU,EAAE,IAAK;QACjB,eAAe,EAAE,IAAK;QAEtB,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,GAAG;QACpB,mBAAmB,EAAE,IAAK;QAC1B,2BAA2B,EAAE,IAAI;QACjC,uBAAuB,EAAE,EAAE;QAE3B,0EAA0E;QAC1E,iBAAiB;QACjB,0EAA0E;QAC1E,WAAW,EAAE,EAAE;QACf,sBAAsB,EAAE,GAAG;QAC3B,eAAe,EAAE,IAAK;QAEtB,cAAc,EAAE,GAAG;QACnB,YAAY,EAAE,GAAG;QACjB,aAAa,EAAE,GAAG;QAClB,YAAY,EAAE,IAAK;QAEnB,eAAe,EAAE,EAAE;QACnB,YAAY,EAAE,GAAG;QACjB,WAAW,EAAE,GAAG;QAEhB,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,GAAG;QAEtB,0EAA0E;QAC1E,gBAAgB;QAChB,0EAA0E;QAC1E,aAAa,EAAE,IAAK;QACpB,cAAc,EAAE,IAAK;QACrB,oBAAoB,EAAE,KAAM;QAC5B,oBAAoB,EAAE,IAAK;QAC3B,qBAAqB,EAAE,IAAK;QAC5B,aAAa,EAAE,IAAK;QACpB,qBAAqB,EAAE,GAAG;QAC1B,wBAAwB,EAAE,GAAG;QAE7B,oBAAoB,EAAE,SAAS;QAC/B,sBAAsB,EAAE,GAAG;QAC3B,uBAAuB,EAAE,GAAG;QAC5B,wBAAwB,EAAE,KAAM;QAChC,uBAAuB,EAAE,IAAK;QAC9B,mBAAmB,EAAE,IAAK;QAC1B,wBAAwB,EAAE,KAAM;QAChC,oBAAoB,EAAE,GAAG;QACzB,wBAAwB,EAAE,IAAK;QAC/B,gBAAgB,EAAE,GAAG;QACrB,kBAAkB,EAAE,IAAK;QACzB,qBAAqB,EAAE,CAAC;QACxB,kBAAkB,EAAE,IAAK;QACzB,mBAAmB,EAAE,GAAG;QACxB,cAAc,EAAE,IAAK;QAErB,iBAAiB,EAAE,IAAK;QACxB,iBAAiB,EAAE,IAAK;QACxB,sBAAsB,EAAE,GAAG;QAC3B,sBAAsB,EAAE,IAAK;QAC7B,wBAAwB,EAAE,GAAG;QAE7B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Injectable map of logical transition names to actual state ID strings.
3
+ *
4
+ * Each handler uses `this.tr.combatOnPanicked` instead of hardcoded `'FLEE'`,
5
+ * allowing SDK users to rename states freely.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * // Zombie game with custom state names
10
+ * const handlers = buildDefaultHandlerMap(cfg, {
11
+ * combatOnPanicked: 'shamble_away',
12
+ * fleeOnCalmed: 'wander',
13
+ * monsterOnNoEnemy: 'wander',
14
+ * });
15
+ * ```
16
+ */
17
+ export interface IStateTransitionMap {
18
+ idleOnEnemy: string;
19
+ idleOnTired: string;
20
+ idleOnSuspicious: string;
21
+ patrolOnEnemy: string;
22
+ patrolOnSquadIntel: string;
23
+ patrolOnSuspicious: string;
24
+ patrolOnNoWaypoint: string;
25
+ alertOnEnemy: string;
26
+ alertOnTimeout: string;
27
+ alertOnPanic: string;
28
+ combatOnNoEnemy: string;
29
+ combatOnLastKnown: string;
30
+ combatOnPanicked: string;
31
+ combatOnShaken: string;
32
+ combatOnWounded: string;
33
+ combatOnCover: string;
34
+ takeCoverOnNoEnemy: string;
35
+ takeCoverOnPanicked: string;
36
+ takeCoverOnShaken: string;
37
+ fleeOnCalmed: string;
38
+ searchOnEnemy: string;
39
+ searchOnTimeout: string;
40
+ grenadeOnComplete: string;
41
+ grenadeOnNoAmmo: string;
42
+ evadeOnClear: string;
43
+ evadeOnTimeout: string;
44
+ evadeOnNoSystem: string;
45
+ woundedOnHealed: string;
46
+ woundedOnPanic: string;
47
+ woundedOnTimeout: string;
48
+ retreatOnPanicked: string;
49
+ retreatOnStable: string;
50
+ retreatOnNoEnemy: string;
51
+ campOnEnemy: string;
52
+ campOnDanger: string;
53
+ sleepOnEnemy: string;
54
+ monsterOnNoEnemy: string;
55
+ monsterOnLastKnown: string;
56
+ chargeOnComplete: string;
57
+ chargeOnAbort: string;
58
+ stalkOnAttack: string;
59
+ stalkOnNoEnemy: string;
60
+ leapOnLand: string;
61
+ psiOnComplete: string;
62
+ psiOnNoEnemy: string;
63
+ eatCorpseOnDone: string;
64
+ eatCorpseOnInterrupt: string;
65
+ eatCorpseOnNoCorpse: string;
66
+ investigateOnEnemy: string;
67
+ investigateOnTimeout: string;
68
+ investigateOnPanic: string;
69
+ patrolOnWoundedAlly: string;
70
+ idleOnWoundedAlly: string;
71
+ helpWoundedOnEnemy: string;
72
+ helpWoundedOnComplete: string;
73
+ helpWoundedOnPanic: string;
74
+ combatOnKillWounded: string;
75
+ alertOnKillWounded: string;
76
+ killWoundedOnComplete: string;
77
+ killWoundedOnNoTarget: string;
78
+ killWoundedOnPanic: string;
79
+ killWoundedOnTimeout: string;
80
+ idleOnPackAlert: string;
81
+ patrolOnPackAlert: string;
82
+ alertOnPackCombat: string;
83
+ }
84
+ /**
85
+ * Creates a transition map with Chornobyl-style defaults.
86
+ * Pass `overrides` to remap any transitions for your own state names.
87
+ */
88
+ export declare function createDefaultTransitionMap(overrides?: Partial<IStateTransitionMap>): IStateTransitionMap;
89
+ //# sourceMappingURL=IStateTransitionMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IStateTransitionMap.d.ts","sourceRoot":"","sources":["../../src/states/IStateTransitionMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,mBAAmB;IAElC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAG3B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IAGrB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IAGtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAG1B,YAAY,EAAE,MAAM,CAAC;IAGrB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IAGxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IAGxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IAGxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IAGrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAG3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IAGtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IAGvB,UAAU,EAAE,MAAM,CAAC;IAGnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IAGrB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAG5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAG3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAG3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAG7B,eAAe,EAAI,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACvC,mBAAmB,CAqErB"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Creates a transition map with Chornobyl-style defaults.
3
+ * Pass `overrides` to remap any transitions for your own state names.
4
+ */
5
+ export function createDefaultTransitionMap(overrides) {
6
+ return {
7
+ idleOnEnemy: 'ALERT',
8
+ idleOnTired: 'CAMP',
9
+ idleOnSuspicious: 'ALERT',
10
+ patrolOnEnemy: 'ALERT',
11
+ patrolOnSquadIntel: 'ALERT',
12
+ patrolOnSuspicious: 'ALERT',
13
+ patrolOnNoWaypoint: 'IDLE',
14
+ alertOnEnemy: 'COMBAT',
15
+ alertOnTimeout: 'PATROL',
16
+ alertOnPanic: 'FLEE',
17
+ combatOnNoEnemy: 'IDLE',
18
+ combatOnLastKnown: 'SEARCH',
19
+ combatOnPanicked: 'FLEE',
20
+ combatOnShaken: 'RETREAT',
21
+ combatOnWounded: 'WOUNDED',
22
+ combatOnCover: 'TAKE_COVER',
23
+ takeCoverOnNoEnemy: 'SEARCH',
24
+ takeCoverOnPanicked: 'FLEE',
25
+ takeCoverOnShaken: 'RETREAT',
26
+ fleeOnCalmed: 'ALERT',
27
+ searchOnEnemy: 'ALERT',
28
+ searchOnTimeout: 'IDLE',
29
+ grenadeOnComplete: 'COMBAT',
30
+ grenadeOnNoAmmo: 'COMBAT',
31
+ evadeOnClear: 'COMBAT',
32
+ evadeOnTimeout: 'COMBAT',
33
+ evadeOnNoSystem: 'COMBAT',
34
+ woundedOnHealed: 'COMBAT',
35
+ woundedOnPanic: 'FLEE',
36
+ woundedOnTimeout: 'FLEE',
37
+ retreatOnPanicked: 'FLEE',
38
+ retreatOnStable: 'COMBAT',
39
+ retreatOnNoEnemy: 'SEARCH',
40
+ campOnEnemy: 'COMBAT',
41
+ campOnDanger: 'ALERT',
42
+ sleepOnEnemy: 'ALERT',
43
+ monsterOnNoEnemy: 'IDLE',
44
+ monsterOnLastKnown: 'SEARCH',
45
+ chargeOnComplete: 'COMBAT',
46
+ chargeOnAbort: 'IDLE',
47
+ stalkOnAttack: 'COMBAT',
48
+ stalkOnNoEnemy: 'SEARCH',
49
+ leapOnLand: 'COMBAT',
50
+ psiOnComplete: 'COMBAT',
51
+ psiOnNoEnemy: 'IDLE',
52
+ eatCorpseOnDone: 'IDLE',
53
+ eatCorpseOnInterrupt: 'ALERT',
54
+ eatCorpseOnNoCorpse: 'IDLE',
55
+ investigateOnEnemy: 'ALERT',
56
+ investigateOnTimeout: 'PATROL',
57
+ investigateOnPanic: 'FLEE',
58
+ patrolOnWoundedAlly: 'HELP_WOUNDED',
59
+ idleOnWoundedAlly: 'HELP_WOUNDED',
60
+ helpWoundedOnEnemy: 'ALERT',
61
+ helpWoundedOnComplete: 'PATROL',
62
+ helpWoundedOnPanic: 'FLEE',
63
+ combatOnKillWounded: 'KILL_WOUNDED',
64
+ alertOnKillWounded: 'KILL_WOUNDED',
65
+ killWoundedOnComplete: 'COMBAT',
66
+ killWoundedOnNoTarget: 'SEARCH',
67
+ killWoundedOnPanic: 'FLEE',
68
+ killWoundedOnTimeout: 'COMBAT',
69
+ idleOnPackAlert: 'ALERT',
70
+ patrolOnPackAlert: 'ALERT',
71
+ alertOnPackCombat: 'SEARCH',
72
+ ...overrides,
73
+ };
74
+ }
75
+ //# sourceMappingURL=IStateTransitionMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IStateTransitionMap.js","sourceRoot":"","sources":["../../src/states/IStateTransitionMap.ts"],"names":[],"mappings":"AA+HA;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,SAAwC;IAExC,OAAO;QACL,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,MAAM;QACnB,gBAAgB,EAAE,OAAO;QACzB,aAAa,EAAE,OAAO;QACtB,kBAAkB,EAAE,OAAO;QAC3B,kBAAkB,EAAE,OAAO;QAC3B,kBAAkB,EAAE,MAAM;QAC1B,YAAY,EAAE,QAAQ;QACtB,cAAc,EAAE,QAAQ;QACxB,YAAY,EAAE,MAAM;QACpB,eAAe,EAAE,MAAM;QACvB,iBAAiB,EAAE,QAAQ;QAC3B,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,SAAS;QACzB,eAAe,EAAE,SAAS;QAC1B,aAAa,EAAE,YAAY;QAC3B,kBAAkB,EAAE,QAAQ;QAC5B,mBAAmB,EAAE,MAAM;QAC3B,iBAAiB,EAAE,SAAS;QAC5B,YAAY,EAAE,OAAO;QACrB,aAAa,EAAE,OAAO;QACtB,eAAe,EAAE,MAAM;QACvB,iBAAiB,EAAE,QAAQ;QAC3B,eAAe,EAAE,QAAQ;QACzB,YAAY,EAAE,QAAQ;QACtB,cAAc,EAAE,QAAQ;QACxB,eAAe,EAAE,QAAQ;QACzB,eAAe,EAAE,QAAQ;QACzB,cAAc,EAAE,MAAM;QACtB,gBAAgB,EAAE,MAAM;QACxB,iBAAiB,EAAE,MAAM;QACzB,eAAe,EAAE,QAAQ;QACzB,gBAAgB,EAAE,QAAQ;QAC1B,WAAW,EAAE,QAAQ;QACrB,YAAY,EAAE,OAAO;QACrB,YAAY,EAAE,OAAO;QACrB,gBAAgB,EAAE,MAAM;QACxB,kBAAkB,EAAE,QAAQ;QAC5B,gBAAgB,EAAE,QAAQ;QAC1B,aAAa,EAAE,MAAM;QACrB,aAAa,EAAE,QAAQ;QACvB,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;QACpB,aAAa,EAAE,QAAQ;QACvB,YAAY,EAAE,MAAM;QACpB,eAAe,EAAE,MAAM;QACvB,oBAAoB,EAAE,OAAO;QAC7B,mBAAmB,EAAE,MAAM;QAC3B,kBAAkB,EAAE,OAAO;QAC3B,oBAAoB,EAAE,QAAQ;QAC9B,kBAAkB,EAAE,MAAM;QAC1B,mBAAmB,EAAE,cAAc;QACnC,iBAAiB,EAAE,cAAc;QACjC,kBAAkB,EAAE,OAAO;QAC3B,qBAAqB,EAAE,QAAQ;QAC/B,kBAAkB,EAAE,MAAM;QAC1B,mBAAmB,EAAE,cAAc;QACnC,kBAAkB,EAAE,cAAc;QAClC,qBAAqB,EAAE,QAAQ;QAC/B,qBAAqB,EAAE,QAAQ;QAC/B,kBAAkB,EAAE,MAAM;QAC1B,oBAAoB,EAAE,QAAQ;QAC9B,eAAe,EAAI,OAAO;QAC1B,iBAAiB,EAAE,OAAO;QAC1B,iBAAiB,EAAE,QAAQ;QAC3B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { INPCOnlineState } from './INPCOnlineState';
2
+ /**
3
+ * Create a new {@link INPCOnlineState} with all fields initialised to their
4
+ * zero/null/default values.
5
+ *
6
+ * Call once per NPC instance and store the result on the NPC's context object.
7
+ * All online state handlers share this bag (via INPCContext.state) and mutate
8
+ * it in-place each frame.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * class MyNPCContext implements INPCContext {
13
+ * readonly state = createDefaultNPCOnlineState();
14
+ * // ...
15
+ * }
16
+ * ```
17
+ */
18
+ export declare function createDefaultNPCOnlineState(): INPCOnlineState;
19
+ //# sourceMappingURL=NPCOnlineState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NPCOnlineState.d.ts","sourceRoot":"","sources":["../../src/states/NPCOnlineState.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,IAAI,eAAe,CA+D7D"}
@@ -0,0 +1,75 @@
1
+ // states/NPCOnlineState.ts
2
+ // Concrete factory for creating a fresh INPCOnlineState with all defaults.
3
+ /**
4
+ * Create a new {@link INPCOnlineState} with all fields initialised to their
5
+ * zero/null/default values.
6
+ *
7
+ * Call once per NPC instance and store the result on the NPC's context object.
8
+ * All online state handlers share this bag (via INPCContext.state) and mutate
9
+ * it in-place each frame.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * class MyNPCContext implements INPCContext {
14
+ * readonly state = createDefaultNPCOnlineState();
15
+ * // ...
16
+ * }
17
+ * ```
18
+ */
19
+ export function createDefaultNPCOnlineState() {
20
+ return {
21
+ // Target tracking
22
+ targetId: null,
23
+ lastKnownEnemyX: 0,
24
+ lastKnownEnemyY: 0,
25
+ targetLockUntilMs: 0,
26
+ // Timers (all start at 0 — handlers treat 0 as "never fired")
27
+ alertStartMs: 0,
28
+ searchStartMs: 0,
29
+ lastIdleAnimChangeMs: 0,
30
+ lastMeleeMs: 0,
31
+ lastShootMs: 0,
32
+ lastVocalizationMs: 0,
33
+ lastGrenadeMs: 0,
34
+ lastSupressiveFireMs: 0,
35
+ grenadeThrowStartMs: 0,
36
+ evadeStartMs: 0,
37
+ woundedStartMs: 0,
38
+ psiPhaseStartMs: 0,
39
+ investigateStartMs: 0,
40
+ investigateLookAroundStartMs: -1,
41
+ helpWoundedTargetId: null,
42
+ helpWoundedStartMs: 0,
43
+ helpWoundedAssistStartMs: -1,
44
+ helpWoundedX: 0,
45
+ helpWoundedY: 0,
46
+ killWoundedTargetId: null,
47
+ killWoundedStartMs: 0,
48
+ killWoundedAimStartMs: -1,
49
+ killWoundedTauntStartMs: -1,
50
+ killWoundedExecuteStartMs: -1,
51
+ killWoundedShotsFired: 0,
52
+ killWoundedPauseStartMs: -1,
53
+ killWoundedTargetX: 0,
54
+ killWoundedTargetY: 0,
55
+ packLastBroadcastMs: 0,
56
+ // Navigation
57
+ patrolWaypointIndex: 0,
58
+ searchWaypointIndex: 0,
59
+ // Loadout
60
+ primaryWeapon: null,
61
+ secondaryWeapon: null,
62
+ grenadeCount: 0,
63
+ medkitCount: 0,
64
+ // State flags
65
+ isAlert: false,
66
+ hasTakenCover: false,
67
+ coverPointX: 0,
68
+ coverPointY: 0,
69
+ loophole: null,
70
+ // Morale
71
+ morale: 0,
72
+ moraleState: 'STABLE',
73
+ };
74
+ }
75
+ //# sourceMappingURL=NPCOnlineState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NPCOnlineState.js","sourceRoot":"","sources":["../../src/states/NPCOnlineState.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,2EAA2E;AAI3E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,kBAAkB;QAClB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,CAAC;QAClB,eAAe,EAAE,CAAC;QAClB,iBAAiB,EAAE,CAAC;QAEpB,8DAA8D;QAC9D,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,CAAC;QAChB,oBAAoB,EAAE,CAAC;QACvB,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,kBAAkB,EAAE,CAAC;QACrB,aAAa,EAAE,CAAC;QAChB,oBAAoB,EAAE,CAAC;QACvB,mBAAmB,EAAE,CAAC;QACtB,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,CAAC;QAClB,kBAAkB,EAAE,CAAC;QACrB,4BAA4B,EAAE,CAAC,CAAC;QAEhC,mBAAmB,EAAE,IAAI;QACzB,kBAAkB,EAAE,CAAC;QACrB,wBAAwB,EAAE,CAAC,CAAC;QAC5B,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QAEf,mBAAmB,EAAE,IAAI;QACzB,kBAAkB,EAAE,CAAC;QACrB,qBAAqB,EAAE,CAAC,CAAC;QACzB,uBAAuB,EAAE,CAAC,CAAC;QAC3B,yBAAyB,EAAE,CAAC,CAAC;QAC7B,qBAAqB,EAAE,CAAC;QACxB,uBAAuB,EAAE,CAAC,CAAC;QAC3B,kBAAkB,EAAE,CAAC;QACrB,kBAAkB,EAAE,CAAC;QAErB,mBAAmB,EAAE,CAAC;QAEtB,aAAa;QACb,mBAAmB,EAAE,CAAC;QACtB,mBAAmB,EAAE,CAAC;QAEtB,UAAU;QACV,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QAEd,cAAc;QACd,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,IAAI;QAEd,SAAS;QACT,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,QAAQ;KACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,108 @@
1
+ import type { INPCPerception } from './INPCContext';
2
+ /**
3
+ * A single visible entity as stored and returned by NPCPerception.
4
+ * Used for both enemies and allies.
5
+ */
6
+ export interface IVisibleEntity {
7
+ readonly id: string;
8
+ readonly x: number;
9
+ readonly y: number;
10
+ readonly factionId: string;
11
+ }
12
+ /**
13
+ * A single item visible or in the NPC's vicinity.
14
+ */
15
+ export interface INearbyItem {
16
+ readonly id: string;
17
+ readonly x: number;
18
+ readonly y: number;
19
+ readonly type: string;
20
+ }
21
+ /**
22
+ * Concrete implementation of {@link INPCPerception}.
23
+ *
24
+ * Stores a per-frame snapshot of the NPC's world awareness.
25
+ * The host calls {@link sync} to update the snapshot each frame before
26
+ * state handlers run.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const perception = new NPCPerception();
31
+ *
32
+ * // Called by the host after ScenePerceptionSystem.update():
33
+ * perception.sync(visibleEnemies, visibleAllies, nearbyItems);
34
+ *
35
+ * // Called by state handlers:
36
+ * if (perception.hasVisibleEnemy()) {
37
+ * ctx.transition('COMBAT');
38
+ * }
39
+ * ```
40
+ */
41
+ export declare class NPCPerception implements INPCPerception {
42
+ private _visibleEnemies;
43
+ private _visibleAllies;
44
+ private _nearbyItems;
45
+ /**
46
+ * Push a fresh perception snapshot.
47
+ *
48
+ * Called by the host (e.g. PhaserNPCContext) each frame after the
49
+ * scene-level perception system has run. Creates internal shallow copies of
50
+ * all three arrays so neither the caller nor the state handlers can alias
51
+ * the stored data.
52
+ *
53
+ * @param enemies - All visible hostile entities this frame.
54
+ * @param allies - All visible friendly entities this frame.
55
+ * @param items - All nearby items this frame.
56
+ */
57
+ sync(enemies: ReadonlyArray<IVisibleEntity>, allies: ReadonlyArray<IVisibleEntity>, items: ReadonlyArray<INearbyItem>): void;
58
+ /**
59
+ * Clear all perception data.
60
+ * Equivalent to calling sync([], [], []).
61
+ */
62
+ clear(): void;
63
+ /**
64
+ * All visible enemies this frame.
65
+ *
66
+ * Returns the internal array cast as ReadonlyArray — no additional copy is
67
+ * made, so this is O(1). The contents are stable for the current frame.
68
+ */
69
+ getVisibleEnemies(): ReadonlyArray<{
70
+ id: string;
71
+ x: number;
72
+ y: number;
73
+ factionId: string;
74
+ }>;
75
+ /**
76
+ * All visible allied NPCs this frame.
77
+ *
78
+ * Returns the internal array cast as ReadonlyArray — O(1).
79
+ */
80
+ getVisibleAllies(): ReadonlyArray<{
81
+ id: string;
82
+ x: number;
83
+ y: number;
84
+ }>;
85
+ /**
86
+ * All nearby items this frame.
87
+ *
88
+ * Returns the internal array cast as ReadonlyArray — O(1).
89
+ */
90
+ getNearbyItems(): ReadonlyArray<{
91
+ id: string;
92
+ x: number;
93
+ y: number;
94
+ type: string;
95
+ }>;
96
+ /**
97
+ * Returns true if at least one visible enemy is in the snapshot.
98
+ * O(1) — length check only.
99
+ */
100
+ hasVisibleEnemy(): boolean;
101
+ /** Total number of visible enemies. */
102
+ get enemyCount(): number;
103
+ /** Total number of visible allies. */
104
+ get allyCount(): number;
105
+ /** Total number of nearby items. */
106
+ get itemCount(): number;
107
+ }
108
+ //# sourceMappingURL=NPCPerception.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NPCPerception.d.ts","sourceRoot":"","sources":["../../src/states/NPCPerception.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMpD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,YAAY,CAAqB;IAMzC;;;;;;;;;;;OAWG;IACH,IAAI,CACF,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,EACtC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,EACrC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAChC,IAAI;IAMP;;;OAGG;IACH,KAAK,IAAI,IAAI;IAUb;;;;;OAKG;IACH,iBAAiB,IAAI,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAI3F;;;;OAIG;IACH,gBAAgB,IAAI,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAIvE;;;;OAIG;IACH,cAAc,IAAI,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAInF;;;OAGG;IACH,eAAe,IAAI,OAAO;IAQ1B,uCAAuC;IACvC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,sCAAsC;IACtC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,oCAAoC;IACpC,IAAI,SAAS,IAAI,MAAM,CAEtB;CACF"}
@@ -0,0 +1,122 @@
1
+ // states/NPCPerception.ts
2
+ // Concrete implementation of INPCPerception that wraps a simple data store.
3
+ //
4
+ // The host (e.g. PhaserNPCContext) calls sync() each frame after running the
5
+ // scene-level perception system to push fresh enemy/ally/item snapshots.
6
+ // State handlers then call the standard INPCPerception query methods — they
7
+ // never see the internal arrays directly.
8
+ //
9
+ // Defensive copying: sync() takes read-only arrays but stores shallow copies
10
+ // internally. Mutations of the input arrays after sync() do not affect the
11
+ // stored snapshots; mutations of the returned ReadonlyArray views do not affect
12
+ // internal storage either.
13
+ // ---------------------------------------------------------------------------
14
+ // NPCPerception
15
+ // ---------------------------------------------------------------------------
16
+ /**
17
+ * Concrete implementation of {@link INPCPerception}.
18
+ *
19
+ * Stores a per-frame snapshot of the NPC's world awareness.
20
+ * The host calls {@link sync} to update the snapshot each frame before
21
+ * state handlers run.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * const perception = new NPCPerception();
26
+ *
27
+ * // Called by the host after ScenePerceptionSystem.update():
28
+ * perception.sync(visibleEnemies, visibleAllies, nearbyItems);
29
+ *
30
+ * // Called by state handlers:
31
+ * if (perception.hasVisibleEnemy()) {
32
+ * ctx.transition('COMBAT');
33
+ * }
34
+ * ```
35
+ */
36
+ export class NPCPerception {
37
+ constructor() {
38
+ this._visibleEnemies = [];
39
+ this._visibleAllies = [];
40
+ this._nearbyItems = [];
41
+ }
42
+ // -------------------------------------------------------------------------
43
+ // Host API
44
+ // -------------------------------------------------------------------------
45
+ /**
46
+ * Push a fresh perception snapshot.
47
+ *
48
+ * Called by the host (e.g. PhaserNPCContext) each frame after the
49
+ * scene-level perception system has run. Creates internal shallow copies of
50
+ * all three arrays so neither the caller nor the state handlers can alias
51
+ * the stored data.
52
+ *
53
+ * @param enemies - All visible hostile entities this frame.
54
+ * @param allies - All visible friendly entities this frame.
55
+ * @param items - All nearby items this frame.
56
+ */
57
+ sync(enemies, allies, items) {
58
+ this._visibleEnemies = [...enemies];
59
+ this._visibleAllies = [...allies];
60
+ this._nearbyItems = [...items];
61
+ }
62
+ /**
63
+ * Clear all perception data.
64
+ * Equivalent to calling sync([], [], []).
65
+ */
66
+ clear() {
67
+ this._visibleEnemies = [];
68
+ this._visibleAllies = [];
69
+ this._nearbyItems = [];
70
+ }
71
+ // -------------------------------------------------------------------------
72
+ // INPCPerception implementation
73
+ // -------------------------------------------------------------------------
74
+ /**
75
+ * All visible enemies this frame.
76
+ *
77
+ * Returns the internal array cast as ReadonlyArray — no additional copy is
78
+ * made, so this is O(1). The contents are stable for the current frame.
79
+ */
80
+ getVisibleEnemies() {
81
+ return this._visibleEnemies;
82
+ }
83
+ /**
84
+ * All visible allied NPCs this frame.
85
+ *
86
+ * Returns the internal array cast as ReadonlyArray — O(1).
87
+ */
88
+ getVisibleAllies() {
89
+ return this._visibleAllies;
90
+ }
91
+ /**
92
+ * All nearby items this frame.
93
+ *
94
+ * Returns the internal array cast as ReadonlyArray — O(1).
95
+ */
96
+ getNearbyItems() {
97
+ return this._nearbyItems;
98
+ }
99
+ /**
100
+ * Returns true if at least one visible enemy is in the snapshot.
101
+ * O(1) — length check only.
102
+ */
103
+ hasVisibleEnemy() {
104
+ return this._visibleEnemies.length > 0;
105
+ }
106
+ // -------------------------------------------------------------------------
107
+ // Convenience queries (not part of INPCPerception but useful for tests)
108
+ // -------------------------------------------------------------------------
109
+ /** Total number of visible enemies. */
110
+ get enemyCount() {
111
+ return this._visibleEnemies.length;
112
+ }
113
+ /** Total number of visible allies. */
114
+ get allyCount() {
115
+ return this._visibleAllies.length;
116
+ }
117
+ /** Total number of nearby items. */
118
+ get itemCount() {
119
+ return this._nearbyItems.length;
120
+ }
121
+ }
122
+ //# sourceMappingURL=NPCPerception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NPCPerception.js","sourceRoot":"","sources":["../../src/states/NPCPerception.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,4EAA4E;AAC5E,EAAE;AACF,6EAA6E;AAC7E,yEAAyE;AACzE,4EAA4E;AAC5E,0CAA0C;AAC1C,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,gFAAgF;AAChF,2BAA2B;AA6B3B,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,aAAa;IAA1B;QACU,oBAAe,GAAqB,EAAE,CAAC;QACvC,mBAAc,GAAqB,EAAE,CAAC;QACtC,iBAAY,GAAkB,EAAE,CAAC;IAgG3C,CAAC;IA9FC,4EAA4E;IAC5E,WAAW;IACX,4EAA4E;IAE5E;;;;;;;;;;;OAWG;IACH,IAAI,CACF,OAAsC,EACtC,MAAqC,EACrC,KAAiC;QAEjC,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,4EAA4E;IAC5E,gCAAgC;IAChC,4EAA4E;IAE5E;;;;;OAKG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,4EAA4E;IAC5E,wEAAwE;IACxE,4EAA4E;IAE5E,uCAAuC;IACvC,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,sCAAsC;IACtC,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,oCAAoC;IACpC,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClC,CAAC;CACF"}