DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ HitZoneSelectionRaycast()

bool HitZoneSelectionRaycast ( out vector hitPos,
out int hitZone,
out Object target,
bool useCamera )
protected

Prevents targeting of objects behind player

Opponent is inside car - targeting range is shorter in that case

См. определение в файле DayZPlayerImplementMeleeCombat.c строка 544

545 {
546 PlayerBase player = PlayerBase.Cast(m_DZPlayer);
547
548 vector pos;
549 vector dir;
550 vector playerDir;
551 if (useCamera)
552 { // What the player camera is looking at (crosshair)
553 vector cameraRotation;
554 player.GetCurrentCameraTransform(pos, dir, cameraRotation);
555 playerDir = dir;
556 }
557 else
558 { // What the player himself is looking at
559 playerDir = MiscGameplayFunctions.GetHeadingVector(player);
561 MiscGameplayFunctions.GetHeadBonePos(player, pos);
562 }
563
565 if (vector.Dot(dir, playerDir) < 0.5)
566 {
567 return false;
568 }
569
570 m_RayStart = pos;
571 m_RayEnd = m_RayStart + GetRange() * dir;
572
573 // raycast
574 set<Object> hitObjects = new set<Object>;
575 vector hitNormal;
576
577 if ( DayZPhysics.RaycastRV(m_RayStart, m_RayEnd, hitPos, hitNormal, hitZone, hitObjects, null, player, false, false, ObjIntersectIFire) && hitObjects.Count() > 0 )
578 {
579 target = hitObjects[0];
580 m_ForceUntargetable = false;
581
583 PlayerBase playerTarget = PlayerBase.Cast(target);
584 if (playerTarget && playerTarget.IsInVehicle())
585 {
586 if (vector.DistanceSq(pos, hitPos) > Math.SqrFloat(GetRange() * 0.5))
587 {
588 m_ForceUntargetable = true;
589 target = null;
590 hitPos = vector.Zero;
591 hitZone = -1;
592 }
593 }
594
595 return true;
596 }
597
598 return false;
599 }
bool m_ForceUntargetable
Misc - cache.
float GetRange()
DayZPlayerImplement m_DZPlayer
Parent.
vector m_RayStart
Start position of most recent HitZoneSelectionRaycast.
vector m_RayEnd
End position of most recent HitZoneSelectionRaycast.
proto native vector GetCurrentCameraDirection()
static proto bool RaycastRV(vector begPos, vector endPos, out vector contactPos, out vector contactDir, out int contactComponent, set< Object > results=NULL, Object with=NULL, Object ignore=NULL, bool sorted=false, bool ground_only=false, int iType=ObjIntersectView, float radius=0.0, CollisionFlags flags=CollisionFlags.NEARESTCONTACT)
Raycasts world by given parameters.
Определения DayZPhysics.c:124
Определения EnMath.c:7
Определения PlayerBaseClient.c:2
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.
static float Dot(vector v1, vector v2)
Returns Dot product of vector v1 and vector v2.
Определения EnConvert.c:271
static const vector Zero
Определения EnConvert.c:110
Определения EnConvert.c:106
proto native CGame GetGame()
static proto float SqrFloat(float f)
Returns squared value.

Перекрестные ссылки vector::DistanceSq(), vector::Dot(), CGame::GetCurrentCameraDirection(), GetGame(), GetRange(), m_DZPlayer, m_ForceUntargetable, m_RayEnd, m_RayStart, DayZPhysics::RaycastRV(), Math::SqrFloat() и vector::Zero.

Используется в HitZoneSelectionRaycastHelper().