1088 {
1089 float minProjectionDistance;
1090 float maxProjectionDistance;
1092 vector minMax[2];
1094 float cameraToPlayerDistance = vector.Distance(
GetGame().GetCurrentCameraPosition(), player.GetPosition());
1095
1097 {
1100 }
1101 else
1102 {
1103 minProjectionDistance = projectionRadius;
1104 maxProjectionDistance = projectionRadius * 2;
1106 }
1107
1110 vector contactPosition;
1111 set<Object> hitObjects = new set<Object>();
1112
1113 DayZPhysics.RaycastRV(from, to, contactPosition,
m_ContactDir,
m_ContactComponent, hitObjects, player,
m_Projection,
false,
false, ObjIntersectFire);
1114
1115 bool contactHitProcessed = false;
1117 if (!CfgGameplayHandler.GetDisableIsCollidingBBoxCheck())
1118 {
1119 if (hitObjects.Count() > 0)
1120 {
1121 if (hitObjects[0].IsInherited(Watchtower))
1122 {
1123 contactHitProcessed = true;
1125 }
1126
1127 if (!contactHitProcessed && hitObjects[0].IsInherited(InventoryItem))
1128 contactPosition = hitObjects[0].GetPosition();
1129 }
1130 }
1131
1132 static const float raycastOriginOffsetOnFail = 0.25;
1133 static const float minDistFromStart = 0.01;
1134
1135 if ((hitObjects.Count() > 0) && (vector.DistanceSq(from, contactPosition) < minDistFromStart))
1136 {
1138 DayZPhysics.RaycastRV(from, to, contactPosition,
m_ContactDir,
m_ContactComponent, hitObjects, player,
m_Projection,
false,
false, ObjIntersectFire);
1139 }
1140
1141 bool isFloating =
SetHologramPosition(player.GetPosition(), minProjectionDistance, maxProjectionDistance, contactPosition);
1143
1144 #ifdef DIAG_DEVELOPER
1145 DrawDebugArrow(minProjectionDistance, maxProjectionDistance);
1147 {
1149 }
1150 #endif
1151
1153
1154 return contactPosition;
1155 }
proto native vector GetCurrentCameraPosition()
proto native vector GetCurrentCameraDirection()
const float LARGE_PROJECTION_DISTANCE_LIMIT
Deprecated.
const float SMALL_PROJECTION_RADIUS
bool SetHologramPosition(vector startPosition, float minProjectionDistance, float maxProjectionDistance, inout vector contactPosition)
Sets hologram position based on player and projection distance.
void SetIsFloating(bool is_floating)
vector CorrectForWatchtower(int contactComponent, vector contactPos, PlayerBase player, Object hitObject)
float GetProjectionRadius()
vector GetProjectionPosition()
proto native CGame GetGame()