void __cdecl CVehicle::DoHeadlightShadow(CVehicle *vehicle, int id, RwTexture *texture, RwV3D *pos, float x1, float y1, float x2, float y2, char red, char green, char blue, float maxViewAngle) { RwV3D *camPos; short camMode; char ignoreCamera; float distance_q, distance, intensity; if (!camera.placeable.m_pCoords) camPos = &camera.placeable.placement.pos; else camPos = &camera.placeable.m_pCoords->pos; camMode = camera.cams[camera.activeCam].mode; distance_q = (pos->x - camPos->x) * (pos->x - camPos->x) + (pos->y - camPos->y) * (pos->y - camPos->y); ignoreCamera = camMode == 1 || camMode == 37 || g_IsCutsceneOn; if (distance_q < 729.0) { if (!ignoreCamera) { if (-maxViewAngle >= (pos->y - camPos->y) * camera.field_E0 + (pos->x - camPos->x) * camera.field_DC) return; } } else { if (!ignoreCamera) return; } distance = sqrt(distance_q); if (distance >= 20.25 && !ignoreCamera) { intensity = 1.0 - (distance - 18.0) * 0.11111111; red = red * intensity; green = green * intensity; blue = blue * intensity; } if (sqrt(vehicle->velocity.x * vehicle->velocity.x + vehicle->velocity.y * vehicle->velocity.y + vehicle->velocity.z * vehicle->velocity.z) * g_fTimerMs > 0.4 || vehicle == getPlayerVehicle(-1, 0)) CShadows::StoreShadowToBeRendered(2, texture, pos, x1, y1, x2, y2, 128, red, green, blue, 6.0, 0, 1.0, 0, vehicle == getPlayerVehicle(-1, 0)); else CShadows::StoreStaticShadow((int)vehicle + id, 2, texture, pos, x1, y1, x2, y2, 128, red, green, blue, 6.0, 1.0, 0.0, 0, 0.4); }