123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- class AITargetCallbacksPlayer : AITargetCallbacks
- {
- private int m_iChestBoneIndex;
- private PlayerBase m_Player;
- void AITargetCallbacksPlayer(PlayerBase pPlayer)
- {
- m_Player = pPlayer;
-
- m_iChestBoneIndex = m_Player.GetBoneIndexByName("Spine3");
- }
-
- override vector GetHeadPositionWS()
- {
- vector position;
- MiscGameplayFunctions.GetHeadBonePos(m_Player, position);
- return position;
- }
-
- override vector GetVisionPointPositionWS(EntityAI pApplicant)
- {
- DayZInfected infected = DayZInfected.Cast(pApplicant);
- if (infected)
- {
- DayZInfectedInputController ic = infected.GetInputController();
- if (ic)
- {
- int mindState = ic.GetMindState();
- if (mindState >= DayZInfectedConstants.MINDSTATE_ALERTED)
- {
- return GetHeadPositionWS();
- }
- else
- {
- if (m_iChestBoneIndex != -1)
- return m_Player.GetBonePositionWS(m_iChestBoneIndex);
- }
- }
- }
-
- return m_Player.GetPosition() + "0 1 0";
- }
-
- override float GetMaxVisionRangeModifier(EntityAI pApplicant)
- {
- HumanMovementState state = new HumanMovementState();
- m_Player.GetMovementState(state);
-
- float mod = 1.0;
- float speedCoef = PlayerConstants.AI_VISIBILITY_RUN;
- float stanceCoef = PlayerConstants.AI_VISIBILITY_STANDING;
-
- //! player speed mofifications
- switch (AITargetCallbacksPlayer.StanceToMovementIdxTranslation(state))
- {
- case DayZPlayerConstants.MOVEMENTIDX_WALK:
- speedCoef = PlayerConstants.AI_VISIBILITY_WALK;
- break;
-
- case DayZPlayerConstants.MOVEMENTIDX_IDLE:
- speedCoef = PlayerConstants.AI_VISIBILITY_IDLE;
- break;
- }
-
- //! stance modification
- switch (state.m_iStanceIdx)
- {
- case DayZPlayerConstants.STANCEIDX_CROUCH:
- case DayZPlayerConstants.STANCEIDX_RAISEDCROUCH:
- stanceCoef = PlayerConstants.AI_VISIBILITY_CROUCH;
- break;
-
- case DayZPlayerConstants.STANCEIDX_PRONE:
- case DayZPlayerConstants.STANCEIDX_RAISEDPRONE:
- stanceCoef = PlayerConstants.AI_VISIBILITY_PRONE;
- break;
- }
-
- //! mean value of the coefs
- mod = (speedCoef + stanceCoef) / 2;
-
- return mod;
- }
-
- //! Translates players speed (idx) and corrects it by current stance
- //! used mainly for visibility/audibility of player to AI
- static int StanceToMovementIdxTranslation(HumanMovementState pState)
- {
- int movementSpeed = 0;
- switch (pState.m_iStanceIdx)
- {
- case DayZPlayerConstants.STANCEIDX_CROUCH:
- case DayZPlayerConstants.STANCEIDX_RAISEDCROUCH:
- switch (pState.m_iMovement)
- {
- case DayZPlayerConstants.MOVEMENTIDX_IDLE:
- movementSpeed = DayZPlayerConstants.MOVEMENTIDX_IDLE;
- break;
-
- case DayZPlayerConstants.MOVEMENTIDX_WALK:
- case DayZPlayerConstants.MOVEMENTIDX_RUN:
- movementSpeed = DayZPlayerConstants.MOVEMENTIDX_WALK;
- break;
-
- case DayZPlayerConstants.MOVEMENTIDX_SPRINT:
- movementSpeed = DayZPlayerConstants.MOVEMENTIDX_CROUCH_RUN;
- break;
- }
- break;
-
- case DayZPlayerConstants.STANCEIDX_PRONE:
- case DayZPlayerConstants.STANCEIDX_RAISEDPRONE:
- switch (pState.m_iMovement)
- {
- case DayZPlayerConstants.MOVEMENTIDX_IDLE:
- movementSpeed = DayZPlayerConstants.MOVEMENTIDX_IDLE;
- break;
-
- default:
- movementSpeed = DayZPlayerConstants.MOVEMENTIDX_WALK;
- break;
- }
- break;
-
- default:
- movementSpeed = pState.m_iMovement;
- }
-
- return movementSpeed;
- }
-
- //! DEPRECATED
- private int m_iHeadBoneIndex;
- }
|