@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,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"}
|