some cam cleanup; unused PS2 train cams

This commit is contained in:
aap 2020-06-10 23:50:17 +02:00
parent 03f3b4fc5a
commit 5a961d0284
2 changed files with 153 additions and 63 deletions

View File

@ -211,10 +211,18 @@ CCam::Process(void)
case MODE_PLAYER_FALLEN_WATER: case MODE_PLAYER_FALLEN_WATER:
Process_Player_Fallen_Water(CameraTarget, TargetOrientation, SpeedVar, TargetSpeedVar); Process_Player_Fallen_Water(CameraTarget, TargetOrientation, SpeedVar, TargetSpeedVar);
break; break;
// case MODE_CAM_ON_TRAIN_ROOF: case MODE_CAM_ON_TRAIN_ROOF:
// case MODE_CAM_RUNNING_SIDE_TRAIN: Process_Cam_On_Train_Roof(CameraTarget, TargetOrientation, SpeedVar, TargetSpeedVar);
// case MODE_BLOOD_ON_THE_TRACKS: break;
// case MODE_IM_THE_PASSENGER_WOOWOO: case MODE_CAM_RUNNING_SIDE_TRAIN:
Process_Cam_Running_Side_Train(CameraTarget, TargetOrientation, SpeedVar, TargetSpeedVar);
break;
case MODE_BLOOD_ON_THE_TRACKS:
Process_Blood_On_The_Tracks(CameraTarget, TargetOrientation, SpeedVar, TargetSpeedVar);
break;
case MODE_IM_THE_PASSENGER_WOOWOO:
Process_Im_The_Passenger_Woo_Woo(CameraTarget, TargetOrientation, SpeedVar, TargetSpeedVar);
break;
case MODE_SYPHON_CRIM_IN_FRONT: case MODE_SYPHON_CRIM_IN_FRONT:
Process_Syphon_Crim_In_Front(CameraTarget, TargetOrientation, SpeedVar, TargetSpeedVar); Process_Syphon_Crim_In_Front(CameraTarget, TargetOrientation, SpeedVar, TargetSpeedVar);
break; break;
@ -1776,14 +1784,14 @@ CCam::WorkOutCamHeightWeeCar(CVector &TargetCoors, float TargetOrientation)
void void
CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, float TargetHeight) CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, float TargetHeight)
{ {
float AlphaOffset = 0.0f;
bool CamClear = true;
static float LastTargetAlphaWithCollisionOn = 0.0f; static float LastTargetAlphaWithCollisionOn = 0.0f;
static float LastTopAlphaSpeed = 0.0f; static float LastTopAlphaSpeed = 0.0f;
static float LastAlphaSpeedStep = 0.0f; static float LastAlphaSpeedStep = 0.0f;
static bool PreviousNearCheckNearClipSmall = false; static bool PreviousNearCheckNearClipSmall = false;
bool CamClear = true;
float ModeAlpha = 0.0f;
if(ResetStatics){ if(ResetStatics){
LastTargetAlphaWithCollisionOn = 0.0f; LastTargetAlphaWithCollisionOn = 0.0f;
LastTopAlphaSpeed = 0.0f; LastTopAlphaSpeed = 0.0f;
@ -1798,17 +1806,16 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa
if(zoomvalue < 0.1f) if(zoomvalue < 0.1f)
zoomvalue = 0.1f; zoomvalue = 0.1f;
if(TheCamera.CarZoomIndicator == CAM_ZOOM_1) if(TheCamera.CarZoomIndicator == CAM_ZOOM_1)
ModeAlpha = CGeneral::GetATanOfXY(23.0f, zoomvalue); // near AlphaOffset = CGeneral::GetATanOfXY(23.0f, zoomvalue); // near
else if(TheCamera.CarZoomIndicator == CAM_ZOOM_2) else if(TheCamera.CarZoomIndicator == CAM_ZOOM_2)
ModeAlpha = CGeneral::GetATanOfXY(10.8f, zoomvalue); // mid AlphaOffset = CGeneral::GetATanOfXY(10.8f, zoomvalue); // mid
else if(TheCamera.CarZoomIndicator == CAM_ZOOM_3) else if(TheCamera.CarZoomIndicator == CAM_ZOOM_3)
ModeAlpha = CGeneral::GetATanOfXY(7.0f, zoomvalue); // far AlphaOffset = CGeneral::GetATanOfXY(7.0f, zoomvalue); // far
float Length = (Source - TargetCoors).Magnitude2D(); float Length = (Source - TargetCoors).Magnitude2D();
if(m_bCollisionChecksOn){ // there's another variable (on PC) but it's uninitialised if(m_bCollisionChecksOn){ // there's another variable (on PC) but it's uninitialised
CVector Forward = CamTargetEntity->GetForward(); float CarAlpha = CGeneral::GetATanOfXY(CamTargetEntity->GetForward().Magnitude2D(), CamTargetEntity->GetForward().z);
float CarAlpha = CGeneral::GetATanOfXY(Forward.Magnitude2D(), Forward.z);
// this shouldn't be necessary.... // this shouldn't be necessary....
while(CarAlpha >= PI) CarAlpha -= 2*PI; while(CarAlpha >= PI) CarAlpha -= 2*PI;
while(CarAlpha < -PI) CarAlpha += 2*PI; while(CarAlpha < -PI) CarAlpha += 2*PI;
@ -1816,11 +1823,11 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa
while(Beta >= PI) Beta -= 2*PI; while(Beta >= PI) Beta -= 2*PI;
while(Beta < -PI) Beta += 2*PI; while(Beta < -PI) Beta += 2*PI;
float deltaBeta = Beta - TargetOrientation; float DeltaBeta = Beta - TargetOrientation;
while(deltaBeta >= PI) deltaBeta -= 2*PI; while(DeltaBeta >= PI) DeltaBeta -= 2*PI;
while(deltaBeta < -PI) deltaBeta += 2*PI; while(DeltaBeta < -PI) DeltaBeta += 2*PI;
float BehindCarNess = Cos(deltaBeta); // 1 if behind car, 0 if side, -1 if in front float BehindCarNess = Cos(DeltaBeta); // 1 if behind car, 0 if side, -1 if in front
CarAlpha = -CarAlpha * BehindCarNess; CarAlpha = -CarAlpha * BehindCarNess;
if(CarAlpha < -0.01f) if(CarAlpha < -0.01f)
CarAlpha = -0.01f; CarAlpha = -0.01f;
@ -1830,10 +1837,10 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa
while(DeltaAlpha < -PI) DeltaAlpha += 2*PI; while(DeltaAlpha < -PI) DeltaAlpha += 2*PI;
// What's this?? wouldn't it make more sense to clamp? // What's this?? wouldn't it make more sense to clamp?
float AngleLimit = DEGTORAD(1.8f); float AngleLimit = DEGTORAD(1.8f);
if(DeltaAlpha < -AngleLimit) if(DeltaAlpha > AngleLimit)
DeltaAlpha += AngleLimit;
else if(DeltaAlpha > AngleLimit)
DeltaAlpha -= AngleLimit; DeltaAlpha -= AngleLimit;
else if(DeltaAlpha < -AngleLimit)
DeltaAlpha += AngleLimit;
else else
DeltaAlpha = 0.0f; DeltaAlpha = 0.0f;
@ -1852,7 +1859,7 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa
float CarRoof = CWorld::FindRoofZFor3DCoord(TargetCoors.x, TargetCoors.y, CarBottom, &FoundRoofCenter); float CarRoof = CWorld::FindRoofZFor3DCoord(TargetCoors.x, TargetCoors.y, CarBottom, &FoundRoofCenter);
// Check sides of the car // Check sides of the car
Forward = CamTargetEntity->GetForward(); // we actually still have that... CVector Forward = CamTargetEntity->GetForward();
Forward.Normalise(); // shouldn't be necessary Forward.Normalise(); // shouldn't be necessary
float CarSideAngle = CGeneral::GetATanOfXY(Forward.x, Forward.y) + PI/2.0f; float CarSideAngle = CGeneral::GetATanOfXY(Forward.x, Forward.y) + PI/2.0f;
float SideX = 2.5f * Cos(CarSideAngle); float SideX = 2.5f * Cos(CarSideAngle);
@ -1861,7 +1868,7 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa
CWorld::FindRoofZFor3DCoord(TargetCoors.x - SideX, TargetCoors.y - SideY, CarBottom, &FoundRoofSide2); CWorld::FindRoofZFor3DCoord(TargetCoors.x - SideX, TargetCoors.y - SideY, CarBottom, &FoundRoofSide2);
// Now find out at what height we'd like to place the camera // Now find out at what height we'd like to place the camera
float CamGround = CWorld::FindGroundZFor3DCoord(Source.x, Source.y, TargetCoors.z + Length*Sin(Alpha + ModeAlpha) + m_fCloseInCarHeightOffset, &FoundCamGround); float CamGround = CWorld::FindGroundZFor3DCoord(Source.x, Source.y, TargetCoors.z + Length*Sin(Alpha + AlphaOffset) + m_fCloseInCarHeightOffset, &FoundCamGround);
float CamTargetZ = 0.0f; float CamTargetZ = 0.0f;
if(FoundCamGround){ if(FoundCamGround){
// This is the normal case // This is the normal case
@ -1891,15 +1898,15 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa
TargetAlpha = DEGTORAD(-7.0f); TargetAlpha = DEGTORAD(-7.0f);
// huh? // huh?
if(TargetAlpha > ModeAlpha) if(TargetAlpha > AlphaOffset)
CamClear = true; CamClear = true;
// Camera is contrained by collision in some way // Camera is constrained by collision in some way
PreviousNearCheckNearClipSmall = false; PreviousNearCheckNearClipSmall = false;
if(!CamClear){ if(!CamClear){
PreviousNearCheckNearClipSmall = true; PreviousNearCheckNearClipSmall = true;
RwCameraSetNearClipPlane(Scene.camera, DEFAULT_NEAR); RwCameraSetNearClipPlane(Scene.camera, DEFAULT_NEAR);
DeltaAlpha = TargetAlpha - (Alpha + ModeAlpha); DeltaAlpha = TargetAlpha - (Alpha + AlphaOffset);
while(DeltaAlpha >= PI) DeltaAlpha -= 2*PI; while(DeltaAlpha >= PI) DeltaAlpha -= 2*PI;
while(DeltaAlpha < -PI) DeltaAlpha += 2*PI; while(DeltaAlpha < -PI) DeltaAlpha += 2*PI;
@ -1908,43 +1915,42 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa
} }
// Now do things if CamClear...but what is that anyway? // Now do things if CamClear...but what is that anyway?
float CamZ = TargetCoors.z + Length*Sin(Alpha + DeltaAlpha + ModeAlpha) + m_fCloseInCarHeightOffset; float CamZ = TargetCoors.z + Length*Sin(Alpha + DeltaAlpha + AlphaOffset) + m_fCloseInCarHeightOffset;
bool FoundGround, FoundRoof; bool FoundGround, FoundRoof;
float CamGround2 = CWorld::FindGroundZFor3DCoord(Source.x, Source.y, CamZ, &FoundGround); float CamGround2 = CWorld::FindGroundZFor3DCoord(Source.x, Source.y, CamZ, &FoundGround);
if(FoundGround){ if(FoundGround && CamClear){
if(CamClear) if(CamZ - CamGround2 < 1.5f){
if(CamZ - CamGround2 < 1.5f){ PreviousNearCheckNearClipSmall = true;
PreviousNearCheckNearClipSmall = true; RwCameraSetNearClipPlane(Scene.camera, DEFAULT_NEAR);
RwCameraSetNearClipPlane(Scene.camera, DEFAULT_NEAR);
float a; float dz = CamGround2 + 1.5f - TargetCoors.z;
if(Length == 0.0f || CamGround2 + 1.5f - TargetCoors.z == 0.0f) float a;
a = Alpha; if(Length == 0.0f || dz == 0.0f)
else a = Alpha;
a = CGeneral::GetATanOfXY(Length, CamGround2 + 1.5f - TargetCoors.z); else
while(a > PI) a -= 2*PI; a = CGeneral::GetATanOfXY(Length, dz);
while(a < -PI) a += 2*PI; while(a > PI) a -= 2*PI;
DeltaAlpha = a - Alpha; while(a < -PI) a += 2*PI;
} DeltaAlpha = a - Alpha;
}else{ }
if(CamClear){ }else if(CamClear){
float CamRoof2 = CWorld::FindRoofZFor3DCoord(Source.x, Source.y, CamZ, &FoundRoof); float CamRoof2 = CWorld::FindRoofZFor3DCoord(Source.x, Source.y, CamZ, &FoundRoof);
if(FoundRoof && CamZ - CamRoof2 < 1.5f){ if(FoundRoof && CamZ - CamRoof2 < 1.5f){
PreviousNearCheckNearClipSmall = true; PreviousNearCheckNearClipSmall = true;
RwCameraSetNearClipPlane(Scene.camera, DEFAULT_NEAR); RwCameraSetNearClipPlane(Scene.camera, DEFAULT_NEAR);
if(CamRoof2 > TargetCoors.z + 3.5f) if(CamRoof2 > TargetCoors.z + 3.5f)
CamRoof2 = TargetCoors.z + 3.5f; CamRoof2 = TargetCoors.z + 3.5f;
float a; float dz = CamRoof2 + 1.5f - TargetCoors.z;
if(Length == 0.0f || CamRoof2 + 1.5f - TargetCoors.z == 0.0f) float a;
a = Alpha; if(Length == 0.0f || dz == 0.0f)
else a = Alpha;
a = CGeneral::GetATanOfXY(Length, CamRoof2 + 1.5f - TargetCoors.z); else
while(a > PI) a -= 2*PI; a = CGeneral::GetATanOfXY(Length, dz);
while(a < -PI) a += 2*PI; while(a > PI) a -= 2*PI;
DeltaAlpha = a - Alpha; while(a < -PI) a += 2*PI;
} DeltaAlpha = a - Alpha;
} }
} }
@ -1958,7 +1964,7 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa
WellBufferMe(LastTargetAlphaWithCollisionOn, &Alpha, &AlphaSpeed, LastTopAlphaSpeed, LastAlphaSpeedStep, true); WellBufferMe(LastTargetAlphaWithCollisionOn, &Alpha, &AlphaSpeed, LastTopAlphaSpeed, LastAlphaSpeedStep, true);
Source.z = TargetCoors.z + Sin(Alpha + ModeAlpha)*Length + m_fCloseInCarHeightOffset; Source.z = TargetCoors.z + Sin(Alpha + AlphaOffset)*Length + m_fCloseInCarHeightOffset;
} }
// Rotate cam behind the car when the car is moving forward // Rotate cam behind the car when the car is moving forward
@ -2108,9 +2114,9 @@ CCam::Process_Cam_On_A_String(const CVector &CameraTarget, float TargetOrientati
CBaseModelInfo *mi = CModelInfo::GetModelInfo(CamTargetEntity->GetModelIndex()); CBaseModelInfo *mi = CModelInfo::GetModelInfo(CamTargetEntity->GetModelIndex());
CVector Dimensions = mi->GetColModel()->boundingBox.max - mi->GetColModel()->boundingBox.min; CVector Dimensions = mi->GetColModel()->boundingBox.max - mi->GetColModel()->boundingBox.min;
CVector TargetCoors = CameraTarget;
float BaseDist = Dimensions.Magnitude2D(); float BaseDist = Dimensions.Magnitude2D();
CVector TargetCoors = CameraTarget;
TargetCoors.z += Dimensions.z - 0.1f; // final TargetCoors.z += Dimensions.z - 0.1f; // final
Beta = CGeneral::GetATanOfXY(TargetCoors.x - Source.x, TargetCoors.y - Source.y); Beta = CGeneral::GetATanOfXY(TargetCoors.x - Source.x, TargetCoors.y - Source.y);
while(Alpha >= PI) Alpha -= 2*PI; while(Alpha >= PI) Alpha -= 2*PI;
@ -2145,6 +2151,8 @@ CCam::Cam_On_A_String_Unobscured(const CVector &TargetCoors, float BaseDist)
if(ResetStatics) if(ResetStatics)
Source = TargetCoors + Dist*(CA_MAX_DISTANCE + 1.0f); Source = TargetCoors + Dist*(CA_MAX_DISTANCE + 1.0f);
Dist = Source - TargetCoors;
float Length = Dist.Magnitude2D(); float Length = Dist.Magnitude2D();
if(Length < 0.001f){ if(Length < 0.001f){
// This probably shouldn't happen. reset view // This probably shouldn't happen. reset view
@ -2172,7 +2180,7 @@ CCam::FixCamWhenObscuredByVehicle(const CVector &TargetCoors)
static float HeightFixerCarsObscuring = 0.0f; static float HeightFixerCarsObscuring = 0.0f;
static float HeightFixerCarsObscuringSpeed = 0.0f; static float HeightFixerCarsObscuringSpeed = 0.0f;
CColPoint colPoint; CColPoint colPoint;
CEntity *entity; CEntity *entity = nil;
float HeightTarget = 0.0f; float HeightTarget = 0.0f;
if(CWorld::ProcessLineOfSight(TargetCoors, Source, colPoint, entity, false, true, false, false, false, false, false)){ if(CWorld::ProcessLineOfSight(TargetCoors, Source, colPoint, entity, false, true, false, false, false, false, false)){
@ -4412,6 +4420,88 @@ CCam::Process_FollowPed_WithBinding(const CVector &CameraTarget, float TargetOri
GetVectorsReadyForRW(); GetVectorsReadyForRW();
} }
void
CCam::Process_Im_The_Passenger_Woo_Woo(const CVector &CameraTarget, float TargetOrientation, float, float)
{
FOV = 50.0f;
Source = CamTargetEntity->GetPosition();
Source.z += 2.5f;
Front = CamTargetEntity->GetForward();
Front.Normalise();
Source += 1.35f*Front;
float heading = CGeneral::GetATanOfXY(Front.x, Front.y) + DEGTORAD(45.0f);
Front.x = Cos(heading);
Front.y = Sin(heading);
Up = CamTargetEntity->GetUp();
GetVectorsReadyForRW();
}
void
CCam::Process_Blood_On_The_Tracks(const CVector &CameraTarget, float TargetOrientation, float, float)
{
FOV = 50.0f;
Source = CamTargetEntity->GetPosition();
Source.z += 5.45f;
static CVector Test = -CamTargetEntity->GetForward();
#ifdef FIX_BUGS
if(ResetStatics){
Test = -CamTargetEntity->GetForward();
ResetStatics = false;
}
#endif
Source.x += 19.45*Test.x;
Source.y += 19.45*Test.y;
Front = Test;
Front.Normalise();
Up = CamTargetEntity->GetUp();
GetVectorsReadyForRW();
}
void
CCam::Process_Cam_Running_Side_Train(const CVector &CameraTarget, float TargetOrientation, float, float)
{
FOV = 60.0f;
Source = CamTargetEntity->GetPosition();
Source.z += 4.0f;
CVector fwd = CamTargetEntity->GetForward();
float heading = CGeneral::GetATanOfXY(fwd.x, fwd.y) - DEGTORAD(15.0f);
Source.x -= Cos(heading)*10.0f;
Source.y -= Sin(heading)*10.0f;
heading -= DEGTORAD(5.0f);
Front = fwd;
Front.x += Cos(heading);
Front.y += Sin(heading);
Front.z -= 0.056f;
Front.Normalise();
Up = CamTargetEntity->GetUp();
GetVectorsReadyForRW();
}
void
CCam::Process_Cam_On_Train_Roof(const CVector &CameraTarget, float TargetOrientation, float, float)
{
static float RoofMultiplier = 1.5f;
Source = CamTargetEntity->GetPosition();
Source.z += 4.8f;
Front = CamTargetEntity->GetForward();
Front.Normalise();
Source += Front*RoofMultiplier;
Up = CamTargetEntity->GetUp();
Up.Normalise();
GetVectorsReadyForRW();
}
#ifdef FREE_CAM #ifdef FREE_CAM
void void
CCam::Process_FollowPed_Rotation(const CVector &CameraTarget, float TargetOrientation, float, float) CCam::Process_FollowPed_Rotation(const CVector &CameraTarget, float TargetOrientation, float, float)

View File

@ -251,10 +251,10 @@ public:
// CCam::Process_CheesyZoom // CCam::Process_CheesyZoom
// CCam::Process_Aiming // CCam::Process_Aiming
// CCam::Process_Bill // same as BehindCar due to unused variables // CCam::Process_Bill // same as BehindCar due to unused variables
// CCam::Process_Im_The_Passenger_Woo_Woo void Process_Im_The_Passenger_Woo_Woo(const CVector &CameraTarget, float TargetOrientation, float, float);
// CCam::Process_Blood_On_The_Tracks void Process_Blood_On_The_Tracks(const CVector &CameraTarget, float TargetOrientation, float, float);
// CCam::Process_Cam_Running_Side_Train void Process_Cam_Running_Side_Train(const CVector &CameraTarget, float TargetOrientation, float, float);
// CCam::Process_Cam_On_Train_Roof void Process_Cam_On_Train_Roof(const CVector &CameraTarget, float TargetOrientation, float, float);
// custom stuff // custom stuff
void Process_FollowPed_Rotation(const CVector &CameraTarget, float TargetOrientation, float, float); void Process_FollowPed_Rotation(const CVector &CameraTarget, float TargetOrientation, float, float);