45 protected Object m_PreviousTargetObject;
79 protected int m_PreviousHitZoneIdx;
80 protected string m_PreviousHitZoneName;
81 protected vector m_PreviousHitPositionWS;
112 #ifdef DIAG_DEVELOPER
202 #ifdef DIAG_DEVELOPER
210 #ifdef DIAG_DEVELOPER
222 Reset(weapon, hitMask, wasHitEvent);
254 if (item && item.GetHierarchyRootPlayer())
256 PlayerBase.Cast(item.GetHierarchyRootPlayer()).SetCheckMeleeItem(item);
274 if (weapon.IsInherited(
Weapon))
292 return weapon.GetMeleeMode();
294 return weapon.GetMeleeHeavyMode();
296 return weapon.GetMeleeSprintMode();
316 return weapon.GetMeleeCombatData().GetModeRange(weaponMode);
318 return m_DZPlayer.GetMeleeCombatData().GetModeRange(weaponMode);
341 vector cameraPos, cameraRot, cameraDir;
342 m_DZPlayer.GetCurrentCameraTransform(cameraPos, cameraDir, cameraRot);
343 vector dir = MiscGameplayFunctions.GetHeadingVector(player);
344 dir[1] = cameraDir[1];
349 float dist2 =
Math.SqrFloat(dist);
393 MeleeTargetData targetData =
m_MeleeTargeting.GetMeleeTargetEx(
new MeleeTargetSettings(pos, dist*0.75, angle,
TARGETING_MIN_HEIGHT,
TARGETING_MAX_HEIGHT, rayStart, dir,
TARGETING_RAY_RADIUS_EX,
m_DZPlayer,
m_TargetableObjects),
m_AllTargetObjects,
m_BlacklistedDamageZones);
397 SetTarget(targetData.Obj, targetData.HitPos, targetData.HitComponent);
429 float moveFraction =
m_DZPlayer.CollisionMoveTest(dir,
vector.Zero, 1.0, target, hitEntity, hitPos, hitNormal);
430 if (moveFraction < 1.0)
435 if (target && target.CanBeBackstabbed() && weapon && (weapon.IsMeleeFinisher() ||
m_HitType ==
EMeleeHitType.WPN_STAB) && !weapon.IsRuined() )
437 bool playGenericFinisherAnimation =
false;
447 int mindState = targetZombie.GetMindStateSynced();
459 playGenericFinisherAnimation = targetZombie.IsCrawling();
461 else if (targetPlayer)
463 playGenericFinisherAnimation = targetPlayer.IsInProne();
467 playGenericFinisherAnimation =
true;
471 if (weapon.IsWeapon())
475 else if (playGenericFinisherAnimation)
500 if (!weapon || !weapon.GetValidFinishers() || weapon.GetValidFinishers().Count() == 0)
506 int idx =
Math.Round(
Math.Lerp(0, weapon.GetValidFinishers().Count() - 1, player.GetRandomGeneratorSyncManager().GetRandom01(
RandomGeneratorSyncUsage.RGSGeneric)));
507 return weapon.GetValidFinishers()[idx];
554 player.GetCurrentCameraTransform(pos, dir, cameraRotation);
559 playerDir = MiscGameplayFunctions.GetHeadingVector(player);
560 dir =
GetGame().GetCurrentCameraDirection();
561 MiscGameplayFunctions.GetHeadBonePos(player, pos);
565 if (
vector.Dot(dir, playerDir) < 0.5)
574 set<Object> hitObjects =
new set<Object>;
577 if (
DayZPhysics.RaycastRV(
m_RayStart,
m_RayEnd, hitPos, hitNormal, hitZone, hitObjects,
null, player,
false,
false, ObjIntersectIFire) && hitObjects.Count() > 0 )
579 target = hitObjects[0];
584 if (playerTarget && playerTarget.IsInVehicle())
604 Object cursorTarget =
null;
609 vector cameraDirection =
GetGame().GetCurrentCameraDirection();
611 MiscGameplayFunctions.GetHeadBonePos(player, pos);
617 set<Object> hitObjects =
new set<Object>;
618 int hitComponentIndex;
620 vector start, end, hitNormal, hitPosObstructed;
623 if ( !
DayZPhysics.RaycastRV(
m_RayStart,
m_RayEndShort,
m_HitPositionWS, hitNormal,
m_HitZoneIdx, hitObjects,
null, player,
false,
false, ObjIntersectIFire) && !
DayZPhysics.RaycastRV(
m_RayStart,
m_RayEnd,
m_HitPositionWS, hitNormal,
m_HitZoneIdx, hitObjects,
null, player,
false,
false, ObjIntersectIFire,
TARGETING_RAY_RADIUS) )
628 else if ( hitObjects.Count() > 0 )
630 cursorTarget = hitObjects.Get(0);
672 int hitComponentIndex;
674 vector start, end, hitNormal, hitPosObstructed;
680 MiscGameplayFunctions.GetHeadBonePos(player, start);
681 end = start + MiscGameplayFunctions.GetHeadingVector(player) *
vector.Distance(player.GetPosition(),
object.GetPosition());
686 return DayZPhysics.RayCastBullet( start, end, collisionLayerMask,
null, hitObject, hitPosObstructed, hitNormal, hitFraction);
694 vector targetDirection = target.GetDirection();
696 if (
Class.CastTo(targetZombie, target))
698 targetDirection =
Vector(targetZombie.GetOrientationSynced(),0,0);
699 targetDirection = targetDirection.AnglesToVector();
701 vector toSourceDirection = (source.GetPosition() - target.GetPosition());
703 targetDirection[1] = 0;
704 toSourceDirection[1] = 0;
706 targetDirection.Normalize();
707 toSourceDirection.Normalize();
709 float cosFi =
vector.Dot(targetDirection, toSourceDirection);
710 vector cross = targetDirection * toSourceDirection;
712 int hitDir =
Math.Acos(cosFi) *
Math.RAD2DEG;
717 return hitDir <= (-180 + angle) || hitDir >= (180 - angle);
720 #ifdef DIAG_DEVELOPER
730 CleanAllDebugShapes();
739 ShowDebugMeleeTarget();
746 DrawDebugMeleeHitPosition();
747 DrawDebugMeleeCone();
757 int DebugGetForcedFinisherType()
762 void DebugSetForcedFinisherType(
int pFinisherType)
768 protected void ShowDebugMeleeTarget()
777 DbgUI.Text(
"Current combo: " + hmc2.GetComboCount());
780 if (m_PreviousTargetObject)
782 DbgUI.Text(
"Previous Character: " + m_PreviousTargetObject.GetDisplayName());
783 DbgUI.Text(
"Previous HitZone: " + m_PreviousHitZoneName +
"(" + m_PreviousHitZoneIdx +
")");
784 DbgUI.Text(
"Previous HitPosWS:" + m_PreviousHitPositionWS);
785 DbgUI.Text(
"Previous Distance:" +
vector.Distance(m_PreviousHitPositionWS,
m_DZPlayer.GetPosition()));
799 protected void DrawDebugTargets()
805 protected void DrawDebugTargetsHelper(
array<Object> allTargets,
Object target,
int colorMainTarget,
int colorTarget)
807 for (
int i = 0; i < allTargets.Count(); ++i )
811 Object obj = allTargets[i];
812 vector w_pos = obj.GetPosition();
814 vector w_pos_sphr = w_pos;
815 w_pos_sphr[1] = w_pos_sphr[1] + 1.8;
817 vector w_pos_lend = w_pos;
818 w_pos_lend[1] = w_pos_lend[1] + 1.8;
822 dbgTargets.Insert(
Debug.DrawSphere(w_pos_sphr, 0.05, colorMainTarget,
ShapeFlags.NOOUTLINE) );
823 dbgTargets.Insert(
Debug.DrawLine(w_pos, w_pos_lend, colorMainTarget) );
827 dbgTargets.Insert(
Debug.DrawSphere(w_pos_sphr, 0.05, colorTarget,
ShapeFlags.NOOUTLINE) );
828 dbgTargets.Insert(
Debug.DrawLine(w_pos, w_pos_lend, colorTarget) );
834 protected void DrawDebugMeleeHitPosition()
836 if (m_PreviousTargetObject)
843 protected void DrawDebugMeleeCone()
852 float playerAngle = -
Math.Atan2(normDir[0], normDir[2]);
857 protected void DrawDebugBlockCone(
float angle,
int color)
866 float playerAngle = -
Math.Atan2(dir[0], dir[2]);
868 dbgConeShapes.InsertArray(
Debug.DrawCone(start, dist, angle *
Math.DEG2RAD, playerAngle +
Math.PI_HALF, color));
871 protected void CleanAllDebugShapes()
873 CleanupDebugShapes(dbgTargets);
874 CleanupDebugShapes(dbgConeShapes);
875 CleanupDebugShapes(hitPosShapes);
880 for (
int it = 0; it < shapes.Count(); ++it )
881 Debug.RemoveShape( shapes[it] );