1137 {
1138 float minProjectionDistance;
1139 float maxProjectionDistance;
1141 vector minMax[2];
1143 float cameraToPlayerDistance = vector.Distance(
g_Game.GetCurrentCameraPosition(), player.GetPosition());
1144
1146 {
1149 }
1150 else
1151 {
1152 minProjectionDistance = projectionRadius;
1153 maxProjectionDistance = projectionRadius * 2;
1155 }
1156
1157 vector from =
g_Game.GetCurrentCameraPosition();
1158 vector to = from + (
g_Game.GetCurrentCameraDirection() * (maxProjectionDistance + cameraToPlayerDistance));
1159 vector contactPosition;
1160 set<Object> hitObjects = new set<Object>();
1161
1162 DayZPhysics.RaycastRV(from, to, contactPosition,
m_ContactDir,
m_ContactComponent, hitObjects, player,
m_Projection,
false,
false, ObjIntersectFire);
1163
1164 bool contactHitProcessed = false;
1166 if (!CfgGameplayHandler.GetDisableIsCollidingBBoxCheck())
1167 {
1168 if (hitObjects.Count() > 0)
1169 {
1170 if (hitObjects[0].IsInherited(Watchtower))
1171 {
1172 contactHitProcessed = true;
1174 }
1175
1176 if (!contactHitProcessed && hitObjects[0].IsInherited(InventoryItem))
1177 contactPosition = hitObjects[0].GetPosition();
1178 }
1179 }
1180
1181 static const float raycastOriginOffsetOnFail = 0.25;
1182 static const float minDistFromStart = 0.01;
1183
1184 if ((hitObjects.Count() > 0) && (vector.DistanceSq(from, contactPosition) < minDistFromStart))
1185 {
1186 from = contactPosition +
g_Game.GetCurrentCameraDirection() * raycastOriginOffsetOnFail;
1187 DayZPhysics.RaycastRV(from, to, contactPosition,
m_ContactDir,
m_ContactComponent, hitObjects, player,
m_Projection,
false,
false, ObjIntersectFire);
1188 }
1189
1190 bool isFloating =
SetHologramPosition(player.GetPosition(), minProjectionDistance, maxProjectionDistance, contactPosition);
1192
1193 #ifdef DIAG_DEVELOPER
1194 DrawDebugArrow(minProjectionDistance, maxProjectionDistance);
1196 {
1198 }
1199 #endif
1200
1202
1203 return contactPosition;
1204 }
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()