aitargetcallbacksplayer.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. case DayZPlayerConstants.STANCEIDX_RAISEDCROUCH:
  80. switch (pState.m_iMovement)
  81. {
  82. case DayZPlayerConstants.MOVEMENTIDX_IDLE:
  83. movementSpeed = DayZPlayerConstants.MOVEMENTIDX_IDLE;
  84. break;
  85. case DayZPlayerConstants.MOVEMENTIDX_WALK:
  86. case DayZPlayerConstants.MOVEMENTIDX_RUN:
  87. movementSpeed = DayZPlayerConstants.MOVEMENTIDX_WALK;
  88. break;
  89. case DayZPlayerConstants.MOVEMENTIDX_SPRINT:
  90. movementSpeed = DayZPlayerConstants.MOVEMENTIDX_CROUCH_RUN;
  91. break;
  92. }
  93. break;
  94. case DayZPlayerConstants.STANCEIDX_PRONE:
  95. case DayZPlayerConstants.STANCEIDX_RAISEDPRONE:
  96. switch (pState.m_iMovement)
  97. {
  98. case DayZPlayerConstants.MOVEMENTIDX_IDLE:
  99. movementSpeed = DayZPlayerConstants.MOVEMENTIDX_IDLE;
  100. break;
  101. default:
  102. movementSpeed = DayZPlayerConstants.MOVEMENTIDX_WALK;
  103. break;
  104. }
  105. break;
  106. default:
  107. movementSpeed = pState.m_iMovement;
  108. }
  109. return movementSpeed;
  110. }
  111. //! DEPRECATED
  112. private int m_iHeadBoneIndex;
  113. }