aitargetcallbacksplayer.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. class AITargetCallbacksPlayer : AITargetCallbacks
  2. {
  3. private int m_iChestBoneIndex;
  4. private PlayerBase m_Player;
  5. void AITargetCallbacksPlayer(PlayerBase pPlayer)
  6. {
  7. m_Player = pPlayer;
  8. m_iChestBoneIndex = m_Player.GetBoneIndexByName("Spine3");
  9. }
  10. override vector GetHeadPositionWS()
  11. {
  12. vector position;
  13. MiscGameplayFunctions.GetHeadBonePos(m_Player, position);
  14. return position;
  15. }
  16. override vector GetVisionPointPositionWS(EntityAI pApplicant)
  17. {
  18. DayZInfected infected = DayZInfected.Cast(pApplicant);
  19. if (infected)
  20. {
  21. DayZInfectedInputController ic = infected.GetInputController();
  22. if (ic)
  23. {
  24. int mindState = ic.GetMindState();
  25. if (mindState >= DayZInfectedConstants.MINDSTATE_ALERTED)
  26. {
  27. return GetHeadPositionWS();
  28. }
  29. else
  30. {
  31. if (m_iChestBoneIndex != -1)
  32. return m_Player.GetBonePositionWS(m_iChestBoneIndex);
  33. }
  34. }
  35. }
  36. return m_Player.GetPosition() + "0 1 0";
  37. }
  38. override float GetMaxVisionRangeModifier(EntityAI pApplicant)
  39. {
  40. HumanMovementState state = new HumanMovementState();
  41. m_Player.GetMovementState(state);
  42. float mod = 1.0;
  43. float speedCoef = PlayerConstants.AI_VISIBILITY_RUN;
  44. float stanceCoef = PlayerConstants.AI_VISIBILITY_STANDING;
  45. //! player speed mofifications
  46. switch (AITargetCallbacksPlayer.StanceToMovementIdxTranslation(state))
  47. {
  48. case DayZPlayerConstants.MOVEMENTIDX_WALK:
  49. speedCoef = PlayerConstants.AI_VISIBILITY_WALK;
  50. break;
  51. case DayZPlayerConstants.MOVEMENTIDX_IDLE:
  52. speedCoef = PlayerConstants.AI_VISIBILITY_IDLE;
  53. break;
  54. }
  55. //! stance modification
  56. switch (state.m_iStanceIdx)
  57. {
  58. case DayZPlayerConstants.STANCEIDX_CROUCH:
  59. case DayZPlayerConstants.STANCEIDX_RAISEDCROUCH:
  60. stanceCoef = PlayerConstants.AI_VISIBILITY_CROUCH;
  61. break;
  62. case DayZPlayerConstants.STANCEIDX_PRONE:
  63. case DayZPlayerConstants.STANCEIDX_RAISEDPRONE:
  64. stanceCoef = PlayerConstants.AI_VISIBILITY_PRONE;
  65. break;
  66. }
  67. //! mean value of the coefs
  68. mod = (speedCoef + stanceCoef) / 2;
  69. return mod;
  70. }
  71. //! Translates players speed (idx) and corrects it by current stance
  72. //! used mainly for visibility/audibility of player to AI
  73. static int StanceToMovementIdxTranslation(HumanMovementState pState)
  74. {
  75. int movementSpeed = 0;
  76. switch (pState.m_iStanceIdx)
  77. {
  78. case DayZPlayerConstants.STANCEIDX_CROUCH:
  79. switch (pState.m_iMovement)
  80. {
  81. case DayZPlayerConstants.MOVEMENTIDX_IDLE:
  82. movementSpeed = DayZPlayerConstants.MOVEMENTIDX_IDLE;
  83. break;
  84. case DayZPlayerConstants.MOVEMENTIDX_WALK:
  85. case DayZPlayerConstants.MOVEMENTIDX_RUN:
  86. movementSpeed = DayZPlayerConstants.MOVEMENTIDX_WALK;
  87. break;
  88. case DayZPlayerConstants.MOVEMENTIDX_SPRINT:
  89. movementSpeed = DayZPlayerConstants.MOVEMENTIDX_CROUCH_RUN;
  90. break;
  91. }
  92. break;
  93. case DayZPlayerConstants.STANCEIDX_PRONE:
  94. switch (pState.m_iMovement)
  95. {
  96. case DayZPlayerConstants.MOVEMENTIDX_IDLE:
  97. movementSpeed = DayZPlayerConstants.MOVEMENTIDX_IDLE;
  98. break;
  99. default:
  100. movementSpeed = DayZPlayerConstants.MOVEMENTIDX_WALK;
  101. break;
  102. }
  103. break;
  104. default:
  105. movementSpeed = pState.m_iMovement;
  106. }
  107. return movementSpeed;
  108. }
  109. //! DEPRECATED
  110. private int m_iHeadBoneIndex;
  111. }