@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.
- package/LICENSE +21 -0
- package/README.md +385 -0
- package/dist/animation/AnimationController.d.ts +60 -0
- package/dist/animation/AnimationController.d.ts.map +1 -0
- package/dist/animation/AnimationController.js +71 -0
- package/dist/animation/AnimationController.js.map +1 -0
- package/dist/animation/AnimationSelector.d.ts +108 -0
- package/dist/animation/AnimationSelector.d.ts.map +1 -0
- package/dist/animation/AnimationSelector.js +194 -0
- package/dist/animation/AnimationSelector.js.map +1 -0
- package/dist/animation/index.d.ts +5 -0
- package/dist/animation/index.d.ts.map +1 -0
- package/dist/animation/index.js +4 -0
- package/dist/animation/index.js.map +1 -0
- package/dist/combat/CombatTransitionChain.d.ts +95 -0
- package/dist/combat/CombatTransitionChain.d.ts.map +1 -0
- package/dist/combat/CombatTransitionChain.js +117 -0
- package/dist/combat/CombatTransitionChain.js.map +1 -0
- package/dist/combat/LoadoutBuilder.d.ts +83 -0
- package/dist/combat/LoadoutBuilder.d.ts.map +1 -0
- package/dist/combat/LoadoutBuilder.js +213 -0
- package/dist/combat/LoadoutBuilder.js.map +1 -0
- package/dist/combat/MonsterAbilityData.d.ts +97 -0
- package/dist/combat/MonsterAbilityData.d.ts.map +1 -0
- package/dist/combat/MonsterAbilityData.js +94 -0
- package/dist/combat/MonsterAbilityData.js.map +1 -0
- package/dist/combat/WeaponSelector.d.ts +47 -0
- package/dist/combat/WeaponSelector.d.ts.map +1 -0
- package/dist/combat/WeaponSelector.js +180 -0
- package/dist/combat/WeaponSelector.js.map +1 -0
- package/dist/combat/index.d.ts +9 -0
- package/dist/combat/index.d.ts.map +1 -0
- package/dist/combat/index.js +6 -0
- package/dist/combat/index.js.map +1 -0
- package/dist/conditions/ConditionBank.d.ts +179 -0
- package/dist/conditions/ConditionBank.d.ts.map +1 -0
- package/dist/conditions/ConditionBank.js +220 -0
- package/dist/conditions/ConditionBank.js.map +1 -0
- package/dist/conditions/index.d.ts +3 -0
- package/dist/conditions/index.d.ts.map +1 -0
- package/dist/conditions/index.js +3 -0
- package/dist/conditions/index.js.map +1 -0
- package/dist/config/createDefaultAIConfig.d.ts +25 -0
- package/dist/config/createDefaultAIConfig.d.ts.map +1 -0
- package/dist/config/createDefaultAIConfig.js +147 -0
- package/dist/config/createDefaultAIConfig.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/cover/CoverAccessAdapter.d.ts +61 -0
- package/dist/cover/CoverAccessAdapter.d.ts.map +1 -0
- package/dist/cover/CoverAccessAdapter.js +74 -0
- package/dist/cover/CoverAccessAdapter.js.map +1 -0
- package/dist/cover/CoverEvaluators.d.ts +43 -0
- package/dist/cover/CoverEvaluators.d.ts.map +1 -0
- package/dist/cover/CoverEvaluators.js +193 -0
- package/dist/cover/CoverEvaluators.js.map +1 -0
- package/dist/cover/CoverLockRegistry.d.ts +50 -0
- package/dist/cover/CoverLockRegistry.d.ts.map +1 -0
- package/dist/cover/CoverLockRegistry.js +164 -0
- package/dist/cover/CoverLockRegistry.js.map +1 -0
- package/dist/cover/CoverRecommender.d.ts +32 -0
- package/dist/cover/CoverRecommender.d.ts.map +1 -0
- package/dist/cover/CoverRecommender.js +45 -0
- package/dist/cover/CoverRecommender.js.map +1 -0
- package/dist/cover/CoverRegistry.d.ts +97 -0
- package/dist/cover/CoverRegistry.d.ts.map +1 -0
- package/dist/cover/CoverRegistry.js +223 -0
- package/dist/cover/CoverRegistry.js.map +1 -0
- package/dist/cover/ICoverEvaluator.d.ts +15 -0
- package/dist/cover/ICoverEvaluator.d.ts.map +1 -0
- package/dist/cover/ICoverEvaluator.js +4 -0
- package/dist/cover/ICoverEvaluator.js.map +1 -0
- package/dist/cover/ICoverLockConfig.d.ts +83 -0
- package/dist/cover/ICoverLockConfig.d.ts.map +1 -0
- package/dist/cover/ICoverLockConfig.js +21 -0
- package/dist/cover/ICoverLockConfig.js.map +1 -0
- package/dist/cover/LoopholeGenerator.d.ts +44 -0
- package/dist/cover/LoopholeGenerator.d.ts.map +1 -0
- package/dist/cover/LoopholeGenerator.js +96 -0
- package/dist/cover/LoopholeGenerator.js.map +1 -0
- package/dist/cover/index.d.ts +11 -0
- package/dist/cover/index.d.ts.map +1 -0
- package/dist/cover/index.js +8 -0
- package/dist/cover/index.js.map +1 -0
- package/dist/goap/EvadeHazardAction.d.ts +34 -0
- package/dist/goap/EvadeHazardAction.d.ts.map +1 -0
- package/dist/goap/EvadeHazardAction.js +48 -0
- package/dist/goap/EvadeHazardAction.js.map +1 -0
- package/dist/goap/GOAPController.d.ts +114 -0
- package/dist/goap/GOAPController.d.ts.map +1 -0
- package/dist/goap/GOAPController.js +191 -0
- package/dist/goap/GOAPController.js.map +1 -0
- package/dist/goap/GoalSelector.d.ts +40 -0
- package/dist/goap/GoalSelector.d.ts.map +1 -0
- package/dist/goap/GoalSelector.js +115 -0
- package/dist/goap/GoalSelector.js.map +1 -0
- package/dist/goap/IHazardZoneAccess.d.ts +16 -0
- package/dist/goap/IHazardZoneAccess.d.ts.map +1 -0
- package/dist/goap/IHazardZoneAccess.js +2 -0
- package/dist/goap/IHazardZoneAccess.js.map +1 -0
- package/dist/goap/WorldStateBuilder.d.ts +27 -0
- package/dist/goap/WorldStateBuilder.d.ts.map +1 -0
- package/dist/goap/WorldStateBuilder.js +51 -0
- package/dist/goap/WorldStateBuilder.js.map +1 -0
- package/dist/goap/index.d.ts +9 -0
- package/dist/goap/index.d.ts.map +1 -0
- package/dist/goap/index.js +6 -0
- package/dist/goap/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/navigation/PathSmoother.d.ts +29 -0
- package/dist/navigation/PathSmoother.d.ts.map +1 -0
- package/dist/navigation/PathSmoother.js +172 -0
- package/dist/navigation/PathSmoother.js.map +1 -0
- package/dist/navigation/RestrictedZoneManager.d.ts +83 -0
- package/dist/navigation/RestrictedZoneManager.d.ts.map +1 -0
- package/dist/navigation/RestrictedZoneManager.js +179 -0
- package/dist/navigation/RestrictedZoneManager.js.map +1 -0
- package/dist/navigation/SmoothPathFollower.d.ts +55 -0
- package/dist/navigation/SmoothPathFollower.d.ts.map +1 -0
- package/dist/navigation/SmoothPathFollower.js +132 -0
- package/dist/navigation/SmoothPathFollower.js.map +1 -0
- package/dist/navigation/SteeringBehaviors.d.ts +123 -0
- package/dist/navigation/SteeringBehaviors.d.ts.map +1 -0
- package/dist/navigation/SteeringBehaviors.js +211 -0
- package/dist/navigation/SteeringBehaviors.js.map +1 -0
- package/dist/navigation/index.d.ts +7 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +6 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/perception/NPCSensors.d.ts +129 -0
- package/dist/perception/NPCSensors.d.ts.map +1 -0
- package/dist/perception/NPCSensors.js +147 -0
- package/dist/perception/NPCSensors.js.map +1 -0
- package/dist/perception/PerceptionQuery.d.ts +65 -0
- package/dist/perception/PerceptionQuery.d.ts.map +1 -0
- package/dist/perception/PerceptionQuery.js +199 -0
- package/dist/perception/PerceptionQuery.js.map +1 -0
- package/dist/perception/index.d.ts +4 -0
- package/dist/perception/index.d.ts.map +1 -0
- package/dist/perception/index.js +4 -0
- package/dist/perception/index.js.map +1 -0
- package/dist/plugin/AIPlugin.d.ts +71 -0
- package/dist/plugin/AIPlugin.d.ts.map +1 -0
- package/dist/plugin/AIPlugin.js +134 -0
- package/dist/plugin/AIPlugin.js.map +1 -0
- package/dist/plugin/index.d.ts +3 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +3 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/ports/AIPorts.d.ts +13 -0
- package/dist/ports/AIPorts.d.ts.map +1 -0
- package/dist/ports/AIPorts.js +14 -0
- package/dist/ports/AIPorts.js.map +1 -0
- package/dist/ports/ICoverPointSource.d.ts +27 -0
- package/dist/ports/ICoverPointSource.d.ts.map +1 -0
- package/dist/ports/ICoverPointSource.js +4 -0
- package/dist/ports/ICoverPointSource.js.map +1 -0
- package/dist/ports/IPerceptionProvider.d.ts +42 -0
- package/dist/ports/IPerceptionProvider.d.ts.map +1 -0
- package/dist/ports/IPerceptionProvider.js +4 -0
- package/dist/ports/IPerceptionProvider.js.map +1 -0
- package/dist/ports/index.d.ts +4 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +3 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/sound/VocalizationTypes.d.ts +57 -0
- package/dist/sound/VocalizationTypes.d.ts.map +1 -0
- package/dist/sound/VocalizationTypes.js +87 -0
- package/dist/sound/VocalizationTypes.js.map +1 -0
- package/dist/sound/index.d.ts +3 -0
- package/dist/sound/index.d.ts.map +1 -0
- package/dist/sound/index.js +3 -0
- package/dist/sound/index.js.map +1 -0
- package/dist/squad/SquadSharedTarget.d.ts +137 -0
- package/dist/squad/SquadSharedTarget.d.ts.map +1 -0
- package/dist/squad/SquadSharedTarget.js +145 -0
- package/dist/squad/SquadSharedTarget.js.map +1 -0
- package/dist/squad/SquadTactics.d.ts +63 -0
- package/dist/squad/SquadTactics.d.ts.map +1 -0
- package/dist/squad/SquadTactics.js +76 -0
- package/dist/squad/SquadTactics.js.map +1 -0
- package/dist/squad/index.d.ts +5 -0
- package/dist/squad/index.d.ts.map +1 -0
- package/dist/squad/index.js +4 -0
- package/dist/squad/index.js.map +1 -0
- package/dist/states/INPCContext.d.ts +550 -0
- package/dist/states/INPCContext.d.ts.map +1 -0
- package/dist/states/INPCContext.js +17 -0
- package/dist/states/INPCContext.js.map +1 -0
- package/dist/states/INPCOnlineState.d.ts +202 -0
- package/dist/states/INPCOnlineState.d.ts.map +1 -0
- package/dist/states/INPCOnlineState.js +9 -0
- package/dist/states/INPCOnlineState.js.map +1 -0
- package/dist/states/IOnlineStateHandler.d.ts +58 -0
- package/dist/states/IOnlineStateHandler.d.ts.map +1 -0
- package/dist/states/IOnlineStateHandler.js +13 -0
- package/dist/states/IOnlineStateHandler.js.map +1 -0
- package/dist/states/IStateConfig.d.ts +272 -0
- package/dist/states/IStateConfig.d.ts.map +1 -0
- package/dist/states/IStateConfig.js +100 -0
- package/dist/states/IStateConfig.js.map +1 -0
- package/dist/states/IStateTransitionMap.d.ts +89 -0
- package/dist/states/IStateTransitionMap.d.ts.map +1 -0
- package/dist/states/IStateTransitionMap.js +75 -0
- package/dist/states/IStateTransitionMap.js.map +1 -0
- package/dist/states/NPCOnlineState.d.ts +19 -0
- package/dist/states/NPCOnlineState.d.ts.map +1 -0
- package/dist/states/NPCOnlineState.js +75 -0
- package/dist/states/NPCOnlineState.js.map +1 -0
- package/dist/states/NPCPerception.d.ts +108 -0
- package/dist/states/NPCPerception.d.ts.map +1 -0
- package/dist/states/NPCPerception.js +122 -0
- package/dist/states/NPCPerception.js.map +1 -0
- package/dist/states/OnlineAIDriver.d.ts +64 -0
- package/dist/states/OnlineAIDriver.d.ts.map +1 -0
- package/dist/states/OnlineAIDriver.js +171 -0
- package/dist/states/OnlineAIDriver.js.map +1 -0
- package/dist/states/OnlineStateRegistryBuilder.d.ts +115 -0
- package/dist/states/OnlineStateRegistryBuilder.d.ts.map +1 -0
- package/dist/states/OnlineStateRegistryBuilder.js +184 -0
- package/dist/states/OnlineStateRegistryBuilder.js.map +1 -0
- package/dist/states/StateHandlerMap.d.ts +52 -0
- package/dist/states/StateHandlerMap.d.ts.map +1 -0
- package/dist/states/StateHandlerMap.js +88 -0
- package/dist/states/StateHandlerMap.js.map +1 -0
- package/dist/states/eat-corpse/EatCorpseState.d.ts +32 -0
- package/dist/states/eat-corpse/EatCorpseState.d.ts.map +1 -0
- package/dist/states/eat-corpse/EatCorpseState.js +126 -0
- package/dist/states/eat-corpse/EatCorpseState.js.map +1 -0
- package/dist/states/eat-corpse/EatCorpseTransitionGuard.d.ts +34 -0
- package/dist/states/eat-corpse/EatCorpseTransitionGuard.d.ts.map +1 -0
- package/dist/states/eat-corpse/EatCorpseTransitionGuard.js +82 -0
- package/dist/states/eat-corpse/EatCorpseTransitionGuard.js.map +1 -0
- package/dist/states/eat-corpse/ICorpseSource.d.ts +87 -0
- package/dist/states/eat-corpse/ICorpseSource.d.ts.map +1 -0
- package/dist/states/eat-corpse/ICorpseSource.js +5 -0
- package/dist/states/eat-corpse/ICorpseSource.js.map +1 -0
- package/dist/states/eat-corpse/IEatCorpseConfig.d.ts +75 -0
- package/dist/states/eat-corpse/IEatCorpseConfig.d.ts.map +1 -0
- package/dist/states/eat-corpse/IEatCorpseConfig.js +23 -0
- package/dist/states/eat-corpse/IEatCorpseConfig.js.map +1 -0
- package/dist/states/eat-corpse/IEatCorpsePhase.d.ts +23 -0
- package/dist/states/eat-corpse/IEatCorpsePhase.d.ts.map +1 -0
- package/dist/states/eat-corpse/IEatCorpsePhase.js +5 -0
- package/dist/states/eat-corpse/IEatCorpsePhase.js.map +1 -0
- package/dist/states/eat-corpse/index.d.ts +7 -0
- package/dist/states/eat-corpse/index.d.ts.map +1 -0
- package/dist/states/eat-corpse/index.js +11 -0
- package/dist/states/eat-corpse/index.js.map +1 -0
- package/dist/states/handlers/AlertState.d.ts +18 -0
- package/dist/states/handlers/AlertState.d.ts.map +1 -0
- package/dist/states/handlers/AlertState.js +104 -0
- package/dist/states/handlers/AlertState.js.map +1 -0
- package/dist/states/handlers/CampState.d.ts +18 -0
- package/dist/states/handlers/CampState.d.ts.map +1 -0
- package/dist/states/handlers/CampState.js +94 -0
- package/dist/states/handlers/CampState.js.map +1 -0
- package/dist/states/handlers/ChargeState.d.ts +18 -0
- package/dist/states/handlers/ChargeState.d.ts.map +1 -0
- package/dist/states/handlers/ChargeState.js +103 -0
- package/dist/states/handlers/ChargeState.js.map +1 -0
- package/dist/states/handlers/CombatState.d.ts +19 -0
- package/dist/states/handlers/CombatState.d.ts.map +1 -0
- package/dist/states/handlers/CombatState.js +137 -0
- package/dist/states/handlers/CombatState.js.map +1 -0
- package/dist/states/handlers/CombatTransitionHandler.d.ts +34 -0
- package/dist/states/handlers/CombatTransitionHandler.d.ts.map +1 -0
- package/dist/states/handlers/CombatTransitionHandler.js +137 -0
- package/dist/states/handlers/CombatTransitionHandler.js.map +1 -0
- package/dist/states/handlers/DeadState.d.ts +16 -0
- package/dist/states/handlers/DeadState.d.ts.map +1 -0
- package/dist/states/handlers/DeadState.js +35 -0
- package/dist/states/handlers/DeadState.js.map +1 -0
- package/dist/states/handlers/EvadeGrenadeState.d.ts +23 -0
- package/dist/states/handlers/EvadeGrenadeState.d.ts.map +1 -0
- package/dist/states/handlers/EvadeGrenadeState.js +93 -0
- package/dist/states/handlers/EvadeGrenadeState.js.map +1 -0
- package/dist/states/handlers/FleeState.d.ts +18 -0
- package/dist/states/handlers/FleeState.d.ts.map +1 -0
- package/dist/states/handlers/FleeState.js +61 -0
- package/dist/states/handlers/FleeState.js.map +1 -0
- package/dist/states/handlers/GrenadeState.d.ts +18 -0
- package/dist/states/handlers/GrenadeState.d.ts.map +1 -0
- package/dist/states/handlers/GrenadeState.js +61 -0
- package/dist/states/handlers/GrenadeState.js.map +1 -0
- package/dist/states/handlers/HelpWoundedState.d.ts +27 -0
- package/dist/states/handlers/HelpWoundedState.d.ts.map +1 -0
- package/dist/states/handlers/HelpWoundedState.js +131 -0
- package/dist/states/handlers/HelpWoundedState.js.map +1 -0
- package/dist/states/handlers/IdleState.d.ts +18 -0
- package/dist/states/handlers/IdleState.d.ts.map +1 -0
- package/dist/states/handlers/IdleState.js +127 -0
- package/dist/states/handlers/IdleState.js.map +1 -0
- package/dist/states/handlers/InvestigateState.d.ts +27 -0
- package/dist/states/handlers/InvestigateState.d.ts.map +1 -0
- package/dist/states/handlers/InvestigateState.js +145 -0
- package/dist/states/handlers/InvestigateState.js.map +1 -0
- package/dist/states/handlers/KillWoundedState.d.ts +27 -0
- package/dist/states/handlers/KillWoundedState.d.ts.map +1 -0
- package/dist/states/handlers/KillWoundedState.js +147 -0
- package/dist/states/handlers/KillWoundedState.js.map +1 -0
- package/dist/states/handlers/LeapState.d.ts +18 -0
- package/dist/states/handlers/LeapState.d.ts.map +1 -0
- package/dist/states/handlers/LeapState.js +115 -0
- package/dist/states/handlers/LeapState.js.map +1 -0
- package/dist/states/handlers/MonsterCombatController.d.ts +55 -0
- package/dist/states/handlers/MonsterCombatController.d.ts.map +1 -0
- package/dist/states/handlers/MonsterCombatController.js +152 -0
- package/dist/states/handlers/MonsterCombatController.js.map +1 -0
- package/dist/states/handlers/PatrolState.d.ts +18 -0
- package/dist/states/handlers/PatrolState.d.ts.map +1 -0
- package/dist/states/handlers/PatrolState.js +137 -0
- package/dist/states/handlers/PatrolState.js.map +1 -0
- package/dist/states/handlers/PsiAttackState.d.ts +18 -0
- package/dist/states/handlers/PsiAttackState.d.ts.map +1 -0
- package/dist/states/handlers/PsiAttackState.js +101 -0
- package/dist/states/handlers/PsiAttackState.js.map +1 -0
- package/dist/states/handlers/RetreatState.d.ts +18 -0
- package/dist/states/handlers/RetreatState.d.ts.map +1 -0
- package/dist/states/handlers/RetreatState.js +131 -0
- package/dist/states/handlers/RetreatState.js.map +1 -0
- package/dist/states/handlers/SearchState.d.ts +18 -0
- package/dist/states/handlers/SearchState.d.ts.map +1 -0
- package/dist/states/handlers/SearchState.js +64 -0
- package/dist/states/handlers/SearchState.js.map +1 -0
- package/dist/states/handlers/SleepState.d.ts +18 -0
- package/dist/states/handlers/SleepState.d.ts.map +1 -0
- package/dist/states/handlers/SleepState.js +94 -0
- package/dist/states/handlers/SleepState.js.map +1 -0
- package/dist/states/handlers/StalkState.d.ts +18 -0
- package/dist/states/handlers/StalkState.d.ts.map +1 -0
- package/dist/states/handlers/StalkState.js +82 -0
- package/dist/states/handlers/StalkState.js.map +1 -0
- package/dist/states/handlers/TakeCoverState.d.ts +18 -0
- package/dist/states/handlers/TakeCoverState.d.ts.map +1 -0
- package/dist/states/handlers/TakeCoverState.js +208 -0
- package/dist/states/handlers/TakeCoverState.js.map +1 -0
- package/dist/states/handlers/WoundedState.d.ts +18 -0
- package/dist/states/handlers/WoundedState.d.ts.map +1 -0
- package/dist/states/handlers/WoundedState.js +71 -0
- package/dist/states/handlers/WoundedState.js.map +1 -0
- package/dist/states/handlers/_utils.d.ts +55 -0
- package/dist/states/handlers/_utils.d.ts.map +1 -0
- package/dist/states/handlers/_utils.js +88 -0
- package/dist/states/handlers/_utils.js.map +1 -0
- package/dist/states/handlers/index.d.ts +25 -0
- package/dist/states/handlers/index.d.ts.map +1 -0
- package/dist/states/handlers/index.js +28 -0
- package/dist/states/handlers/index.js.map +1 -0
- package/dist/states/index.d.ts +17 -0
- package/dist/states/index.d.ts.map +1 -0
- package/dist/states/index.js +12 -0
- package/dist/states/index.js.map +1 -0
- package/dist/states/pack/IPackAccess.d.ts +46 -0
- package/dist/states/pack/IPackAccess.d.ts.map +1 -0
- package/dist/states/pack/IPackAccess.js +8 -0
- package/dist/states/pack/IPackAccess.js.map +1 -0
- package/dist/suspicion/SuspicionAccumulator.d.ts +166 -0
- package/dist/suspicion/SuspicionAccumulator.d.ts.map +1 -0
- package/dist/suspicion/SuspicionAccumulator.js +191 -0
- package/dist/suspicion/SuspicionAccumulator.js.map +1 -0
- package/dist/suspicion/index.d.ts +3 -0
- package/dist/suspicion/index.d.ts.map +1 -0
- package/dist/suspicion/index.js +2 -0
- package/dist/suspicion/index.js.map +1 -0
- package/dist/types/IAnimationTypes.d.ts +28 -0
- package/dist/types/IAnimationTypes.d.ts.map +1 -0
- package/dist/types/IAnimationTypes.js +17 -0
- package/dist/types/IAnimationTypes.js.map +1 -0
- package/dist/types/ICoverPoint.d.ts +76 -0
- package/dist/types/ICoverPoint.d.ts.map +1 -0
- package/dist/types/ICoverPoint.js +21 -0
- package/dist/types/ICoverPoint.js.map +1 -0
- package/dist/types/IOnlineAIConfig.d.ts +150 -0
- package/dist/types/IOnlineAIConfig.d.ts.map +1 -0
- package/dist/types/IOnlineAIConfig.js +5 -0
- package/dist/types/IOnlineAIConfig.js.map +1 -0
- package/dist/types/IPerceptionTypes.d.ts +94 -0
- package/dist/types/IPerceptionTypes.d.ts.map +1 -0
- package/dist/types/IPerceptionTypes.js +37 -0
- package/dist/types/IPerceptionTypes.js.map +1 -0
- package/dist/types/IWeaponTypes.d.ts +56 -0
- package/dist/types/IWeaponTypes.d.ts.map +1 -0
- package/dist/types/IWeaponTypes.js +15 -0
- package/dist/types/IWeaponTypes.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +123 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { selectBestWeapon, shouldThrowGrenade, shouldUseMedkit } from './WeaponSelector';
|
|
2
|
+
export type { IWeaponContext } from './WeaponSelector';
|
|
3
|
+
export { LoadoutBuilder, createLoadout, FactionWeaponPreference, DEFAULT_LOADOUT_RECIPES } from './LoadoutBuilder';
|
|
4
|
+
export type { ILoadoutRecipe } from './LoadoutBuilder';
|
|
5
|
+
export { evaluateTransitions, DEFAULT_COMBAT_RULES, createDefaultCombatTransitionConfig, WoundedRule, NoAmmoRule, EvadeDangerRule, MoraleRule, GrenadeOpportunityRule, SearchRule, } from './CombatTransitionChain';
|
|
6
|
+
export type { ICombatContext, ITransitionRule, ICombatTransitionConfig, TransitionResult, } from './CombatTransitionChain';
|
|
7
|
+
export { MonsterAbility, DEFAULT_ABILITY_RULES, DEFAULT_MONSTER_FLEE_CONFIG, createLinearChargeData, createApproachData, createLeapData, createChannelAbilityData, selectMonsterAbility, shouldMonsterFlee, } from './MonsterAbilityData';
|
|
8
|
+
export type { ILinearChargeData, LinearChargePhase, IApproachData, ApproachPhase, ILeapData, LeapPhase, IChannelAbilityData, ChannelAbilityPhase, IMonsterAbilityContext, IMonsterAbilityRule, IMonsterFleeConfig, } from './MonsterAbilityData';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/combat/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACzF,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACnH,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mCAAmC,EACnC,WAAW,EACX,UAAU,EACV,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// combat sub-path barrel
|
|
2
|
+
export { selectBestWeapon, shouldThrowGrenade, shouldUseMedkit } from './WeaponSelector';
|
|
3
|
+
export { LoadoutBuilder, createLoadout, FactionWeaponPreference, DEFAULT_LOADOUT_RECIPES } from './LoadoutBuilder';
|
|
4
|
+
export { evaluateTransitions, DEFAULT_COMBAT_RULES, createDefaultCombatTransitionConfig, WoundedRule, NoAmmoRule, EvadeDangerRule, MoraleRule, GrenadeOpportunityRule, SearchRule, } from './CombatTransitionChain';
|
|
5
|
+
export { MonsterAbility, DEFAULT_ABILITY_RULES, DEFAULT_MONSTER_FLEE_CONFIG, createLinearChargeData, createApproachData, createLeapData, createChannelAbilityData, selectMonsterAbility, shouldMonsterFlee, } from './MonsterAbilityData';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/combat/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEnH,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mCAAmC,EACnC,WAAW,EACX,UAAU,EACV,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,UAAU,GACX,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Named constants for the built-in condition channels.
|
|
3
|
+
*
|
|
4
|
+
* Using these avoids magic strings in your code, but they are purely
|
|
5
|
+
* convenience — any string is a valid {@link ConditionChannel}.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ConditionChannels: {
|
|
8
|
+
/** Haemorrhage — damage over time from wounds. */
|
|
9
|
+
readonly BLEEDING: "bleeding";
|
|
10
|
+
/** Ionising radiation from anomalies or contaminated zones. */
|
|
11
|
+
readonly RADIATION: "radiation";
|
|
12
|
+
/** Hunger / food deprivation. */
|
|
13
|
+
readonly HUNGER: "hunger";
|
|
14
|
+
/** Fatigue / physical tiredness (stamina depletion). */
|
|
15
|
+
readonly STAMINA: "stamina";
|
|
16
|
+
/** Alcohol or drug intoxication. */
|
|
17
|
+
readonly INTOXICATION: "intoxication";
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Open condition channel type.
|
|
21
|
+
*
|
|
22
|
+
* Derived from {@link ConditionChannels} so the type and constants stay in sync.
|
|
23
|
+
* Any string is valid — games can extend with their own channels without
|
|
24
|
+
* touching the SDK.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* // Using a built-in channel:
|
|
28
|
+
* bank.apply(ConditionChannels.RADIATION, 0.1);
|
|
29
|
+
*
|
|
30
|
+
* // Using a custom game-specific channel:
|
|
31
|
+
* bank.apply('psi_overload', 0.3);
|
|
32
|
+
*/
|
|
33
|
+
export type ConditionChannel = (typeof ConditionChannels)[keyof typeof ConditionChannels] | (string & {});
|
|
34
|
+
/**
|
|
35
|
+
* Tuning parameters for a {@link ConditionBank}.
|
|
36
|
+
* All fields have defaults via {@link createDefaultConditionBankConfig}.
|
|
37
|
+
*/
|
|
38
|
+
export interface IConditionBankConfig {
|
|
39
|
+
/**
|
|
40
|
+
* How fast all channels recover (level/second) when no per-channel rate
|
|
41
|
+
* is set. A value of 0.01 means a fully saturated channel recovers in ~100s.
|
|
42
|
+
* @default 0.01
|
|
43
|
+
*/
|
|
44
|
+
readonly defaultDecayRate: number;
|
|
45
|
+
/**
|
|
46
|
+
* Per-channel decay-rate overrides.
|
|
47
|
+
*
|
|
48
|
+
* Radiation lingers longer than alcohol — set `{ radiation: 0.002 }` to
|
|
49
|
+
* slow its recovery to ~500s while keeping the default for other channels.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* { radiation: 0.002, bleeding: 0.05 }
|
|
53
|
+
*/
|
|
54
|
+
readonly channelDecayRates?: Readonly<Partial<Record<string, number>>>;
|
|
55
|
+
/**
|
|
56
|
+
* Maximum intensity value for any channel.
|
|
57
|
+
* Intensities are clamped to `[0, maxLevel]` by {@link ConditionBank.apply}.
|
|
58
|
+
*
|
|
59
|
+
* @default 1.0
|
|
60
|
+
*/
|
|
61
|
+
readonly maxLevel?: number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create an {@link IConditionBankConfig} with production defaults.
|
|
65
|
+
* Pass a partial override object to tune individual values.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* const cfg = createDefaultConditionBankConfig({ channelDecayRates: { radiation: 0.002 } });
|
|
69
|
+
*/
|
|
70
|
+
export declare function createDefaultConditionBankConfig(overrides?: Partial<IConditionBankConfig>): IConditionBankConfig;
|
|
71
|
+
/**
|
|
72
|
+
* Per-NPC condition state store.
|
|
73
|
+
*
|
|
74
|
+
* Tracks HP-independent condition intensities ([0, maxLevel]) for an NPC.
|
|
75
|
+
* The host allocates one `ConditionBank` per NPC, calls `update(deltaSec)`
|
|
76
|
+
* each game frame, and exposes it to state handlers via the
|
|
77
|
+
* {@link IConditionAccess} seam on `INPCContext`.
|
|
78
|
+
*
|
|
79
|
+
* ### Wiring example (host layer)
|
|
80
|
+
* ```ts
|
|
81
|
+
* const bank = new ConditionBank({ channelDecayRates: { radiation: 0.002 } });
|
|
82
|
+
*
|
|
83
|
+
* const ctx: INPCContext = {
|
|
84
|
+
* // ...
|
|
85
|
+
* conditions: bank,
|
|
86
|
+
* };
|
|
87
|
+
*
|
|
88
|
+
* // Per-frame update (before the state machine tick):
|
|
89
|
+
* bank.update(deltaMs / 1000);
|
|
90
|
+
*
|
|
91
|
+
* // Game event handlers:
|
|
92
|
+
* onRadiationExposure(npcId) { bankFor(npcId).apply('radiation', 0.02); }
|
|
93
|
+
* onNPCRested(npcId) { bankFor(npcId).recover('stamina', 0.5); }
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* ### Opt-in / opt-out
|
|
97
|
+
* - **Full feature**: implement `ctx.conditions` as shown above.
|
|
98
|
+
* - **Write only**: implement without wiring to state handlers.
|
|
99
|
+
* - **Fully disabled**: leave `ctx.conditions = null` — all state handler
|
|
100
|
+
* checks are no-ops via `ctx.conditions?.hasCondition(...)`.
|
|
101
|
+
*/
|
|
102
|
+
export declare class ConditionBank {
|
|
103
|
+
private readonly config;
|
|
104
|
+
/** Inner store: channel → current intensity. Only non-zero channels are kept. */
|
|
105
|
+
private readonly store;
|
|
106
|
+
/** Scratch array for two-pass channel eviction in {@link update}. */
|
|
107
|
+
private readonly _toDelete;
|
|
108
|
+
constructor(config?: Partial<IConditionBankConfig>);
|
|
109
|
+
/**
|
|
110
|
+
* Increase the intensity of a condition channel.
|
|
111
|
+
*
|
|
112
|
+
* The new level is clamped to `[0, maxLevel]`.
|
|
113
|
+
* Calling `apply` multiple times accumulates — the channel does not reset.
|
|
114
|
+
*
|
|
115
|
+
* **Host use only.** State handlers must not call `apply()` — conditions
|
|
116
|
+
* are external inputs driven by the host layer (anomaly damage, bleeding
|
|
117
|
+
* events, etc.). State handlers read via `hasCondition()` / `getLevel()`.
|
|
118
|
+
*
|
|
119
|
+
* @param channel - Target condition channel.
|
|
120
|
+
* @param amount - Positive amount to add (e.g. 0.1 per radiation burst).
|
|
121
|
+
* Negative values are ignored (use {@link recover} instead).
|
|
122
|
+
*/
|
|
123
|
+
apply(channel: ConditionChannel, amount: number): void;
|
|
124
|
+
/**
|
|
125
|
+
* Decrease the intensity of a condition channel.
|
|
126
|
+
*
|
|
127
|
+
* The new level is clamped to `[0, ...]`. Use this for instant recovery
|
|
128
|
+
* events (e.g. anti-rad item use). For time-based recovery use `update()`.
|
|
129
|
+
*
|
|
130
|
+
* @param channel - Target condition channel.
|
|
131
|
+
* @param amount - Positive amount to remove.
|
|
132
|
+
* Negative values are ignored (use {@link apply} instead).
|
|
133
|
+
*/
|
|
134
|
+
recover(channel: ConditionChannel, amount: number): void;
|
|
135
|
+
/**
|
|
136
|
+
* Current intensity of the given channel in `[0, maxLevel]`.
|
|
137
|
+
* Returns `0` if the channel has never been applied or has fully recovered.
|
|
138
|
+
*
|
|
139
|
+
* @param channel - Condition channel to query.
|
|
140
|
+
*/
|
|
141
|
+
getLevel(channel: ConditionChannel): number;
|
|
142
|
+
/**
|
|
143
|
+
* Returns `true` if the channel's intensity is **strictly greater than**
|
|
144
|
+
* the given threshold.
|
|
145
|
+
*
|
|
146
|
+
* @param channel - Condition channel to check.
|
|
147
|
+
* @param threshold - Comparison threshold (exclusive). @default 0
|
|
148
|
+
*/
|
|
149
|
+
hasCondition(channel: ConditionChannel, threshold?: number): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* All channels whose current intensity is greater than zero.
|
|
152
|
+
*
|
|
153
|
+
* Returns a read-only snapshot — do not hold references across frames.
|
|
154
|
+
*/
|
|
155
|
+
getActiveChannels(): ReadonlyArray<{
|
|
156
|
+
channel: ConditionChannel;
|
|
157
|
+
level: number;
|
|
158
|
+
}>;
|
|
159
|
+
/**
|
|
160
|
+
* Apply time-based decay to all active condition channels.
|
|
161
|
+
*
|
|
162
|
+
* The host calls this each game frame with `deltaMs / 1000`.
|
|
163
|
+
* Each channel decays by its configured rate (level/second) until it reaches zero,
|
|
164
|
+
* at which point it is removed from the active set.
|
|
165
|
+
*
|
|
166
|
+
* @param deltaSec - Elapsed time since last update, in seconds.
|
|
167
|
+
*/
|
|
168
|
+
update(deltaSec: number): void;
|
|
169
|
+
/**
|
|
170
|
+
* Clear one condition channel or all channels.
|
|
171
|
+
*
|
|
172
|
+
* Pass `channel` to clear a single condition (e.g. after an anti-rad cure).
|
|
173
|
+
* Omit `channel` to clear all conditions (e.g. on NPC reset or respawn).
|
|
174
|
+
*
|
|
175
|
+
* @param channel - Channel to clear, or undefined to clear everything.
|
|
176
|
+
*/
|
|
177
|
+
clear(channel?: ConditionChannel): void;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=ConditionBank.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionBank.d.ts","sourceRoot":"","sources":["../../src/conditions/ConditionBank.ts"],"names":[],"mappings":"AAcA;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;IAC5B,kDAAkD;;IAElD,+DAA+D;;IAE/D,iCAAiC;;IAEjC,wDAAwD;;IAExD,oCAAoC;;CAE5B,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,gBAAgB,GACxB,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,GAC1D,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAMlB;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC;;;;;;;;OAQG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAEvE;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACxC,oBAAoB,CAEtB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IAExD,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IAEnD,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAE9B,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAalD;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMtD;;;;;;;;;OASG;IACH,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAgBxD;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAI3C;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,SAAS,SAAI,GAAG,OAAO;IAI/D;;;;OAIG;IACH,iBAAiB,IAAI,aAAa,CAAC;QAAE,OAAO,EAAE,gBAAgB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAYhF;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAwB9B;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI;CAOxC"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// conditions/ConditionBank.ts
|
|
2
|
+
// Per-NPC condition state — HP-independent channels (radiation, bleeding, etc.)
|
|
3
|
+
//
|
|
4
|
+
// Design principles:
|
|
5
|
+
// • Pure class — no INPCContext dependency, no Phaser references.
|
|
6
|
+
// • Multi-channel storage with per-channel decay rates (mirrors MemoryBank).
|
|
7
|
+
// • update(deltaSec) called by the host each frame; state handlers only read.
|
|
8
|
+
// • Open string channel type — SDK provides named constants, game can add its own.
|
|
9
|
+
// • maxLevel is configurable so games can use [0..1] or [0..100] as they prefer.
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Channel types
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
/**
|
|
14
|
+
* Named constants for the built-in condition channels.
|
|
15
|
+
*
|
|
16
|
+
* Using these avoids magic strings in your code, but they are purely
|
|
17
|
+
* convenience — any string is a valid {@link ConditionChannel}.
|
|
18
|
+
*/
|
|
19
|
+
export const ConditionChannels = {
|
|
20
|
+
/** Haemorrhage — damage over time from wounds. */
|
|
21
|
+
BLEEDING: 'bleeding',
|
|
22
|
+
/** Ionising radiation from anomalies or contaminated zones. */
|
|
23
|
+
RADIATION: 'radiation',
|
|
24
|
+
/** Hunger / food deprivation. */
|
|
25
|
+
HUNGER: 'hunger',
|
|
26
|
+
/** Fatigue / physical tiredness (stamina depletion). */
|
|
27
|
+
STAMINA: 'stamina',
|
|
28
|
+
/** Alcohol or drug intoxication. */
|
|
29
|
+
INTOXICATION: 'intoxication',
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Create an {@link IConditionBankConfig} with production defaults.
|
|
33
|
+
* Pass a partial override object to tune individual values.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* const cfg = createDefaultConditionBankConfig({ channelDecayRates: { radiation: 0.002 } });
|
|
37
|
+
*/
|
|
38
|
+
export function createDefaultConditionBankConfig(overrides) {
|
|
39
|
+
return { defaultDecayRate: 0.01, ...overrides };
|
|
40
|
+
}
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// ConditionBank
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
/**
|
|
45
|
+
* Per-NPC condition state store.
|
|
46
|
+
*
|
|
47
|
+
* Tracks HP-independent condition intensities ([0, maxLevel]) for an NPC.
|
|
48
|
+
* The host allocates one `ConditionBank` per NPC, calls `update(deltaSec)`
|
|
49
|
+
* each game frame, and exposes it to state handlers via the
|
|
50
|
+
* {@link IConditionAccess} seam on `INPCContext`.
|
|
51
|
+
*
|
|
52
|
+
* ### Wiring example (host layer)
|
|
53
|
+
* ```ts
|
|
54
|
+
* const bank = new ConditionBank({ channelDecayRates: { radiation: 0.002 } });
|
|
55
|
+
*
|
|
56
|
+
* const ctx: INPCContext = {
|
|
57
|
+
* // ...
|
|
58
|
+
* conditions: bank,
|
|
59
|
+
* };
|
|
60
|
+
*
|
|
61
|
+
* // Per-frame update (before the state machine tick):
|
|
62
|
+
* bank.update(deltaMs / 1000);
|
|
63
|
+
*
|
|
64
|
+
* // Game event handlers:
|
|
65
|
+
* onRadiationExposure(npcId) { bankFor(npcId).apply('radiation', 0.02); }
|
|
66
|
+
* onNPCRested(npcId) { bankFor(npcId).recover('stamina', 0.5); }
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* ### Opt-in / opt-out
|
|
70
|
+
* - **Full feature**: implement `ctx.conditions` as shown above.
|
|
71
|
+
* - **Write only**: implement without wiring to state handlers.
|
|
72
|
+
* - **Fully disabled**: leave `ctx.conditions = null` — all state handler
|
|
73
|
+
* checks are no-ops via `ctx.conditions?.hasCondition(...)`.
|
|
74
|
+
*/
|
|
75
|
+
export class ConditionBank {
|
|
76
|
+
constructor(config) {
|
|
77
|
+
/** Inner store: channel → current intensity. Only non-zero channels are kept. */
|
|
78
|
+
this.store = new Map();
|
|
79
|
+
/** Scratch array for two-pass channel eviction in {@link update}. */
|
|
80
|
+
this._toDelete = [];
|
|
81
|
+
const merged = createDefaultConditionBankConfig(config);
|
|
82
|
+
this.config = {
|
|
83
|
+
defaultDecayRate: merged.defaultDecayRate,
|
|
84
|
+
channelDecayRates: merged.channelDecayRates ?? {},
|
|
85
|
+
maxLevel: merged.maxLevel ?? 1.0,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// Write
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
/**
|
|
92
|
+
* Increase the intensity of a condition channel.
|
|
93
|
+
*
|
|
94
|
+
* The new level is clamped to `[0, maxLevel]`.
|
|
95
|
+
* Calling `apply` multiple times accumulates — the channel does not reset.
|
|
96
|
+
*
|
|
97
|
+
* **Host use only.** State handlers must not call `apply()` — conditions
|
|
98
|
+
* are external inputs driven by the host layer (anomaly damage, bleeding
|
|
99
|
+
* events, etc.). State handlers read via `hasCondition()` / `getLevel()`.
|
|
100
|
+
*
|
|
101
|
+
* @param channel - Target condition channel.
|
|
102
|
+
* @param amount - Positive amount to add (e.g. 0.1 per radiation burst).
|
|
103
|
+
* Negative values are ignored (use {@link recover} instead).
|
|
104
|
+
*/
|
|
105
|
+
apply(channel, amount) {
|
|
106
|
+
if (!(amount > 0))
|
|
107
|
+
return; // rejects NaN and ≤ 0
|
|
108
|
+
const current = this.store.get(channel) ?? 0;
|
|
109
|
+
this.store.set(channel, Math.min(current + amount, this.config.maxLevel));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Decrease the intensity of a condition channel.
|
|
113
|
+
*
|
|
114
|
+
* The new level is clamped to `[0, ...]`. Use this for instant recovery
|
|
115
|
+
* events (e.g. anti-rad item use). For time-based recovery use `update()`.
|
|
116
|
+
*
|
|
117
|
+
* @param channel - Target condition channel.
|
|
118
|
+
* @param amount - Positive amount to remove.
|
|
119
|
+
* Negative values are ignored (use {@link apply} instead).
|
|
120
|
+
*/
|
|
121
|
+
recover(channel, amount) {
|
|
122
|
+
if (!(amount > 0))
|
|
123
|
+
return; // rejects NaN and ≤ 0
|
|
124
|
+
const current = this.store.get(channel) ?? 0;
|
|
125
|
+
if (current <= 0)
|
|
126
|
+
return;
|
|
127
|
+
const next = current - amount;
|
|
128
|
+
if (next <= 0) {
|
|
129
|
+
this.store.delete(channel);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
this.store.set(channel, next);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
// Read
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
/**
|
|
139
|
+
* Current intensity of the given channel in `[0, maxLevel]`.
|
|
140
|
+
* Returns `0` if the channel has never been applied or has fully recovered.
|
|
141
|
+
*
|
|
142
|
+
* @param channel - Condition channel to query.
|
|
143
|
+
*/
|
|
144
|
+
getLevel(channel) {
|
|
145
|
+
return this.store.get(channel) ?? 0;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Returns `true` if the channel's intensity is **strictly greater than**
|
|
149
|
+
* the given threshold.
|
|
150
|
+
*
|
|
151
|
+
* @param channel - Condition channel to check.
|
|
152
|
+
* @param threshold - Comparison threshold (exclusive). @default 0
|
|
153
|
+
*/
|
|
154
|
+
hasCondition(channel, threshold = 0) {
|
|
155
|
+
return (this.store.get(channel) ?? 0) > threshold;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* All channels whose current intensity is greater than zero.
|
|
159
|
+
*
|
|
160
|
+
* Returns a read-only snapshot — do not hold references across frames.
|
|
161
|
+
*/
|
|
162
|
+
getActiveChannels() {
|
|
163
|
+
const result = [];
|
|
164
|
+
for (const [channel, level] of this.store) {
|
|
165
|
+
result.push({ channel, level });
|
|
166
|
+
}
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
// Time-based decay
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
/**
|
|
173
|
+
* Apply time-based decay to all active condition channels.
|
|
174
|
+
*
|
|
175
|
+
* The host calls this each game frame with `deltaMs / 1000`.
|
|
176
|
+
* Each channel decays by its configured rate (level/second) until it reaches zero,
|
|
177
|
+
* at which point it is removed from the active set.
|
|
178
|
+
*
|
|
179
|
+
* @param deltaSec - Elapsed time since last update, in seconds.
|
|
180
|
+
*/
|
|
181
|
+
update(deltaSec) {
|
|
182
|
+
if (!(deltaSec > 0))
|
|
183
|
+
return; // rejects NaN and negative (would increase levels)
|
|
184
|
+
this._toDelete.length = 0;
|
|
185
|
+
for (const [channel, level] of this.store) {
|
|
186
|
+
const rate = this.config.channelDecayRates[channel]
|
|
187
|
+
?? this.config.defaultDecayRate;
|
|
188
|
+
const next = level - rate * deltaSec;
|
|
189
|
+
if (next <= 0) {
|
|
190
|
+
this._toDelete.push(channel);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
this.store.set(channel, next);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
for (let i = 0; i < this._toDelete.length; i++) {
|
|
197
|
+
this.store.delete(this._toDelete[i]);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
// Lifecycle
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
/**
|
|
204
|
+
* Clear one condition channel or all channels.
|
|
205
|
+
*
|
|
206
|
+
* Pass `channel` to clear a single condition (e.g. after an anti-rad cure).
|
|
207
|
+
* Omit `channel` to clear all conditions (e.g. on NPC reset or respawn).
|
|
208
|
+
*
|
|
209
|
+
* @param channel - Channel to clear, or undefined to clear everything.
|
|
210
|
+
*/
|
|
211
|
+
clear(channel) {
|
|
212
|
+
if (channel === undefined) {
|
|
213
|
+
this.store.clear();
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
this.store.delete(channel);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=ConditionBank.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionBank.js","sourceRoot":"","sources":["../../src/conditions/ConditionBank.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/conditions/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gCAAgC,GACjC,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conditions/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gCAAgC,GACjC,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { IOnlineAIConfig } from '../types/IOnlineAIConfig';
|
|
2
|
+
/**
|
|
3
|
+
* Create a fully populated AI config with production defaults.
|
|
4
|
+
*
|
|
5
|
+
* Each subsystem section can be partially overridden. Values not provided
|
|
6
|
+
* fall back to battle-tested defaults from the reference implementation.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const config = createDefaultAIConfig({
|
|
11
|
+
* cover: { searchRadius: 500 },
|
|
12
|
+
* navigation: { arrivalThreshold: 12 },
|
|
13
|
+
* });
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare function createDefaultAIConfig(overrides?: Partial<{
|
|
17
|
+
cover: Partial<IOnlineAIConfig['cover']>;
|
|
18
|
+
navigation: Partial<IOnlineAIConfig['navigation']>;
|
|
19
|
+
weapon: Partial<IOnlineAIConfig['weapon']>;
|
|
20
|
+
squad: Partial<IOnlineAIConfig['squad']>;
|
|
21
|
+
monsterAbility: Partial<IOnlineAIConfig['monsterAbility']>;
|
|
22
|
+
perception: Partial<IOnlineAIConfig['perception']>;
|
|
23
|
+
goap: Partial<IOnlineAIConfig['goap']>;
|
|
24
|
+
}>): IOnlineAIConfig;
|
|
25
|
+
//# sourceMappingURL=createDefaultAIConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDefaultAIConfig.d.ts","sourceRoot":"","sources":["../../src/config/createDefaultAIConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,UAAU,EAAE,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;IACnD,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,cAAc,EAAE,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3D,UAAU,EAAE,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;IACnD,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;CACxC,CAAC,GACD,eAAe,CAgIjB"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// config/createDefaultAIConfig.ts
|
|
2
|
+
// Factory for production-tuned AI configuration with selective overrides.
|
|
3
|
+
import { WeaponCategory } from '../types/IWeaponTypes';
|
|
4
|
+
/**
|
|
5
|
+
* Create a fully populated AI config with production defaults.
|
|
6
|
+
*
|
|
7
|
+
* Each subsystem section can be partially overridden. Values not provided
|
|
8
|
+
* fall back to battle-tested defaults from the reference implementation.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const config = createDefaultAIConfig({
|
|
13
|
+
* cover: { searchRadius: 500 },
|
|
14
|
+
* navigation: { arrivalThreshold: 12 },
|
|
15
|
+
* });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function createDefaultAIConfig(overrides) {
|
|
19
|
+
return {
|
|
20
|
+
cover: {
|
|
21
|
+
searchRadius: 400,
|
|
22
|
+
pointRadius: 24,
|
|
23
|
+
occupyDistance: 30,
|
|
24
|
+
minScoreThreshold: 0.1,
|
|
25
|
+
closeMaxRange: 200,
|
|
26
|
+
farMaxRange: 600,
|
|
27
|
+
ambushMinAngle: Math.PI / 3,
|
|
28
|
+
ambushMaxAngle: (2 * Math.PI) / 3,
|
|
29
|
+
ambushMinDist: 100,
|
|
30
|
+
ambushMaxDist: 300,
|
|
31
|
+
recommendHpCritical: 0.2,
|
|
32
|
+
recommendHpHealthy: 0.6,
|
|
33
|
+
recommendMoraleDemoralized: -0.5,
|
|
34
|
+
recommendOutnumberedCount: 3,
|
|
35
|
+
loopholeFireArc: (2 * Math.PI) / 3,
|
|
36
|
+
loopholeMaxPerCover: 3,
|
|
37
|
+
loopholeOffsetDistance: 16,
|
|
38
|
+
...overrides?.cover,
|
|
39
|
+
},
|
|
40
|
+
navigation: {
|
|
41
|
+
smoothPointsPerSegment: 8,
|
|
42
|
+
smoothRandomOffset: 10,
|
|
43
|
+
arrivalThreshold: 8,
|
|
44
|
+
dubinsMaxInstantTurn: Math.PI / 4,
|
|
45
|
+
dubinsTurningRadius: 60,
|
|
46
|
+
velocityCurveFast: 1.0,
|
|
47
|
+
velocityCurveMedium: 0.7,
|
|
48
|
+
velocityCurveSlow: 0.4,
|
|
49
|
+
velocityTransitionRate: 0.15,
|
|
50
|
+
restrictedZoneSafeMargin: 20,
|
|
51
|
+
...overrides?.navigation,
|
|
52
|
+
},
|
|
53
|
+
weapon: {
|
|
54
|
+
weapons: {
|
|
55
|
+
[WeaponCategory.PISTOL]: {
|
|
56
|
+
category: WeaponCategory.PISTOL,
|
|
57
|
+
range: { min: 0, max: 250 },
|
|
58
|
+
damage: 15,
|
|
59
|
+
fireRate: 1.5,
|
|
60
|
+
defaultAmmo: 15,
|
|
61
|
+
},
|
|
62
|
+
[WeaponCategory.SHOTGUN]: {
|
|
63
|
+
category: WeaponCategory.SHOTGUN,
|
|
64
|
+
range: { min: 0, max: 150 },
|
|
65
|
+
damage: 40,
|
|
66
|
+
fireRate: 1.0,
|
|
67
|
+
defaultAmmo: 8,
|
|
68
|
+
},
|
|
69
|
+
[WeaponCategory.RIFLE]: {
|
|
70
|
+
category: WeaponCategory.RIFLE,
|
|
71
|
+
range: { min: 100, max: 400 },
|
|
72
|
+
damage: 25,
|
|
73
|
+
fireRate: 2.0,
|
|
74
|
+
defaultAmmo: 30,
|
|
75
|
+
},
|
|
76
|
+
[WeaponCategory.SNIPER]: {
|
|
77
|
+
category: WeaponCategory.SNIPER,
|
|
78
|
+
range: { min: 300, max: 800 },
|
|
79
|
+
damage: 60,
|
|
80
|
+
fireRate: 0.5,
|
|
81
|
+
defaultAmmo: 10,
|
|
82
|
+
},
|
|
83
|
+
[WeaponCategory.GRENADE]: {
|
|
84
|
+
category: WeaponCategory.GRENADE,
|
|
85
|
+
range: { min: 100, max: 400 },
|
|
86
|
+
damage: 80,
|
|
87
|
+
fireRate: 0.2,
|
|
88
|
+
defaultAmmo: 1,
|
|
89
|
+
},
|
|
90
|
+
[WeaponCategory.MEDKIT]: {
|
|
91
|
+
category: WeaponCategory.MEDKIT,
|
|
92
|
+
range: { min: 0, max: 0 },
|
|
93
|
+
damage: 0,
|
|
94
|
+
fireRate: 0,
|
|
95
|
+
defaultAmmo: 1,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
shotgunEffectiveMax: 150,
|
|
99
|
+
rifleEffectiveMin: 100,
|
|
100
|
+
rifleEffectiveMax: 400,
|
|
101
|
+
sniperEffectiveMin: 300,
|
|
102
|
+
grenadeMinDistance: 100,
|
|
103
|
+
grenadeMaxDistance: 400,
|
|
104
|
+
grenadeMinEnemies: 2,
|
|
105
|
+
medkitHpThreshold: 0.5,
|
|
106
|
+
medkitEmergencyThreshold: 0.2,
|
|
107
|
+
...overrides?.weapon,
|
|
108
|
+
},
|
|
109
|
+
squad: {
|
|
110
|
+
outnumberRatio: 1.5,
|
|
111
|
+
moralePanickedThreshold: -0.7,
|
|
112
|
+
nearbyRadius: 200,
|
|
113
|
+
...overrides?.squad,
|
|
114
|
+
},
|
|
115
|
+
monsterAbility: {
|
|
116
|
+
chargeWindupMs: 600,
|
|
117
|
+
chargeDamageMult: 2.0,
|
|
118
|
+
chargeSpeedMult: 2.0,
|
|
119
|
+
stalkApproachDist: 80,
|
|
120
|
+
stalkAlphaInvisible: 0.08,
|
|
121
|
+
stalkUncloakDist: 50,
|
|
122
|
+
leapWindupMs: 400,
|
|
123
|
+
leapAirtimeMs: 350,
|
|
124
|
+
leapDamageMult: 1.5,
|
|
125
|
+
psiChannelMs: 2000,
|
|
126
|
+
psiRadius: 200,
|
|
127
|
+
psiDamagePerTick: 15,
|
|
128
|
+
...overrides?.monsterAbility,
|
|
129
|
+
},
|
|
130
|
+
perception: {
|
|
131
|
+
visionRange: 300,
|
|
132
|
+
visionHalfAngle: Math.PI / 3,
|
|
133
|
+
hearingRange: 500,
|
|
134
|
+
weaponSoundRange: 600,
|
|
135
|
+
...overrides?.perception,
|
|
136
|
+
},
|
|
137
|
+
goap: {
|
|
138
|
+
replanIntervalMs: 5000,
|
|
139
|
+
eliteRankThreshold: 5,
|
|
140
|
+
healHpThreshold: 0.3,
|
|
141
|
+
maxPlanDepth: 10,
|
|
142
|
+
dangerMemoryMaxAge: 5000,
|
|
143
|
+
...overrides?.goap,
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=createDefaultAIConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDefaultAIConfig.js","sourceRoot":"","sources":["../../src/config/createDefaultAIConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
|