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

◆ GetProjectionEntityPosition()

vector Hologram::GetProjectionEntityPosition ( PlayerBase player)
inlineprotected

will not push hologram up when there is direct hit of an item

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

1137 {
1138 float minProjectionDistance;
1139 float maxProjectionDistance;
1140 m_ContactDir = vector.Zero;
1141 vector minMax[2];
1142 float projectionRadius = GetProjectionRadius();
1143 float cameraToPlayerDistance = vector.Distance(g_Game.GetCurrentCameraPosition(), player.GetPosition());
1144
1145 if (projectionRadius < SMALL_PROJECTION_RADIUS) // objects with radius smaller than 1m
1146 {
1147 minProjectionDistance = SMALL_PROJECTION_RADIUS;
1148 maxProjectionDistance = SMALL_PROJECTION_RADIUS * 2;
1149 }
1150 else
1151 {
1152 minProjectionDistance = projectionRadius;
1153 maxProjectionDistance = projectionRadius * 2;
1154 maxProjectionDistance = Math.Clamp(maxProjectionDistance, SMALL_PROJECTION_RADIUS, LARGE_PROJECTION_DISTANCE_LIMIT);
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;
1173 contactPosition = CorrectForWatchtower(m_ContactComponent, contactPosition, player, hitObjects[0]);
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 // Camera isn't correctly positioned in some cases, leading to raycasts hitting the object directly behind the camera
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);
1191 SetIsFloating(isFloating);
1192
1193 #ifdef DIAG_DEVELOPER
1194 DrawDebugArrow(minProjectionDistance, maxProjectionDistance);
1195 if (DiagMenu.GetBool(DiagMenuIDs.MISC_HOLOGRAM))
1196 {
1197 Debug.DrawSphere(GetProjectionPosition(), 0.1, 0x99FF0000, ShapeFlags.ONCE|ShapeFlags.TRANSP|ShapeFlags.NOOUTLINE);
1198 }
1199 #endif
1200
1201 m_FromAdjusted = from;
1202
1203 return contactPosition;
1204 }
string Debug()
Определения CachedEquipmentStorageBase.c:29
DayZGame g_Game
Определения DayZGame.c:3942
DiagMenuIDs
Определения EDiagMenuIDs.c:2
const float LARGE_PROJECTION_DISTANCE_LIMIT
Deprecated.
Определения Hologram.c:48
vector m_ContactDir
Определения Hologram.c:38
EntityAI m_Projection
Определения Hologram.c:22
const float SMALL_PROJECTION_RADIUS
Определения Hologram.c:45
int m_ContactComponent
Определения Hologram.c:57
vector m_FromAdjusted
Определения Hologram.c:39
bool SetHologramPosition(vector startPosition, float minProjectionDistance, float maxProjectionDistance, inout vector contactPosition)
Sets hologram position based on player and projection distance.
Определения Hologram.c:1214
void SetIsFloating(bool is_floating)
Определения Hologram.c:1337
vector CorrectForWatchtower(int contactComponent, vector contactPos, PlayerBase player, Object hitObject)
Определения Hologram.c:1268
float GetProjectionRadius()
Определения Hologram.c:1297
vector GetProjectionPosition()
Определения Hologram.c:1494
ShapeFlags
Определения EnDebug.c:126

Перекрестные ссылки Math::Clamp(), CorrectForWatchtower(), vector::Distance(), vector::DistanceSq(), Debug::DrawSphere(), g_Game, DiagMenu::GetBool(), CfgGameplayHandler::GetDisableIsCollidingBBoxCheck(), GetProjectionPosition(), GetProjectionRadius(), LARGE_PROJECTION_DISTANCE_LIMIT, m_ContactComponent, m_ContactDir, m_FromAdjusted, m_Projection, DayZPhysics::RaycastRV(), SetHologramPosition(), SetIsFloating(), SMALL_PROJECTION_RADIUS и vector::Zero.

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