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];
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);
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)
507 return weapon.GetValidFinishers()[idx];
554 player.GetCurrentCameraTransform(pos, dir, cameraRotation);
559 playerDir = MiscGameplayFunctions.GetHeadingVector(player);
561 MiscGameplayFunctions.GetHeadBonePos(player, pos);
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;
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();
698 targetDirection =
Vector(targetZombie.GetOrientationSynced(),0,0);
701 vector toSourceDirection = (source.GetPosition() - target.GetPosition());
703 targetDirection[1] = 0;
704 toSourceDirection[1] = 0;
709 float cosFi =
vector.
Dot(targetDirection, toSourceDirection);
710 vector cross = targetDirection * toSourceDirection;
717 return hitDir <= (-180 + angle) || hitDir >= (180 - angle);
730 CleanAllDebugShapes();
739 ShowDebugMeleeTarget();
746 DrawDebugMeleeHitPosition();
747 DrawDebugMeleeCone();
757 int DebugGetForcedFinisherType()
762 void DebugSetForcedFinisherType(
int pFinisherType)
768 protected void ShowDebugMeleeTarget()
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);
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;
823 dbgTargets.Insert(
Debug.
DrawLine(w_pos, w_pos_lend, colorMainTarget) );
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]);
871 protected void CleanAllDebugShapes()
873 CleanupDebugShapes(dbgTargets);
874 CleanupDebugShapes(dbgConeShapes);
875 CleanupDebugShapes(hitPosShapes);
880 for (
int it = 0; it < shapes.Count(); ++it )
private bool IsEntityBehindEntityInAngle(EntityAI source, EntityAI target, float angle)
protected string m_HitZoneName
Most recent target HitZone name.
protected float m_WeaponRange
WeaponRange used during most recent Update.
protected const float RANGE_EXTENDER_SPRINT
General range extension while in sprint.
int GetHitZoneIdx()
component idx
protected InventoryItem m_Weapon
Weapons - cache.
protected void SetTarget(Object obj, vector hitPos, int hitZone)
protected ref array< typename > m_NonAlignableObjects
Typenames of objects that can be targeted, but are not a priority (3rd Pass)
protected const float TARGETING_MIN_HEIGHT
Second Pass: How deep the cone goes in meters from player position.
protected const float TARGETING_RAY_DIST_SHORT
DEPRECATED: "HitZoneSelection".
protected int DetermineSpecificFinisherType(ItemBase weapon)
protected vector m_RayEnd
End position of most recent HitZoneSelectionRaycast.
protected bool IsObstructed(Object object)
DEPRECATED - New function in MeleeTargeting.
protected float GetRange()
protected const float TARGETING_ANGLE_SPRINT
Second Pass: Half angle of cone during sprint.
protected const string DEFAULT_HIT_ZONE
DEPRECATED: "HitZoneSelection".
protected bool HitZoneSelectionRaycastHelper(out vector hitPos, out int hitZone, out Object target)
protected ref MeleeTargeting m_MeleeTargeting
Target selecting "component".
protected ref array< string > m_BlacklistedDamageZones
List of blacklisted damage zone names (cannot use indices due to the possible changes when p3d compon...
void SetHitPos(vector pHitPos)
protected DayZPlayerImplement m_DZPlayer
Parent.
protected int m_WeaponMode
WeaponMode used during most recent Update.
protected EMeleeTargetType m_TargetType
DEPRECATED: Was added but never used..?
protected bool CanObjectBeTargeted(Object obj, bool checkNonAligneAble=false)
protected bool HitZoneSelectionRaycast(out vector hitPos, out int hitZone, out Object target, bool useCamera)
protected bool m_SprintAttack
If most recent attack was a sprint attack.
EntityAI GetTargetEntity()
protected const float TARGETING_RAY_DIST
DEPRECATED: "HitZoneSelection".
protected const float RANGE_EXTENDER_NORMAL
General range extension.
protected void HitZoneSelection()
DEPRECATED.
void ~DayZPlayerImplementMeleeCombat()
protected ref array< Object > m_AllTargetObjects
All potential targets found during most recent TargetSelection.
protected vector m_HitPositionWS
Most recent target position.
protected ref array< typename > m_TargetableObjects
Typenames of all directly/preferred targetable objects (1st Pass + 2nd Pass)
protected float GetWeaponRange(InventoryItem weapon, int weaponMode)
protected const float TARGETING_RAY_RADIUS_EX
Second Pass: Max distance from ray projected from player looking direction.
void DayZPlayerImplementMeleeCombat(DayZPlayerImplement player)
EMeleeHitType GetHitType()
void SetHitZoneIdx(int pHitZone)
protected EMeleeHitType m_HitType
Hit type of the most recent attack.
protected const float TARGETING_RAY_RADIUS
DEPRECATED: "HitZoneSelection".
protected vector m_RayStart
Start position of most recent HitZoneSelectionRaycast.
protected bool m_ForceUntargetable
Misc - cache.
protected float GetAngle()
void SetTargetObject(Object pTarget)
protected vector m_RayEndShort
DEPRECATED: "HitZoneSelection".
protected int SelectWeaponMode(InventoryItem weapon)
protected bool m_WasHit
If most recent attack was.
protected int m_HitZoneIdx
Hit result - cache.
protected void InternalResetTarget()
protected Object m_TargetObject
Targets - types.
protected int TrySelectFinisherType(InventoryItem weapon, EntityAI target)
General condition for finisher attacks.
protected int m_FinisherType
protected void TargetSelection()
enum EMeleeHitType TARGETING_ANGLE_NORMAL
Target selection settings.
void SetFinisherType(int pFinisherType)
protected const float TARGETING_MAX_HEIGHT
Second Pass: How high the cone goes in meters from player position.
private int m_DebugForcedFinisherType
ref array< typename > TargetableObjects void MeleeTargetSettings(vector coneOrigin, float coneLength, float coneHalfAngle, float coneMinHeight, float coneMaxHeight, vector rayStart, vector dir, float maxDist, EntityAI pToIgnore, array< typename > targetableObjects)
class PresenceNotifierNoiseEvents windowPosX
dbgUI settings
proto native vector GetCurrentCameraDirection()
Super root of all classes in Enforce script.
static proto bool RayCastBullet(vector begPos, vector endPos, PhxInteractionLayers layerMask, Object ignoreObj, out Object hitObject, out vector hitPosition, out vector hitNormal, out float hitFraction)
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.
static void RemoveShape(out Shape shape)
static Shape DrawLine(vector from, vector to, int color=0xFFFFFFFF, int flags=0)
static Shape DrawSphere(vector pos, float size=1, int color=0x1fff7f7f, ShapeFlags flags=ShapeFlags.TRANSP|ShapeFlags.NOOUTLINE)
static array< Shape > DrawCone(vector pos, float lenght, float halfAngle, float offsetAngle, int color=0xFFFFFFFF, int flags=0)
proto native int GetComboCount()
proto bool Write(void value_out)
script counterpart to engine's class Weapon
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
proto float Normalize()
Normalizes vector. Returns length.
proto vector AnglesToVector()
Converts spherical coordinates (yaw, pitch, roll in degrees) to unit length vector.
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.
proto native CGame GetGame()
static proto native void Begin(string windowTitle, float x=0, float y=0)
static proto native void Text(string label)
static proto native void End()
const float AI_MAX_BLOCKABLE_ANGLE
const float PVP_MAX_BLOCKABLE_ANGLE
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto float Acos(float c)
Returns angle in radians from cosinus.
static const float PI_HALF
static proto float Round(float f)
Returns mathematical round of value.
static proto float Atan2(float y, float x)
Returns angle in radians from tangent.
static proto float SqrFloat(float f)
Returns squared value.
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
static const float RAD2DEG
static const float DEG2RAD