1
0
Fork 0
mirror of https://git.rip/DMCA_FUCKER/re3.git synced 2024-12-23 11:29:59 +00:00

added wrappers around math functions

This commit is contained in:
aap 2019-07-10 17:18:26 +02:00
parent 80e0409d6a
commit 4a36d64f15
31 changed files with 204 additions and 191 deletions

View file

@ -445,7 +445,7 @@ void
cAudioManager::CalculateDistance(bool *ptr, float dist) cAudioManager::CalculateDistance(bool *ptr, float dist)
{ {
if(*ptr == false) { if(*ptr == false) {
m_sQueueSample.m_fDistance = sqrt(dist); m_sQueueSample.m_fDistance = Sqrt(dist);
*ptr = true; *ptr = true;
} }
} }

View file

@ -146,8 +146,8 @@ CPathFind::PreparePathData(void)
numExtern++; numExtern++;
if(InfoForTileCars[k].numLeftLanes + InfoForTileCars[k].numRightLanes > numLanes) if(InfoForTileCars[k].numLeftLanes + InfoForTileCars[k].numRightLanes > numLanes)
numLanes = InfoForTileCars[k].numLeftLanes + InfoForTileCars[k].numRightLanes; numLanes = InfoForTileCars[k].numLeftLanes + InfoForTileCars[k].numRightLanes;
maxX = max(maxX, fabs(InfoForTileCars[k].x)); maxX = max(maxX, Abs(InfoForTileCars[k].x));
maxY = max(maxY, fabs(InfoForTileCars[k].y)); maxY = max(maxY, Abs(InfoForTileCars[k].y));
}else if(InfoForTileCars[k].type == NodeTypeIntern) }else if(InfoForTileCars[k].type == NodeTypeIntern)
numIntern++; numIntern++;
} }
@ -327,10 +327,10 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
if(tempnodes[k].linkState != 1) if(tempnodes[k].linkState != 1)
continue; continue;
dx = tempnodes[k].pos.x - CoorsXFormed.x; dx = tempnodes[k].pos.x - CoorsXFormed.x;
if(fabs(dx) < nearestDist){ if(Abs(dx) < nearestDist){
dy = tempnodes[k].pos.y - CoorsXFormed.y; dy = tempnodes[k].pos.y - CoorsXFormed.y;
if(fabs(dy) < nearestDist){ if(Abs(dy) < nearestDist){
nearestDist = max(fabs(dx), fabs(dy)); nearestDist = max(Abs(dx), Abs(dy));
nearestId = k; nearestId = k;
} }
} }
@ -369,7 +369,7 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
dx = m_pathNodes[tempnodes[nearestId].link1].pos.x - m_pathNodes[tempnodes[nearestId].link2].pos.x; dx = m_pathNodes[tempnodes[nearestId].link1].pos.x - m_pathNodes[tempnodes[nearestId].link2].pos.x;
dy = m_pathNodes[tempnodes[nearestId].link1].pos.y - m_pathNodes[tempnodes[nearestId].link2].pos.y; dy = m_pathNodes[tempnodes[nearestId].link1].pos.y - m_pathNodes[tempnodes[nearestId].link2].pos.y;
tempnodes[nearestId].pos = (tempnodes[nearestId].pos + CoorsXFormed)*0.5f; tempnodes[nearestId].pos = (tempnodes[nearestId].pos + CoorsXFormed)*0.5f;
mag = sqrt(dx*dx + dy*dy); mag = Sqrt(dx*dx + dy*dy);
tempnodes[nearestId].dirX = dx/mag; tempnodes[nearestId].dirX = dx/mag;
tempnodes[nearestId].dirY = dy/mag; tempnodes[nearestId].dirY = dy/mag;
// do something when number of lanes doesn't agree // do something when number of lanes doesn't agree
@ -464,7 +464,7 @@ CPathFind::PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoFor
posy = (m_pathNodes[i].pos.y + m_pathNodes[j].pos.y)*0.5f; posy = (m_pathNodes[i].pos.y + m_pathNodes[j].pos.y)*0.5f;
dx = m_pathNodes[j].pos.x - m_pathNodes[i].pos.x; dx = m_pathNodes[j].pos.x - m_pathNodes[i].pos.x;
dy = m_pathNodes[j].pos.y - m_pathNodes[i].pos.y; dy = m_pathNodes[j].pos.y - m_pathNodes[i].pos.y;
mag = sqrt(dx*dx + dy*dy); mag = Sqrt(dx*dx + dy*dy);
dx /= mag; dx /= mag;
dy /= mag; dy /= mag;
if(i < j){ if(i < j){

View file

@ -1505,9 +1505,9 @@ void CReplay::ProcessLookAroundCam(void)
else else
fAlphaAngleLookAroundCam = max(0.1f, min(1.5f, fAlphaAngleLookAroundCam + y_moved)); fAlphaAngleLookAroundCam = max(0.1f, min(1.5f, fAlphaAngleLookAroundCam + y_moved));
CVector camera_pt( CVector camera_pt(
fDistanceLookAroundCam * sin(fBetaAngleLookAroundCam) * cos(fAlphaAngleLookAroundCam), fDistanceLookAroundCam * Sin(fBetaAngleLookAroundCam) * Cos(fAlphaAngleLookAroundCam),
fDistanceLookAroundCam * cos(fBetaAngleLookAroundCam) * cos(fAlphaAngleLookAroundCam), fDistanceLookAroundCam * Cos(fBetaAngleLookAroundCam) * Cos(fAlphaAngleLookAroundCam),
fDistanceLookAroundCam * sin(fAlphaAngleLookAroundCam) fDistanceLookAroundCam * Sin(fAlphaAngleLookAroundCam)
); );
CVector focus = CVector(CameraFocusX, CameraFocusY, CameraFocusZ); CVector focus = CVector(CameraFocusX, CameraFocusY, CameraFocusZ);
camera_pt += focus; camera_pt += focus;

View file

@ -170,9 +170,9 @@ WellBufferMe(float Target, float *CurrentValue, float *CurrentSpeed, float MaxSp
float TargetSpeed = Delta * MaxSpeed; float TargetSpeed = Delta * MaxSpeed;
// Add or subtract absolute depending on sign, genius! // Add or subtract absolute depending on sign, genius!
// if(TargetSpeed - *CurrentSpeed > 0.0f) // if(TargetSpeed - *CurrentSpeed > 0.0f)
// *CurrentSpeed += Acceleration * fabs(TargetSpeed - *CurrentSpeed) * CTimer::GetTimeStep(); // *CurrentSpeed += Acceleration * Abs(TargetSpeed - *CurrentSpeed) * CTimer::GetTimeStep();
// else // else
// *CurrentSpeed -= Acceleration * fabs(TargetSpeed - *CurrentSpeed) * CTimer::GetTimeStep(); // *CurrentSpeed -= Acceleration * Abs(TargetSpeed - *CurrentSpeed) * CTimer::GetTimeStep();
// this is simpler: // this is simpler:
*CurrentSpeed += Acceleration * (TargetSpeed - *CurrentSpeed) * CTimer::GetTimeStep(); *CurrentSpeed += Acceleration * (TargetSpeed - *CurrentSpeed) * CTimer::GetTimeStep();
@ -249,14 +249,14 @@ CCam::GetPedBetaAngleForClearView(const CVector &Target, float Dist, float BetaO
for(a = 0.0f; a <= PI; a += DEGTORAD(5.0f)){ for(a = 0.0f; a <= PI; a += DEGTORAD(5.0f)){
if(BetaOffset <= 0.0f){ if(BetaOffset <= 0.0f){
ToSource = CVector(cos(Beta + BetaOffset + a), sin(Beta + BetaOffset + a), 0.0f)*Dist; ToSource = CVector(Cos(Beta + BetaOffset + a), Sin(Beta + BetaOffset + a), 0.0f)*Dist;
if(!CWorld::ProcessLineOfSight(Target, Target + ToSource, if(!CWorld::ProcessLineOfSight(Target, Target + ToSource,
point, ent, checkBuildings, checkVehicles, checkPeds, point, ent, checkBuildings, checkVehicles, checkPeds,
checkObjects, checkDummies, true, true)) checkObjects, checkDummies, true, true))
return a; return a;
} }
if(BetaOffset >= 0.0f){ if(BetaOffset >= 0.0f){
ToSource = CVector(cos(Beta + BetaOffset - a), sin(Beta + BetaOffset - a), 0.0f)*Dist; ToSource = CVector(Cos(Beta + BetaOffset - a), Sin(Beta + BetaOffset - a), 0.0f)*Dist;
if(!CWorld::ProcessLineOfSight(Target, Target + ToSource, if(!CWorld::ProcessLineOfSight(Target, Target + ToSource,
point, ent, checkBuildings, checkVehicles, checkPeds, point, ent, checkBuildings, checkVehicles, checkPeds,
checkObjects, checkDummies, true, true)) checkObjects, checkDummies, true, true))
@ -500,7 +500,7 @@ CCam::Process_FollowPed(const CVector &CameraTarget, float TargetOrientation, fl
CVector PlayerPos = FindPlayerPed()->GetPosition(); CVector PlayerPos = FindPlayerPed()->GetPosition();
float RotationDist = (AngleToGoTo == Center ? CenterDist : LateralDist) * RealGroundDist; float RotationDist = (AngleToGoTo == Center ? CenterDist : LateralDist) * RealGroundDist;
// What's going on here? - AngleToGoTo? // What's going on here? - AngleToGoTo?
CVector RotatedSource = PlayerPos + CVector(cos(Beta - AngleToGoTo), sin(Beta - AngleToGoTo), 0.0f) * RotationDist; CVector RotatedSource = PlayerPos + CVector(Cos(Beta - AngleToGoTo), Sin(Beta - AngleToGoTo), 0.0f) * RotationDist;
CColPoint colpoint; CColPoint colpoint;
CEntity *entity; CEntity *entity;
@ -584,9 +584,9 @@ CCam::Process_FollowPed(const CVector &CameraTarget, float TargetOrientation, fl
float ReqSpeed = DeltaBeta * MaxSpeed; float ReqSpeed = DeltaBeta * MaxSpeed;
// Add or subtract absolute depending on sign, genius! // Add or subtract absolute depending on sign, genius!
if(ReqSpeed - BetaSpeed > 0.0f) if(ReqSpeed - BetaSpeed > 0.0f)
BetaSpeed += SpeedStep * fabs(ReqSpeed - BetaSpeed) * CTimer::GetTimeStep(); BetaSpeed += SpeedStep * Abs(ReqSpeed - BetaSpeed) * CTimer::GetTimeStep();
else else
BetaSpeed -= SpeedStep * fabs(ReqSpeed - BetaSpeed) * CTimer::GetTimeStep(); BetaSpeed -= SpeedStep * Abs(ReqSpeed - BetaSpeed) * CTimer::GetTimeStep();
// this would be simpler: // this would be simpler:
// BetaSpeed += SpeedStep * (ReqSpeed - BetaSpeed) * CTimer::ms_fTimeStep; // BetaSpeed += SpeedStep * (ReqSpeed - BetaSpeed) * CTimer::ms_fTimeStep;
@ -604,14 +604,14 @@ CCam::Process_FollowPed(const CVector &CameraTarget, float TargetOrientation, fl
BetaSpeed = 0.0f; BetaSpeed = 0.0f;
} }
Source.x = TargetCoors.x + Distance * cos(Beta); Source.x = TargetCoors.x + Distance * Cos(Beta);
Source.y = TargetCoors.y + Distance * sin(Beta); Source.y = TargetCoors.y + Distance * Sin(Beta);
// Check if we can stop rotating // Check if we can stop rotating
DeltaBeta = FixedTargetOrientation - Beta; DeltaBeta = FixedTargetOrientation - Beta;
while(DeltaBeta >= PI) DeltaBeta -= 2*PI; while(DeltaBeta >= PI) DeltaBeta -= 2*PI;
while(DeltaBeta < -PI) DeltaBeta += 2*PI; while(DeltaBeta < -PI) DeltaBeta += 2*PI;
if(fabs(DeltaBeta) < DEGTORAD(1.0f) && !bBehindPlayerDesired){ if(Abs(DeltaBeta) < DEGTORAD(1.0f) && !bBehindPlayerDesired){
// Stop rotation // Stop rotation
PickedASide = false; PickedASide = false;
Rotating = false; Rotating = false;
@ -624,18 +624,18 @@ CCam::Process_FollowPed(const CVector &CameraTarget, float TargetOrientation, fl
HackPlayerOnStoppingTrain || Rotating){ HackPlayerOnStoppingTrain || Rotating){
if(TheCamera.m_bCamDirectlyBehind){ if(TheCamera.m_bCamDirectlyBehind){
Beta = TargetOrientation + PI; Beta = TargetOrientation + PI;
Source.x = TargetCoors.x + Distance * cos(Beta); Source.x = TargetCoors.x + Distance * Cos(Beta);
Source.y = TargetCoors.y + Distance * sin(Beta); Source.y = TargetCoors.y + Distance * Sin(Beta);
} }
if(TheCamera.m_bCamDirectlyInFront){ if(TheCamera.m_bCamDirectlyInFront){
Beta = TargetOrientation; Beta = TargetOrientation;
Source.x = TargetCoors.x + Distance * cos(Beta); Source.x = TargetCoors.x + Distance * Cos(Beta);
Source.y = TargetCoors.y + Distance * sin(Beta); Source.y = TargetCoors.y + Distance * Sin(Beta);
} }
if(HackPlayerOnStoppingTrain){ if(HackPlayerOnStoppingTrain){
Beta = TargetOrientation + PI; Beta = TargetOrientation + PI;
Source.x = TargetCoors.x + Distance * cos(Beta); Source.x = TargetCoors.x + Distance * Cos(Beta);
Source.y = TargetCoors.y + Distance * sin(Beta); Source.y = TargetCoors.y + Distance * Sin(Beta);
m_fDimensionOfHighestNearCar = 0.0f; m_fDimensionOfHighestNearCar = 0.0f;
m_fCamBufferedHeight = 0.0f; m_fCamBufferedHeight = 0.0f;
m_fCamBufferedHeightSpeed = 0.0f; m_fCamBufferedHeightSpeed = 0.0f;
@ -904,7 +904,7 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa
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;
@ -939,8 +939,8 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa
Forward = CamTargetEntity->GetForward(); // we actually still have that... Forward = CamTargetEntity->GetForward(); // we actually still have that...
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);
float SideY = 2.5f * sin(CarSideAngle); float SideY = 2.5f * Sin(CarSideAngle);
CWorld::FindRoofZFor3DCoord(TargetCoors.x + SideX, TargetCoors.y + SideY, CarBottom, &FoundRoofSide1); CWorld::FindRoofZFor3DCoord(TargetCoors.x + SideX, TargetCoors.y + SideY, CarBottom, &FoundRoofSide1);
CWorld::FindRoofZFor3DCoord(TargetCoors.x - SideX, TargetCoors.y - SideY, CarBottom, &FoundRoofSide2); CWorld::FindRoofZFor3DCoord(TargetCoors.x - SideX, TargetCoors.y - SideY, CarBottom, &FoundRoofSide2);
@ -1042,7 +1042,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 + ModeAlpha)*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
@ -1062,7 +1062,7 @@ CCam::RotCamIfInFrontCar(CVector &TargetCoors, float 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;
if(fabs(DeltaBeta) > DEGTORAD(20.0f) && MovingForward && TheCamera.m_uiTransitionState == 0) if(Abs(DeltaBeta) > DEGTORAD(20.0f) && MovingForward && TheCamera.m_uiTransitionState == 0)
m_bFixingBeta = true; m_bFixingBeta = true;
CPad *pad = CPad::GetPad(0); CPad *pad = CPad::GetPad(0);
@ -1088,14 +1088,14 @@ CCam::RotCamIfInFrontCar(CVector &TargetCoors, float TargetOrientation)
if(TheCamera.m_bUseTransitionBeta && &TheCamera.Cams[TheCamera.ActiveCam] == this) if(TheCamera.m_bUseTransitionBeta && &TheCamera.Cams[TheCamera.ActiveCam] == this)
Beta = m_fTransitionBeta; Beta = m_fTransitionBeta;
Source.x = TargetCoors.x - cos(Beta)*Dist; Source.x = TargetCoors.x - Cos(Beta)*Dist;
Source.y = TargetCoors.y - sin(Beta)*Dist; Source.y = TargetCoors.y - Sin(Beta)*Dist;
// Check if we're done // Check if we're done
DeltaBeta = TargetOrientation - Beta; DeltaBeta = TargetOrientation - Beta;
while(DeltaBeta >= PI) DeltaBeta -= 2*PI; while(DeltaBeta >= PI) DeltaBeta -= 2*PI;
while(DeltaBeta < -PI) DeltaBeta += 2*PI; while(DeltaBeta < -PI) DeltaBeta += 2*PI;
if(fabs(DeltaBeta) < DEGTORAD(2.0f)) if(Abs(DeltaBeta) < DEGTORAD(2.0f))
m_bFixingBeta = false; m_bFixingBeta = false;
} }
TheCamera.m_bCamDirectlyBehind = false; TheCamera.m_bCamDirectlyBehind = false;
@ -1157,14 +1157,14 @@ CCam::FixCamIfObscured(CVector &TargetCoors, float TargetHeight, float TargetOri
return false; return false;
if(Fix1){ if(Fix1){
Source.x = Target.x - cos(Beta)*Dist1; Source.x = Target.x - Cos(Beta)*Dist1;
Source.y = Target.y - sin(Beta)*Dist1; Source.y = Target.y - Sin(Beta)*Dist1;
if(Mode == MODE_BEHINDCAR) if(Mode == MODE_BEHINDCAR)
Source = colPoint.point; Source = colPoint.point;
}else{ }else{
WellBufferMe(Dist2, &m_fDistanceBeforeChanges, &DistanceSpeed, 0.2f, 0.025f, false); WellBufferMe(Dist2, &m_fDistanceBeforeChanges, &DistanceSpeed, 0.2f, 0.025f, false);
Source.x = Target.x - cos(Beta)*m_fDistanceBeforeChanges; Source.x = Target.x - Cos(Beta)*m_fDistanceBeforeChanges;
Source.y = Target.y - sin(Beta)*m_fDistanceBeforeChanges; Source.y = Target.y - Sin(Beta)*m_fDistanceBeforeChanges;
} }
if(ResetStatics){ if(ResetStatics){

View file

@ -457,7 +457,7 @@ CCollision::TestLineSphere(const CColLine &line, const CColSphere &sph)
// I leave in the strange -2 factors even though they serve no real purpose // I leave in the strange -2 factors even though they serve no real purpose
float projline = -2.0f * DotProduct(v01, v0c); // project v0c onto line float projline = -2.0f * DotProduct(v01, v0c); // project v0c onto line
// Square of tangent from p0 multiplied by line length so we can compare with projline. // Square of tangent from p0 multiplied by line length so we can compare with projline.
// The length of the tangent would be this: sqrt((c-p0)^2 - r^2). // The length of the tangent would be this: Sqrt((c-p0)^2 - r^2).
// Negative if p0 is inside the sphere! This breaks the test! // Negative if p0 is inside the sphere! This breaks the test!
float tansq = 4.0f * linesq * float tansq = 4.0f * linesq *
(sph.center.MagnitudeSqr() - 2.0f*DotProduct(sph.center, line.p0) + line.p0.MagnitudeSqr() - sph.radius*sph.radius); (sph.center.MagnitudeSqr() - 2.0f*DotProduct(sph.center, line.p0) + line.p0.MagnitudeSqr() - sph.radius*sph.radius);
@ -467,10 +467,10 @@ CCollision::TestLineSphere(const CColLine &line, const CColSphere &sph)
return false; return false;
// projline (negative in GTA for some reason) is the point on the line // projline (negative in GTA for some reason) is the point on the line
// in the middle of the two intersection points (startin from p0). // in the middle of the two intersection points (startin from p0).
// sqrt(diffsq) somehow works out to be the distance from that // Sqrt(diffsq) somehow works out to be the distance from that
// midpoint to the intersection points. // midpoint to the intersection points.
// So subtract that and get rid of the awkward scaling: // So subtract that and get rid of the awkward scaling:
float f = (-projline - sqrt(diffsq)) / (2.0f*linesq); float f = (-projline - Sqrt(diffsq)) / (2.0f*linesq);
// f should now be in range [0, 1] for [p0, p1] // f should now be in range [0, 1] for [p0, p1]
return f >= 0.0f && f <= 1.0f; return f >= 0.0f && f <= 1.0f;
} }
@ -480,7 +480,7 @@ CCollision::TestSphereTriangle(const CColSphere &sphere,
const CVector *verts, const CColTriangle &tri, const CColTrianglePlane &plane) const CVector *verts, const CColTriangle &tri, const CColTrianglePlane &plane)
{ {
// If sphere and plane don't intersect, no collision // If sphere and plane don't intersect, no collision
if(fabs(plane.CalcPoint(sphere.center)) > sphere.radius) if(Abs(plane.CalcPoint(sphere.center)) > sphere.radius)
return false; return false;
const CVector &va = verts[tri.a]; const CVector &va = verts[tri.a];
@ -669,7 +669,7 @@ CCollision::ProcessSphereBox(const CColSphere &sph, const CColBox &box, CColPoin
dist = sph.center - p; dist = sph.center - p;
float lensq = dist.MagnitudeSqr(); float lensq = dist.MagnitudeSqr();
if(lensq < mindistsq){ if(lensq < mindistsq){
float len = sqrt(lensq); float len = Sqrt(lensq);
point.point = p; point.point = p;
point.normal = dist * (1.0f/len); point.normal = dist * (1.0f/len);
point.surfaceA = sph.surface; point.surfaceA = sph.surface;
@ -816,7 +816,7 @@ CCollision::ProcessLineSphere(const CColLine &line, const CColSphere &sphere, CC
if(diffsq < 0.0f) if(diffsq < 0.0f)
return false; return false;
// point of first intersection, in range [0,1] between p0 and p1 // point of first intersection, in range [0,1] between p0 and p1
float t = (projline - sqrt(diffsq)) / linesq; float t = (projline - Sqrt(diffsq)) / linesq;
// if not on line or beyond mindist, no intersection // if not on line or beyond mindist, no intersection
if(t < 0.0f || t > 1.0f || t >= mindist) if(t < 0.0f || t > 1.0f || t >= mindist)
return false; return false;
@ -1010,7 +1010,7 @@ CCollision::ProcessSphereTriangle(const CColSphere &sphere,
// If sphere and plane don't intersect, no collision // If sphere and plane don't intersect, no collision
float planedist = plane.CalcPoint(sphere.center); float planedist = plane.CalcPoint(sphere.center);
float distsq = planedist*planedist; float distsq = planedist*planedist;
if(fabs(planedist) > sphere.radius || distsq > mindistsq) if(Abs(planedist) > sphere.radius || distsq > mindistsq)
return false; return false;
const CVector &va = verts[tri.a]; const CVector &va = verts[tri.a];
@ -1057,7 +1057,7 @@ CCollision::ProcessSphereTriangle(const CColSphere &sphere,
else assert(0); else assert(0);
}else if(testcase == 3){ }else if(testcase == 3){
// center is in triangle // center is in triangle
dist = fabs(planedist); dist = Abs(planedist);
p = sphere.center - normal*planedist; p = sphere.center - normal*planedist;
}else }else
assert(0); // front fell off assert(0); // front fell off
@ -1333,7 +1333,7 @@ CCollision::DistToLine(const CVector *l0, const CVector *l1, const CVector *poin
if(dot >= lensq) if(dot >= lensq)
return (*point - *l1).Magnitude(); return (*point - *l1).Magnitude();
// distance to line // distance to line
return sqrt((*point - *l0).MagnitudeSqr() - dot*dot/lensq); return Sqrt((*point - *l0).MagnitudeSqr() - dot*dot/lensq);
} }
// same as above but also return the point on the line // same as above but also return the point on the line
@ -1641,7 +1641,7 @@ CColTrianglePlane::Set(const CVector *v, CColTriangle &tri)
normal = CrossProduct(vc-va, vb-va); normal = CrossProduct(vc-va, vb-va);
normal.Normalise(); normal.Normalise();
dist = DotProduct(normal, va); dist = DotProduct(normal, va);
CVector an(fabs(normal.x), fabs(normal.y), fabs(normal.z)); CVector an(Abs(normal.x), Abs(normal.y), Abs(normal.z));
// find out largest component and its direction // find out largest component and its direction
if(an.x > an.y && an.x > an.z) if(an.x > an.y && an.x > an.z)
dir = normal.x < 0.0f ? DIR_X_NEG : DIR_X_POS; dir = normal.x < 0.0f ? DIR_X_NEG : DIR_X_POS;

View file

@ -262,9 +262,9 @@ CFileLoader::LoadCollisionModel(uint8 *buf, CColModel &model, char *modelname)
model.vertices = (CVector*)RwMalloc(numVertices*sizeof(CVector)); model.vertices = (CVector*)RwMalloc(numVertices*sizeof(CVector));
for(i = 0; i < numVertices; i++){ for(i = 0; i < numVertices; i++){
model.vertices[i] = *(CVector*)buf; model.vertices[i] = *(CVector*)buf;
if(fabs(model.vertices[i].x) >= 256.0f || if(Abs(model.vertices[i].x) >= 256.0f ||
fabs(model.vertices[i].y) >= 256.0f || Abs(model.vertices[i].y) >= 256.0f ||
fabs(model.vertices[i].z) >= 256.0f) Abs(model.vertices[i].z) >= 256.0f)
printf("%s:Collision volume too big\n", modelname); printf("%s:Collision volume too big\n", modelname);
buf += 12; buf += 12;
} }

View file

@ -6,32 +6,32 @@ public:
static float GetATanOfXY(float x, float y){ static float GetATanOfXY(float x, float y){
if(x == 0.0f && y == 0.0f) if(x == 0.0f && y == 0.0f)
return 0.0f; return 0.0f;
float xabs = fabs(x); float xabs = Abs(x);
float yabs = fabs(y); float yabs = Abs(y);
if(xabs < yabs){ if(xabs < yabs){
if(y > 0.0f){ if(y > 0.0f){
if(x > 0.0f) if(x > 0.0f)
return 0.5f*PI - atan2(x / y, 1.0f); return 0.5f*PI - Atan2(x / y, 1.0f);
else else
return 0.5f*PI + atan2(-x / y, 1.0f); return 0.5f*PI + Atan2(-x / y, 1.0f);
}else{ }else{
if(x > 0.0f) if(x > 0.0f)
return 1.5f*PI + atan2(x / -y, 1.0f); return 1.5f*PI + Atan2(x / -y, 1.0f);
else else
return 1.5f*PI - atan2(-x / -y, 1.0f); return 1.5f*PI - Atan2(-x / -y, 1.0f);
} }
}else{ }else{
if(y > 0.0f){ if(y > 0.0f){
if(x > 0.0f) if(x > 0.0f)
return atan2(y / x, 1.0f); return Atan2(y / x, 1.0f);
else else
return PI - atan2(y / -x, 1.0f); return PI - Atan2(y / -x, 1.0f);
}else{ }else{
if(x > 0.0f) if(x > 0.0f)
return 2.0f*PI - atan2(-y / x, 1.0f); return 2.0f*PI - Atan2(-y / x, 1.0f);
else else
return PI + atan2(-y / -x, 1.0f); return PI + Atan2(-y / -x, 1.0f);
} }
} }
} }
@ -68,12 +68,12 @@ public:
if (x > 0.0f) { if (x > 0.0f) {
if (y > 0.0f) if (y > 0.0f)
return PI - atan2(x / y, 1.0f); return PI - Atan2(x / y, 1.0f);
else else
return -atan2(x / y, 1.0f); return -atan2(x / y, 1.0f);
} else { } else {
if (y > 0.0f) if (y > 0.0f)
return -(PI + atan2(x / y, 1.0f)); return -(PI + Atan2(x / y, 1.0f));
else else
return -atan2(x / y, 1.0f); return -atan2(x / y, 1.0f);
} }

View file

@ -670,7 +670,7 @@ int16 CPad::GetSteeringLeftRight(void)
int16 axis = NewState.LeftStickX; int16 axis = NewState.LeftStickX;
int16 dpad = (NewState.DPadRight - NewState.DPadLeft) / 2; int16 dpad = (NewState.DPadRight - NewState.DPadLeft) / 2;
if ( abs(axis) > abs(dpad) ) if ( Abs(axis) > Abs(dpad) )
return axis; return axis;
else else
return dpad; return dpad;
@ -703,7 +703,7 @@ int16 CPad::GetSteeringUpDown(void)
int16 axis = NewState.LeftStickY; int16 axis = NewState.LeftStickY;
int16 dpad = (NewState.DPadUp - NewState.DPadDown) / 2; int16 dpad = (NewState.DPadUp - NewState.DPadDown) / 2;
if ( abs(axis) > abs(dpad) ) if ( Abs(axis) > Abs(dpad) )
return axis; return axis;
else else
return dpad; return dpad;
@ -790,7 +790,7 @@ int16 CPad::GetPedWalkLeftRight(void)
int16 axis = NewState.LeftStickX; int16 axis = NewState.LeftStickX;
int16 dpad = (NewState.DPadRight - NewState.DPadLeft) / 2; int16 dpad = (NewState.DPadRight - NewState.DPadLeft) / 2;
if ( abs(axis) > abs(dpad) ) if ( Abs(axis) > Abs(dpad) )
return axis; return axis;
else else
return dpad; return dpad;
@ -824,7 +824,7 @@ int16 CPad::GetPedWalkUpDown(void)
int16 axis = NewState.LeftStickY; int16 axis = NewState.LeftStickY;
int16 dpad = (NewState.DPadDown - NewState.DPadUp) / 2; int16 dpad = (NewState.DPadDown - NewState.DPadUp) / 2;
if ( abs(axis) > abs(dpad) ) if ( Abs(axis) > Abs(dpad) )
return axis; return axis;
else else
return dpad; return dpad;
@ -854,7 +854,7 @@ int16 CPad::GetAnalogueUpDown(void)
int16 axis = NewState.LeftStickY; int16 axis = NewState.LeftStickY;
int16 dpad = (NewState.DPadDown - NewState.DPadUp) / 2; int16 dpad = (NewState.DPadDown - NewState.DPadUp) / 2;
if ( abs(axis) > abs(dpad) ) if ( Abs(axis) > Abs(dpad) )
return axis; return axis;
else else
return dpad; return dpad;
@ -1683,7 +1683,7 @@ int16 CPad::SniperModeLookLeftRight(void)
int16 axis = NewState.LeftStickX; int16 axis = NewState.LeftStickX;
int16 dpad = (NewState.DPadRight - NewState.DPadLeft) / 2; int16 dpad = (NewState.DPadRight - NewState.DPadLeft) / 2;
if ( abs(axis) > abs(dpad) ) if ( Abs(axis) > Abs(dpad) )
return axis; return axis;
else else
return dpad; return dpad;
@ -1694,7 +1694,7 @@ int16 CPad::SniperModeLookUpDown(void)
int16 axis = NewState.LeftStickY; int16 axis = NewState.LeftStickY;
int16 dpad = (NewState.DPadUp - NewState.DPadDown) / 2; int16 dpad = (NewState.DPadUp - NewState.DPadDown) / 2;
if ( abs(axis) > abs(dpad) ) if ( Abs(axis) > Abs(dpad) )
return axis; return axis;
else else
return dpad; return dpad;
@ -1704,11 +1704,11 @@ int16 CPad::LookAroundLeftRight(void)
{ {
float axis = GetPad(0)->NewState.RightStickX; float axis = GetPad(0)->NewState.RightStickX;
if ( fabs(axis) > 85 && !GetLookBehindForPed() ) if ( Abs(axis) > 85 && !GetLookBehindForPed() )
return (int16) ( (axis + ( ( axis > 0 ) ? -85 : 85) ) return (int16) ( (axis + ( ( axis > 0 ) ? -85 : 85) )
* (127.0f / 32.0f) ); // 3.96875f * (127.0f / 32.0f) ); // 3.96875f
else if ( TheCamera.Cams[0].Using3rdPersonMouseCam() && fabs(axis) > 10 ) else if ( TheCamera.Cams[0].Using3rdPersonMouseCam() && Abs(axis) > 10 )
return (int16) ( (axis + ( ( axis > 0 ) ? -10 : 10) ) return (int16) ( (axis + ( ( axis > 0 ) ? -10 : 10) )
* (127.0f / 64.0f) ); // 1.984375f * (127.0f / 64.0f) ); // 1.984375f
@ -1719,11 +1719,11 @@ int16 CPad::LookAroundUpDown(void)
{ {
int16 axis = GetPad(0)->NewState.RightStickY; int16 axis = GetPad(0)->NewState.RightStickY;
if ( abs(axis) > 85 && !GetLookBehindForPed() ) if ( Abs(axis) > 85 && !GetLookBehindForPed() )
return (int16) ( (axis + ( ( axis > 0 ) ? -85 : 85) ) return (int16) ( (axis + ( ( axis > 0 ) ? -85 : 85) )
* (127.0f / 32.0f) ); // 3.96875f * (127.0f / 32.0f) ); // 3.96875f
else if ( TheCamera.Cams[0].Using3rdPersonMouseCam() && abs(axis) > 40 ) else if ( TheCamera.Cams[0].Using3rdPersonMouseCam() && Abs(axis) > 40 )
return (int16) ( (axis + ( ( axis > 0 ) ? -40 : 40) ) return (int16) ( (axis + ( ( axis > 0 ) ? -40 : 40) )
* (127.0f / 64.0f) ); // 1.984375f * (127.0f / 64.0f) ); // 1.984375f

View file

@ -469,8 +469,8 @@ void CRadar::DrawRadarMask()
// Then generate a quarter of the circle // Then generate a quarter of the circle
for (int j = 0; j < 7; j++) { for (int j = 0; j < 7; j++) {
in.x = corners[i].x * cos(j * (PI / 2.0f / 6.0f)); in.x = corners[i].x * Cos(j * (PI / 2.0f / 6.0f));
in.y = corners[i].y * sin(j * (PI / 2.0f / 6.0f)); in.y = corners[i].y * Sin(j * (PI / 2.0f / 6.0f));
TransformRadarPointToScreenSpace(out[j + 1], in); TransformRadarPointToScreenSpace(out[j + 1], in);
}; };
@ -562,8 +562,8 @@ void CRadar::DrawRotatingRadarSprite(CSprite2d* sprite, float x, float y, float
for (uint32 i = 0; i < 4; i++) { for (uint32 i = 0; i < 4; i++) {
oldPosn[i] = curPosn[i]; oldPosn[i] = curPosn[i];
curPosn[i].x = x + (oldPosn[i].x - x) * cosf(angle) + (oldPosn[i].y - y) * sinf(angle); curPosn[i].x = x + (oldPosn[i].x - x) * Cos(angle) + (oldPosn[i].y - y) * Sin(angle);
curPosn[i].y = y - (oldPosn[i].x - x) * sinf(angle) + (oldPosn[i].y - y) * cosf(angle); curPosn[i].y = y - (oldPosn[i].x - x) * Sin(angle) + (oldPosn[i].y - y) * Cos(angle);
} }
sprite->Draw(curPosn[2].x, curPosn[2].y, curPosn[3].x, curPosn[3].y, curPosn[0].x, curPosn[0].y, curPosn[1].x, curPosn[1].y, CRGBA(255, 255, 255, alpha)); sprite->Draw(curPosn[2].x, curPosn[2].y, curPosn[3].x, curPosn[3].y, curPosn[0].x, curPosn[0].y, curPosn[1].x, curPosn[1].y, CRGBA(255, 255, 255, alpha));
@ -869,7 +869,7 @@ void CRadar::TransformRadarPointToRealWorldSpace(CVector2D &out, const CVector2D
float s, c; float s, c;
s = -sin(TheCamera.GetForward().Heading()); s = -sin(TheCamera.GetForward().Heading());
c = cos(TheCamera.GetForward().Heading()); c = Cos(TheCamera.GetForward().Heading());
if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWN1 || TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWNPED) { if (TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWN1 || TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWNPED) {
s = 0.0f; s = 0.0f;
@ -886,7 +886,7 @@ void CRadar::TransformRadarPointToRealWorldSpace(CVector2D &out, const CVector2D
forward = TheCamera.Cams[TheCamera.ActiveCam].CamTargetEntity->GetPosition() - TheCamera.Cams[TheCamera.ActiveCam].SourceBeforeLookBehind; forward = TheCamera.Cams[TheCamera.ActiveCam].CamTargetEntity->GetPosition() - TheCamera.Cams[TheCamera.ActiveCam].SourceBeforeLookBehind;
s = -sin(forward.Heading()); s = -sin(forward.Heading());
c = cos(forward.Heading()); c = Cos(forward.Heading());
} }
out.x = s * in.y + c * in.x; out.x = s * in.y + c * in.x;
@ -915,8 +915,8 @@ void CRadar::TransformRealWorldPointToRadarSpace(CVector2D &out, const CVector2D
c = 1.0f; c = 1.0f;
} }
else if (TheCamera.GetLookDirection() == LOOKING_FORWARD) { else if (TheCamera.GetLookDirection() == LOOKING_FORWARD) {
s = sin(TheCamera.GetForward().Heading()); s = Sin(TheCamera.GetForward().Heading());
c = cos(TheCamera.GetForward().Heading()); c = Cos(TheCamera.GetForward().Heading());
} }
else { else {
CVector forward; CVector forward;
@ -928,8 +928,8 @@ void CRadar::TransformRealWorldPointToRadarSpace(CVector2D &out, const CVector2D
else else
forward = TheCamera.Cams[TheCamera.ActiveCam].CamTargetEntity->GetPosition() - TheCamera.Cams[TheCamera.ActiveCam].SourceBeforeLookBehind; forward = TheCamera.Cams[TheCamera.ActiveCam].CamTargetEntity->GetPosition() - TheCamera.Cams[TheCamera.ActiveCam].SourceBeforeLookBehind;
s = sin(forward.Heading()); s = Sin(forward.Heading());
c = cos(forward.Heading()); c = Cos(forward.Heading());
} }
float x = (in.x - vec2DRadarOrigin.x) * (1.0f / m_RadarRange); float x = (in.x - vec2DRadarOrigin.x) * (1.0f / m_RadarRange);

View file

@ -2131,8 +2131,8 @@ CStreaming::DeleteRwObjectsAfterDeath(const CVector &pos)
for(x = 0; x < NUMSECTORS_X; x++) for(x = 0; x < NUMSECTORS_X; x++)
for(y = 0; y < NUMSECTORS_Y; y++) for(y = 0; y < NUMSECTORS_Y; y++)
if(fabs(ix - x) > 3.0f && if(Abs(ix - x) > 3.0f &&
fabs(iy - y) > 3.0f){ Abs(iy - y) > 3.0f){
sect = CWorld::GetSector(x, y); sect = CWorld::GetSector(x, y);
DeleteRwObjectsInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS]); DeleteRwObjectsInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS]);
DeleteRwObjectsInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS_OVERLAP]); DeleteRwObjectsInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS_OVERLAP]);
@ -2158,7 +2158,7 @@ CStreaming::DeleteRwObjectsBehindCamera(int32 mem)
ix = CWorld::GetSectorIndexX(TheCamera.GetPosition().x); ix = CWorld::GetSectorIndexX(TheCamera.GetPosition().x);
iy = CWorld::GetSectorIndexX(TheCamera.GetPosition().y); iy = CWorld::GetSectorIndexX(TheCamera.GetPosition().y);
if(fabs(TheCamera.GetForward().x) > fabs(TheCamera.GetForward().y)){ if(Abs(TheCamera.GetForward().x) > Abs(TheCamera.GetForward().y)){
// looking west/east // looking west/east
ymin = max(iy - 10, 0); ymin = max(iy - 10, 0);
@ -2312,13 +2312,13 @@ CStreaming::DeleteRwObjectsInOverlapSectorList(CPtrList &list, int32 x, int32 y)
e = (CEntity*)node->item; e = (CEntity*)node->item;
if(e->m_rwObject && !e->bStreamingDontDelete && !e->bImBeingRendered){ if(e->m_rwObject && !e->bStreamingDontDelete && !e->bImBeingRendered){
// Now this is pretty weird... // Now this is pretty weird...
if(fabs(CWorld::GetSectorIndexX(e->GetPosition().x) - x) >= 2.0f) if(Abs(CWorld::GetSectorIndexX(e->GetPosition().x) - x) >= 2.0f)
// { // {
e->DeleteRwObject(); e->DeleteRwObject();
// return; // BUG? // return; // BUG?
// } // }
else // FIX? else // FIX?
if(fabs(CWorld::GetSectorIndexY(e->GetPosition().y) - y) >= 2.0f) if(Abs(CWorld::GetSectorIndexY(e->GetPosition().y) - y) >= 2.0f)
e->DeleteRwObject(); e->DeleteRwObject();
} }
} }

View file

@ -97,6 +97,7 @@ extern void **rwengine;
#define SCREEN_SCALE_AR(a) (a) #define SCREEN_SCALE_AR(a) (a)
#endif #endif
#include "math/maths.h"
#include "math/Vector.h" #include "math/Vector.h"
#include "math/Vector2D.h" #include "math/Vector2D.h"
#include "math/Matrix.h" #include "math/Matrix.h"

View file

@ -806,12 +806,12 @@ CEntity::ModifyMatrixForTreeInWind(void)
}else if(CWeather::Wind >= 0.2){ }else if(CWeather::Wind >= 0.2){
t = (uintptr)this + CTimer::GetTimeInMilliseconds(); t = (uintptr)this + CTimer::GetTimeInMilliseconds();
f = (t & 0xFFF)/(float)0x1000; f = (t & 0xFFF)/(float)0x1000;
flutter = sin(f * 6.28f); flutter = Sin(f * 6.28f);
strength = 0.008f; strength = 0.008f;
}else{ }else{
t = (uintptr)this + CTimer::GetTimeInMilliseconds(); t = (uintptr)this + CTimer::GetTimeInMilliseconds();
f = (t & 0xFFF)/(float)0x1000; f = (t & 0xFFF)/(float)0x1000;
flutter = sin(f * 6.28f); flutter = Sin(f * 6.28f);
strength = 0.005f; strength = 0.005f;
} }
@ -857,7 +857,7 @@ CEntity::ModifyMatrixForBannerInWind(void)
right.z = 0.0f; right.z = 0.0f;
right.Normalise(); right.Normalise();
up = right * flutter; up = right * flutter;
up.z = sqrt(sq(1.0f) - sq(flutter)); up.z = Sqrt(sq(1.0f) - sq(flutter));
GetRight() = CrossProduct(GetForward(), up); GetRight() = CrossProduct(GetForward(), up);
GetUp() = up; GetUp() = up;

View file

@ -476,7 +476,7 @@ CPhysical::ApplySpringDampening(float damping, CVector &springDir, CVector &poin
// what is this? // what is this?
float a = m_fTurnMass / ((point.MagnitudeSqr() + 1.0f) * 2.0f * m_fMass); float a = m_fTurnMass / ((point.MagnitudeSqr() + 1.0f) * 2.0f * m_fMass);
a = min(a, 1.0f); a = min(a, 1.0f);
float b = fabs(impulse / (speedB * m_fMass)); float b = Abs(impulse / (speedB * m_fMass));
if(a < b) if(a < b)
impulse *= a/b; impulse *= a/b;
@ -505,11 +505,11 @@ void
CPhysical::ApplyAirResistance(void) CPhysical::ApplyAirResistance(void)
{ {
if(m_fAirResistance > 0.1f){ if(m_fAirResistance > 0.1f){
float f = powf(m_fAirResistance, CTimer::GetTimeStep()); float f = Pow(m_fAirResistance, CTimer::GetTimeStep());
m_vecMoveSpeed *= f; m_vecMoveSpeed *= f;
m_vecTurnSpeed *= f; m_vecTurnSpeed *= f;
}else{ }else{
float f = powf(1.0f/(m_fAirResistance*0.5f*m_vecMoveSpeed.MagnitudeSqr() + 1.0f), CTimer::GetTimeStep()); float f = Pow(1.0f/(m_fAirResistance*0.5f*m_vecMoveSpeed.MagnitudeSqr() + 1.0f), CTimer::GetTimeStep());
m_vecMoveSpeed *= f; m_vecMoveSpeed *= f;
m_vecTurnSpeed *= 0.99f; m_vecTurnSpeed *= 0.99f;
} }
@ -719,7 +719,7 @@ CPhysical::ApplyCollision(CPhysical *B, CColPoint &colpoint, float &impulseA, fl
if(!B->bInfiniteMass){ if(!B->bInfiniteMass){
if(fB.z < 0.0f){ if(fB.z < 0.0f){
fB.z = 0.0f; fB.z = 0.0f;
if(fabs(speedA) < 0.01f) if(Abs(speedA) < 0.01f)
fB *= 0.5f; fB *= 0.5f;
} }
if(ispedcontactA){ if(ispedcontactA){
@ -815,9 +815,9 @@ CPhysical::ApplyCollisionAlt(CEntity *B, CColPoint &colpoint, float &impulse, CV
float minspeed = 0.0104f * CTimer::GetTimeStep(); float minspeed = 0.0104f * CTimer::GetTimeStep();
if((IsObject() || IsVehicle() && GetUp().z < -0.3f) && if((IsObject() || IsVehicle() && GetUp().z < -0.3f) &&
!bHasContacted && !bHasContacted &&
fabs(m_vecMoveSpeed.x) < minspeed && Abs(m_vecMoveSpeed.x) < minspeed &&
fabs(m_vecMoveSpeed.y) < minspeed && Abs(m_vecMoveSpeed.y) < minspeed &&
fabs(m_vecMoveSpeed.z) < minspeed*2.0f) Abs(m_vecMoveSpeed.z) < minspeed*2.0f)
e = -1.0f; e = -1.0f;
else else
e = -(m_fElasticity + 1.0f); e = -(m_fElasticity + 1.0f);
@ -1150,14 +1150,14 @@ CPhysical::ProcessShiftSectorList(CPtrList *lists)
shift += dir * colpoints[mostColliding].depth * 0.5f; shift += dir * colpoints[mostColliding].depth * 0.5f;
}else if(A->IsPed() && B->IsVehicle() && ((CVehicle*)B)->IsBoat()){ }else if(A->IsPed() && B->IsVehicle() && ((CVehicle*)B)->IsBoat()){
CVector dir = colpoints[mostColliding].normal; CVector dir = colpoints[mostColliding].normal;
float f = min(fabs(dir.z), 0.9f); float f = min(Abs(dir.z), 0.9f);
dir.z = 0.0f; dir.z = 0.0f;
dir.Normalise(); dir.Normalise();
shift += dir * colpoints[mostColliding].depth / (1.0f - f); shift += dir * colpoints[mostColliding].depth / (1.0f - f);
boat = B; boat = B;
}else if(B->IsPed() && A->IsVehicle() && ((CVehicle*)A)->IsBoat()){ }else if(B->IsPed() && A->IsVehicle() && ((CVehicle*)A)->IsBoat()){
CVector dir = colpoints[mostColliding].normal * -1.0f; CVector dir = colpoints[mostColliding].normal * -1.0f;
float f = min(fabs(dir.z), 0.9f); float f = min(Abs(dir.z), 0.9f);
dir.z = 0.0f; dir.z = 0.0f;
dir.Normalise(); dir.Normalise();
B->GetPosition() += dir * colpoints[mostColliding].depth / (1.0f - f); B->GetPosition() += dir * colpoints[mostColliding].depth / (1.0f - f);
@ -1498,8 +1498,8 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists)
float imp = impulseA; float imp = impulseA;
if(A->IsVehicle() && A->GetUp().z < -0.6f && if(A->IsVehicle() && A->GetUp().z < -0.6f &&
fabs(A->m_vecMoveSpeed.x) < 0.05f && Abs(A->m_vecMoveSpeed.x) < 0.05f &&
fabs(A->m_vecMoveSpeed.y) < 0.05f) Abs(A->m_vecMoveSpeed.y) < 0.05f)
imp *= 0.1f; imp *= 0.1f;
float turnSpeedDiff = A->m_vecTurnSpeed.MagnitudeSqr(); float turnSpeedDiff = A->m_vecTurnSpeed.MagnitudeSqr();
@ -1519,8 +1519,8 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists)
float imp = impulseA; float imp = impulseA;
if(A->IsVehicle() && A->GetUp().z < -0.6f && if(A->IsVehicle() && A->GetUp().z < -0.6f &&
fabs(A->m_vecMoveSpeed.x) < 0.05f && Abs(A->m_vecMoveSpeed.x) < 0.05f &&
fabs(A->m_vecMoveSpeed.y) < 0.05f) Abs(A->m_vecMoveSpeed.y) < 0.05f)
imp *= 0.1f; imp *= 0.1f;
float turnSpeedDiff = A->m_vecTurnSpeed.MagnitudeSqr(); float turnSpeedDiff = A->m_vecTurnSpeed.MagnitudeSqr();
@ -1557,8 +1557,8 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists)
m_vecTurnSpeed += turnSpeed / numResponses; m_vecTurnSpeed += turnSpeed / numResponses;
if(!CWorld::bNoMoreCollisionTorque && if(!CWorld::bNoMoreCollisionTorque &&
A->m_status == STATUS_PLAYER && A->IsVehicle() && A->m_status == STATUS_PLAYER && A->IsVehicle() &&
fabs(A->m_vecMoveSpeed.x) > 0.2f && Abs(A->m_vecMoveSpeed.x) > 0.2f &&
fabs(A->m_vecMoveSpeed.y) > 0.2f){ Abs(A->m_vecMoveSpeed.y) > 0.2f){
A->m_vecMoveFriction.x += moveSpeed.x * -0.3f / numCollisions; A->m_vecMoveFriction.x += moveSpeed.x * -0.3f / numCollisions;
A->m_vecMoveFriction.y += moveSpeed.y * -0.3f / numCollisions; A->m_vecMoveFriction.y += moveSpeed.y * -0.3f / numCollisions;
A->m_vecTurnFriction += turnSpeed * -0.3f / numCollisions; A->m_vecTurnFriction += turnSpeed * -0.3f / numCollisions;
@ -1789,7 +1789,7 @@ CPhysical::ProcessShift(void)
} }
// x is the number of units (m) we would like to step // x is the number of units (m) we would like to step
#define NUMSTEPS(x) ceil(sqrt(distSq) * (1.0f/(x))) #define NUMSTEPS(x) ceil(Sqrt(distSq) * (1.0f/(x)))
void void
CPhysical::ProcessCollision(void) CPhysical::ProcessCollision(void)

View file

@ -127,8 +127,8 @@ public:
} }
void SetRotateXOnly(float angle){ void SetRotateXOnly(float angle){
float c = cos(angle); float c = Cos(angle);
float s = sin(angle); float s = Sin(angle);
m_matrix.right.x = 1.0f; m_matrix.right.x = 1.0f;
m_matrix.right.y = 0.0f; m_matrix.right.y = 0.0f;
@ -149,8 +149,8 @@ public:
m_matrix.pos.z = 0.0f; m_matrix.pos.z = 0.0f;
} }
void SetRotateYOnly(float angle){ void SetRotateYOnly(float angle){
float c = cos(angle); float c = Cos(angle);
float s = sin(angle); float s = Sin(angle);
m_matrix.right.x = c; m_matrix.right.x = c;
m_matrix.right.y = 0.0f; m_matrix.right.y = 0.0f;
@ -171,8 +171,8 @@ public:
m_matrix.pos.z = 0.0f; m_matrix.pos.z = 0.0f;
} }
void SetRotateZOnly(float angle){ void SetRotateZOnly(float angle){
float c = cos(angle); float c = Cos(angle);
float s = sin(angle); float s = Sin(angle);
m_matrix.right.x = c; m_matrix.right.x = c;
m_matrix.right.y = s; m_matrix.right.y = s;
@ -193,12 +193,12 @@ public:
m_matrix.pos.z = 0.0f; m_matrix.pos.z = 0.0f;
} }
void SetRotate(float xAngle, float yAngle, float zAngle) { void SetRotate(float xAngle, float yAngle, float zAngle) {
float cX = cos(xAngle); float cX = Cos(xAngle);
float sX = sin(xAngle); float sX = Sin(xAngle);
float cY = cos(yAngle); float cY = Cos(yAngle);
float sY = sin(yAngle); float sY = Sin(yAngle);
float cZ = cos(zAngle); float cZ = Cos(zAngle);
float sZ = sin(zAngle); float sZ = Sin(zAngle);
m_matrix.right.x = cZ * cY - (sZ * sX) * sY; m_matrix.right.x = cZ * cY - (sZ * sX) * sY;
m_matrix.right.y = (cZ * sX) * sY + sZ * cY; m_matrix.right.y = (cZ * sX) * sY + sZ * cY;

View file

@ -8,7 +8,7 @@ public:
CQuaternion(void) {} CQuaternion(void) {}
CQuaternion(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {} CQuaternion(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {}
float Magnitude(void) const { return sqrt(x*x + y*y + z*z + w*w); } float Magnitude(void) const { return Sqrt(x*x + y*y + z*z + w*w); }
float MagnitudeSqr(void) const { return x*x + y*y + z*z + w*w; } float MagnitudeSqr(void) const { return x*x + y*y + z*z + w*w; }
const CQuaternion &operator+=(CQuaternion const &right) { const CQuaternion &operator+=(CQuaternion const &right) {

View file

@ -22,10 +22,10 @@ public:
return *((RwV3d*)this); return *((RwV3d*)this);
} }
#endif #endif
float Heading(void) const { return atan2(-x, y); } float Heading(void) const { return Atan2(-x, y); }
float Magnitude(void) const { return sqrt(x*x + y*y + z*z); } float Magnitude(void) const { return Sqrt(x*x + y*y + z*z); }
float MagnitudeSqr(void) const { return x*x + y*y + z*z; } float MagnitudeSqr(void) const { return x*x + y*y + z*z; }
float Magnitude2D(void) const { return sqrt(x*x + y*y); } float Magnitude2D(void) const { return Sqrt(x*x + y*y); }
float MagnitudeSqr2D(void) const { return x*x + y*y; } float MagnitudeSqr2D(void) const { return x*x + y*y; }
void Normalise(void) { void Normalise(void) {
float sq = MagnitudeSqr(); float sq = MagnitudeSqr();

View file

@ -7,7 +7,7 @@ public:
CVector2D(void) {} CVector2D(void) {}
CVector2D(float x, float y) : x(x), y(y) {} CVector2D(float x, float y) : x(x), y(y) {}
CVector2D(const CVector &v) : x(v.x), y(v.y) {} CVector2D(const CVector &v) : x(v.x), y(v.y) {}
float Magnitude(void) const { return sqrt(x*x + y*y); } float Magnitude(void) const { return Sqrt(x*x + y*y); }
float MagnitudeSqr(void) const { return x*x + y*y; } float MagnitudeSqr(void) const { return x*x + y*y; }
void Normalise(void){ void Normalise(void){

View file

@ -13,11 +13,11 @@ CQuaternion::Slerp(const CQuaternion &q1, const CQuaternion &q2, float theta, fl
float w1, w2; float w1, w2;
if(theta > PI/2){ if(theta > PI/2){
theta = PI - theta; theta = PI - theta;
w1 = sin((1.0f - t) * theta) * invSin; w1 = Sin((1.0f - t) * theta) * invSin;
w2 = -sin(t * theta) * invSin; w2 = -sin(t * theta) * invSin;
}else{ }else{
w1 = sin((1.0f - t) * theta) * invSin; w1 = Sin((1.0f - t) * theta) * invSin;
w2 = sin(t * theta) * invSin; w2 = Sin(t * theta) * invSin;
} }
*this = w1*q1 + w2*q2; *this = w1*q1 + w2*q2;
} }

12
src/math/maths.h Normal file
View file

@ -0,0 +1,12 @@
#pragma once
// wrapper around float versions of functions
// in gta they are in CMaths but that makes the code rather noisy
inline float Sin(float x) { return sinf(x); }
inline float Cos(float x) { return cosf(x); }
inline float Abs(float x) { return fabs(x); }
inline float Sqrt(float x) { return sqrtf(x); }
inline float Atan2(float y, float x) { return atan2f(y, x); }
inline float RecipSqrt(float x) { return 1.0f/sqrtf(x); }
inline float Pow(float x, float y) { return powf(x, y); }

View file

@ -551,7 +551,7 @@ CheckForPedsOnGroundToAttack(CPlayerPed *player, CPed **pedOnGround)
angleToFace = CGeneral::LimitRadianAngle(angleToFace); angleToFace = CGeneral::LimitRadianAngle(angleToFace);
player->m_fRotationCur = CGeneral::LimitRadianAngle(player->m_fRotationCur); player->m_fRotationCur = CGeneral::LimitRadianAngle(player->m_fRotationCur);
angleDiff = fabs(angleToFace - player->m_fRotationCur); angleDiff = Abs(angleToFace - player->m_fRotationCur);
if (angleDiff > PI) if (angleDiff > PI)
angleDiff = 2 * PI - angleDiff; angleDiff = 2 * PI - angleDiff;
@ -872,7 +872,7 @@ CPed::Avoid(void)
// If so, we want to avoid it, so we turn our body 45 degree and look to somewhere else. // If so, we want to avoid it, so we turn our body 45 degree and look to somewhere else.
// Game converts from radians to degress and back again here, doesn't make much sense // Game converts from radians to degress and back again here, doesn't make much sense
CVector2D forward(-sin(m_fRotationCur), cos(m_fRotationCur)); CVector2D forward(-sin(m_fRotationCur), Cos(m_fRotationCur));
forward.Normalise(); // this is kinda pointless forward.Normalise(); // this is kinda pointless
// Move forward 1.25 meters // Move forward 1.25 meters
@ -2151,10 +2151,10 @@ CPed::CalculateNewVelocity(void)
} }
} }
CVector2D forward(sin(m_fRotationCur), cos(m_fRotationCur)); CVector2D forward(Sin(m_fRotationCur), Cos(m_fRotationCur));
m_moved.x = CrossProduct2D(m_vecAnimMoveDelta, forward); // (m_vecAnimMoveDelta.x * cos(m_fRotationCur)) + -sin(m_fRotationCur) * m_vecAnimMoveDelta.y; m_moved.x = CrossProduct2D(m_vecAnimMoveDelta, forward); // (m_vecAnimMoveDelta.x * Cos(m_fRotationCur)) + -sin(m_fRotationCur) * m_vecAnimMoveDelta.y;
m_moved.y = DotProduct2D(m_vecAnimMoveDelta, forward); // m_vecAnimMoveDelta.y* cos(m_fRotationCur) + (m_vecAnimMoveDelta.x * sin(m_fRotationCur)); m_moved.y = DotProduct2D(m_vecAnimMoveDelta, forward); // m_vecAnimMoveDelta.y* Cos(m_fRotationCur) + (m_vecAnimMoveDelta.x * Sin(m_fRotationCur));
if (CTimer::GetTimeStep() >= 0.01f) { if (CTimer::GetTimeStep() >= 0.01f) {
m_moved = m_moved * (1 / CTimer::GetTimeStep()); m_moved = m_moved * (1 / CTimer::GetTimeStep());
@ -2179,7 +2179,7 @@ CPed::CalculateNewVelocity(void)
// Interestingly this part is responsible for diagonal walking. // Interestingly this part is responsible for diagonal walking.
if (localWalkAngle > -DEGTORAD(50.0f) && localWalkAngle < DEGTORAD(50.0f)) { if (localWalkAngle > -DEGTORAD(50.0f) && localWalkAngle < DEGTORAD(50.0f)) {
TheCamera.Cams[TheCamera.ActiveCam].m_fPlayerVelocity = pedSpeed; TheCamera.Cams[TheCamera.ActiveCam].m_fPlayerVelocity = pedSpeed;
m_moved = CVector2D(-sin(walkAngle), cos(walkAngle)) * pedSpeed; m_moved = CVector2D(-sin(walkAngle), Cos(walkAngle)) * pedSpeed;
} }
CAnimBlendAssociation *idleAssoc = RpAnimBlendClumpGetAssociation((RpClump*) m_rwObject, ANIM_IDLE_STANCE); CAnimBlendAssociation *idleAssoc = RpAnimBlendClumpGetAssociation((RpClump*) m_rwObject, ANIM_IDLE_STANCE);
@ -2239,7 +2239,7 @@ CPed::CanPedDriveOff(void)
bool bool
CPed::CanPedJumpThis(int32 unused) CPed::CanPedJumpThis(int32 unused)
{ {
CVector2D forward(-sin(m_fRotationCur), cos(m_fRotationCur)); CVector2D forward(-sin(m_fRotationCur), Cos(m_fRotationCur));
CVector pos = GetPosition(); CVector pos = GetPosition();
// wat? // wat?
CVector forwardPos( CVector forwardPos(
@ -2276,7 +2276,7 @@ CPed::CanSeeEntity(CEntity *entity, float threshold)
else if (ourAngle > 2 * PI) else if (ourAngle > 2 * PI)
ourAngle -= 2 * PI; ourAngle -= 2 * PI;
float neededTurn = fabs(neededAngle - ourAngle); float neededTurn = Abs(neededAngle - ourAngle);
return neededTurn < threshold || 2 * PI - threshold < neededTurn; return neededTurn < threshold || 2 * PI - threshold < neededTurn;
} }
@ -2811,7 +2811,7 @@ CPed::TurnBody(void)
float neededTurn = currentRot - limitedLookDir; float neededTurn = currentRot - limitedLookDir;
m_fRotationDest = limitedLookDir; m_fRotationDest = limitedLookDir;
if (fabs(neededTurn) > 0.05f) { if (Abs(neededTurn) > 0.05f) {
doneSmoothly = false; doneSmoothly = false;
currentRot -= neededTurn * 0.2f; currentRot -= neededTurn * 0.2f;
} }

View file

@ -34,8 +34,8 @@ CPedIK::RotateTorso(AnimBlendFrameData *animBlend, LimbOrientation *limb, bool c
// rotation == 0 -> looking in y direction // rotation == 0 -> looking in y direction
// left? vector // left? vector
float c = cos(m_ped->m_fRotationCur); float c = Cos(m_ped->m_fRotationCur);
float s = sin(m_ped->m_fRotationCur); float s = Sin(m_ped->m_fRotationCur);
rightVector.x = -(c*mat->right.x + s*mat->right.y); rightVector.x = -(c*mat->right.x + s*mat->right.y);
rightVector.y = -(c*mat->up.x + s*mat->up.y); rightVector.y = -(c*mat->up.x + s*mat->up.y);
rightVector.z = -(c*mat->at.x + s*mat->at.y); rightVector.z = -(c*mat->at.x + s*mat->at.y);

View file

@ -53,7 +53,7 @@ CClouds::Shutdown(void)
void void
CClouds::Update(void) CClouds::Update(void)
{ {
float s = sin(TheCamera.Orientation - 0.85f); float s = Sin(TheCamera.Orientation - 0.85f);
CloudRotation += CWeather::Wind*s*0.0025f; CloudRotation += CWeather::Wind*s*0.0025f;
IndividualRotation += (CWeather::Wind*CTimer::GetTimeStep() + 0.3f) * 60.0f; IndividualRotation += (CWeather::Wind*CTimer::GetTimeStep() + 0.3f) * 60.0f;
} }
@ -81,7 +81,7 @@ CClouds::Render(void)
float coverage = CWeather::CloudCoverage <= CWeather::Foggyness ? CWeather::Foggyness : CWeather::CloudCoverage; float coverage = CWeather::CloudCoverage <= CWeather::Foggyness ? CWeather::Foggyness : CWeather::CloudCoverage;
// Moon // Moon
int moonfadeout = abs(minute - 180); // fully visible at 3AM int moonfadeout = Abs(minute - 180); // fully visible at 3AM
if(moonfadeout < 180){ // fade in/out 3 hours if(moonfadeout < 180){ // fade in/out 3 hours
int brightness = (1.0f - coverage) * (180 - moonfadeout); int brightness = (1.0f - coverage) * (180 - moonfadeout);
RwV3d pos = { 0.0f, -100.0f, 15.0f }; RwV3d pos = { 0.0f, -100.0f, 15.0f };
@ -169,8 +169,8 @@ CClouds::Render(void)
} }
// Fluffy clouds // Fluffy clouds
float rot_sin = sin(CloudRotation); float rot_sin = Sin(CloudRotation);
float rot_cos = cos(CloudRotation); float rot_cos = Cos(CloudRotation);
int fluffyalpha = 160 * (1.0f - CWeather::Foggyness); int fluffyalpha = 160 * (1.0f - CWeather::Foggyness);
if(fluffyalpha != 0){ if(fluffyalpha != 0){
static float CoorsOffsetX[37] = { static float CoorsOffsetX[37] = {
@ -210,7 +210,7 @@ CClouds::Render(void)
worldpos.z = pos.z; worldpos.z = pos.z;
if(CSprite::CalcScreenCoors(worldpos, &screenpos, &szx, &szy, false)){ if(CSprite::CalcScreenCoors(worldpos, &screenpos, &szx, &szy, false)){
float sundist = sqrt(sq(screenpos.x-CCoronas::SunScreenX) + sq(screenpos.y-CCoronas::SunScreenY)); float sundist = Sqrt(sq(screenpos.x-CCoronas::SunScreenX) + sq(screenpos.y-CCoronas::SunScreenY));
int tr = CTimeCycle::GetFluffyCloudsTopRed(); int tr = CTimeCycle::GetFluffyCloudsTopRed();
int tg = CTimeCycle::GetFluffyCloudsTopGreen(); int tg = CTimeCycle::GetFluffyCloudsTopGreen();
int tb = CTimeCycle::GetFluffyCloudsTopBlue(); int tb = CTimeCycle::GetFluffyCloudsTopBlue();
@ -302,7 +302,7 @@ CClouds::RenderBackground(int16 topred, int16 topgreen, int16 topblue,
int16 botred, int16 botgreen, int16 botblue, int16 alpha) int16 botred, int16 botgreen, int16 botblue, int16 alpha)
{ {
RwMatrix *mat = RwFrameGetLTM(RwCameraGetFrame(TheCamera.m_pRwCamera)); RwMatrix *mat = RwFrameGetLTM(RwCameraGetFrame(TheCamera.m_pRwCamera));
float c = sqrt(mat->right.x * mat->right.x + mat->right.y * mat->right.y); float c = Sqrt(mat->right.x * mat->right.x + mat->right.y * mat->right.y);
if(c > 1.0f) if(c > 1.0f)
c = 1.0f; c = 1.0f;
ms_cameraRoll = acos(c); ms_cameraRoll = acos(c);
@ -424,7 +424,7 @@ CClouds::RenderHorizon(void)
SCREEN_HEIGHT/300.0f * max(TheCamera.GetPosition().z, 0.0f); SCREEN_HEIGHT/300.0f * max(TheCamera.GetPosition().z, 0.0f);
float b = TheCamera.GetUp().z < 0.0f ? float b = TheCamera.GetUp().z < 0.0f ?
SCREEN_HEIGHT : SCREEN_HEIGHT :
SCREEN_HEIGHT * fabs(TheCamera.GetRight().z); SCREEN_HEIGHT * Abs(TheCamera.GetRight().z);
float z2 = z1 + (a + b)*TheCamera.LODDistMultiplier; float z2 = z1 + (a + b)*TheCamera.LODDistMultiplier;
z2 = min(z2, SCREEN_HEIGHT); z2 = min(z2, SCREEN_HEIGHT);
CSprite2d::DrawRect(CRect(0, z1, SCREEN_WIDTH, z2), CSprite2d::DrawRect(CRect(0, z1, SCREEN_WIDTH, z2),

View file

@ -286,8 +286,8 @@ CCoronas::Render(void)
// if distance too big, break streak // if distance too big, break streak
if(aCoronas[i].hasValue[1]){ if(aCoronas[i].hasValue[1]){
if(fabs(aCoronas[i].prevX[0] - aCoronas[i].prevX[1]) > 50.0f || if(Abs(aCoronas[i].prevX[0] - aCoronas[i].prevX[1]) > 50.0f ||
fabs(aCoronas[i].prevY[0] - aCoronas[i].prevY[1]) > 50.0f) Abs(aCoronas[i].prevY[0] - aCoronas[i].prevY[1]) > 50.0f)
aCoronas[i].hasValue[0] = false; aCoronas[i].hasValue[0] = false;
} }
} }

View file

@ -173,7 +173,7 @@ void CHud::Draw()
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
float fStep = sin((CTimer::GetTimeInMilliseconds() & 1023) * 0.0061328127); float fStep = Sin((CTimer::GetTimeInMilliseconds() & 1023) * 0.0061328127);
float fMultBright = SpriteBrightness * 0.03f * (0.25f * fStep + 0.75f); float fMultBright = SpriteBrightness * 0.03f * (0.25f * fStep + 0.75f);
CRect rect; CRect rect;
#ifndef ASPECT_RATIO_SCALE #ifndef ASPECT_RATIO_SCALE

View file

@ -299,8 +299,8 @@ void CParticle::Initialise()
{ {
float angle = DEGTORAD(float(i) * float(360.0f / SIN_COS_TABLE_SIZE)); float angle = DEGTORAD(float(i) * float(360.0f / SIN_COS_TABLE_SIZE));
m_SinTable[i] = sin(angle); m_SinTable[i] = Sin(angle);
m_CosTable[i] = cos(angle); m_CosTable[i] = Cos(angle);
} }
int32 slot = CTxdStore::FindTxdSlot("particle"); int32 slot = CTxdStore::FindTxdSlot("particle");
@ -1599,7 +1599,7 @@ void CParticle::Render()
fTrailLength = fDist; fTrailLength = fDist;
//Float fRot = atan2( vecDist.x / fDist, sqrtf(1.0f - vecDist.x / fDist * (vecDist.x / fDist)) ); //Float fRot = Atan2( vecDist.x / fDist, Sqrt(1.0f - vecDist.x / fDist * (vecDist.x / fDist)) );
float fRot = asinf(vecDist.x / fDist); float fRot = asinf(vecDist.x / fDist);
fRotation = fRot; fRotation = fRot;
@ -1651,7 +1651,7 @@ void CParticle::Render()
fTrailLength = fDist; fTrailLength = fDist;
//Float fRot = atan2(vecDist.x / fDist, sqrt(1.0f - vecDist.x / fDist * (vecDist.x / fDist))); //Float fRot = Atan2(vecDist.x / fDist, Sqrt(1.0f - vecDist.x / fDist * (vecDist.x / fDist)));
float fRot = asinf(vecDist.x / fDist); float fRot = asinf(vecDist.x / fDist);
fRotation = fRot; fRotation = fRot;

View file

@ -33,7 +33,7 @@ CPointLights::AddLight(uint8 type, CVector coors, CVector dir, float radius, flo
return; return;
dist = coors - TheCamera.GetPosition(); dist = coors - TheCamera.GetPosition();
if(fabs(dist.x) < MAX_DIST && fabs(dist.y) < MAX_DIST){ if(Abs(dist.x) < MAX_DIST && Abs(dist.y) < MAX_DIST){
distance = dist.Magnitude(); distance = dist.Magnitude();
if(distance < MAX_DIST){ if(distance < MAX_DIST){
aLights[NumLights].type = type; aLights[NumLights].type = type;
@ -73,9 +73,9 @@ CPointLights::GenerateLightsAffectingObject(CVector *objCoors)
// same weird distance calculation. simplified here // same weird distance calculation. simplified here
dist = aLights[i].coors - *objCoors; dist = aLights[i].coors - *objCoors;
radius = aLights[i].radius; radius = aLights[i].radius;
if(fabs(dist.x) < radius && if(Abs(dist.x) < radius &&
fabs(dist.y) < radius && Abs(dist.y) < radius &&
fabs(dist.z) < radius){ Abs(dist.z) < radius){
distance = dist.Magnitude(); distance = dist.Magnitude();
if(distance < radius){ if(distance < radius){
@ -217,7 +217,7 @@ CPointLights::RenderFogEffect(void)
// more intensity the closer to light source // more intensity the closer to light source
intensity *= 1.0f - sq(dot/FOG_AREA_LENGTH); intensity *= 1.0f - sq(dot/FOG_AREA_LENGTH);
// more intensity the closer to line // more intensity the closer to line
intensity *= 1.0f - sq(sqrt(linedistsq) / FOG_AREA_WIDTH); intensity *= 1.0f - sq(Sqrt(linedistsq) / FOG_AREA_WIDTH);
if(CSprite::CalcScreenCoors(fogcoors, spriteCoors, &spritew, &spriteh, true)){ if(CSprite::CalcScreenCoors(fogcoors, spriteCoors, &spritew, &spriteh, true)){
float rotation = (CTimer::GetTimeInMilliseconds()&0x1FFF) * 2*3.14f / 0x1FFF; float rotation = (CTimer::GetTimeInMilliseconds()&0x1FFF) * 2*3.14f / 0x1FFF;
@ -251,11 +251,11 @@ CPointLights::RenderFogEffect(void)
float dx = xi - aLights[i].coors.x; float dx = xi - aLights[i].coors.x;
float dy = yi - aLights[i].coors.y; float dy = yi - aLights[i].coors.y;
float lightdist = sqrt(sq(dx) + sq(dy)); float lightdist = Sqrt(sq(dx) + sq(dy));
if(lightdist < FOG_AREA_RADIUS){ if(lightdist < FOG_AREA_RADIUS){
dx = xi - TheCamera.GetPosition().x; dx = xi - TheCamera.GetPosition().x;
dy = yi - TheCamera.GetPosition().y; dy = yi - TheCamera.GetPosition().y;
float camdist = sqrt(sq(dx) + sq(dy)); float camdist = Sqrt(sq(dx) + sq(dy));
if(camdist < MAX_DIST){ if(camdist < MAX_DIST){
float intensity; float intensity;
// distance fade // distance fade

View file

@ -135,8 +135,8 @@ CSprite::RenderOneXLUSprite(float x, float y, float z, float w, float h, uint8 r
void void
CSprite::RenderOneXLUSprite_Rotate_Aspect(float x, float y, float z, float w, float h, uint8 r, uint8 g, uint8 b, int16 intens, float recipz, float rotation, uint8 a) CSprite::RenderOneXLUSprite_Rotate_Aspect(float x, float y, float z, float w, float h, uint8 r, uint8 g, uint8 b, int16 intens, float recipz, float rotation, uint8 a)
{ {
float c = cos(DEGTORAD(rotation)); float c = Cos(DEGTORAD(rotation));
float s = sin(DEGTORAD(rotation)); float s = Sin(DEGTORAD(rotation));
float xs[4]; float xs[4];
float ys[4]; float ys[4];
@ -261,8 +261,8 @@ CSprite::RenderBufferedOneXLUSprite_Rotate_Dimension(float x, float y, float z,
{ {
m_bFlushSpriteBufferSwitchZTest = 0; m_bFlushSpriteBufferSwitchZTest = 0;
// TODO: replace with lookup // TODO: replace with lookup
float c = cos(DEGTORAD(rotation)); float c = Cos(DEGTORAD(rotation));
float s = sin(DEGTORAD(rotation)); float s = Sin(DEGTORAD(rotation));
float xs[4]; float xs[4];
float ys[4]; float ys[4];
@ -313,8 +313,8 @@ void
CSprite::RenderBufferedOneXLUSprite_Rotate_Aspect(float x, float y, float z, float w, float h, uint8 r, uint8 g, uint8 b, int16 intens, float recipz, float rotation, uint8 a) CSprite::RenderBufferedOneXLUSprite_Rotate_Aspect(float x, float y, float z, float w, float h, uint8 r, uint8 g, uint8 b, int16 intens, float recipz, float rotation, uint8 a)
{ {
m_bFlushSpriteBufferSwitchZTest = 0; m_bFlushSpriteBufferSwitchZTest = 0;
float c = cos(DEGTORAD(rotation)); float c = Cos(DEGTORAD(rotation));
float s = sin(DEGTORAD(rotation)); float s = Sin(DEGTORAD(rotation));
float xs[4]; float xs[4];
float ys[4]; float ys[4];
@ -365,8 +365,8 @@ void
CSprite::RenderBufferedOneXLUSprite_Rotate_2Colours(float x, float y, float z, float w, float h, uint8 r1, uint8 g1, uint8 b1, uint8 r2, uint8 g2, uint8 b2, float cx, float cy, float recipz, float rotation, uint8 a) CSprite::RenderBufferedOneXLUSprite_Rotate_2Colours(float x, float y, float z, float w, float h, uint8 r1, uint8 g1, uint8 b1, uint8 r2, uint8 g2, uint8 b2, float cx, float cy, float recipz, float rotation, uint8 a)
{ {
m_bFlushSpriteBufferSwitchZTest = 0; m_bFlushSpriteBufferSwitchZTest = 0;
float c = cos(DEGTORAD(rotation)); float c = Cos(DEGTORAD(rotation));
float s = sin(DEGTORAD(rotation)); float s = Sin(DEGTORAD(rotation));
float xs[4]; float xs[4];
float ys[4]; float ys[4];
@ -572,8 +572,8 @@ CSprite::RenderBufferedOneXLUSprite2D_Rotate_Dimension(float x, float y, float w
{ {
m_bFlushSpriteBufferSwitchZTest = 1; m_bFlushSpriteBufferSwitchZTest = 1;
CRGBA col(intens * colour.red >> 8, intens * colour.green >> 8, intens * colour.blue >> 8, alpha); CRGBA col(intens * colour.red >> 8, intens * colour.green >> 8, intens * colour.blue >> 8, alpha);
float c = cos(DEGTORAD(rotation)); float c = Cos(DEGTORAD(rotation));
float s = sin(DEGTORAD(rotation)); float s = Sin(DEGTORAD(rotation));
Set6Vertices2D(&SpriteBufferVerts[6 * nSpriteBufferIndex], Set6Vertices2D(&SpriteBufferVerts[6 * nSpriteBufferIndex],
x + c*w - s*h, x + c*w - s*h,

View file

@ -299,9 +299,9 @@ CTimeCycle::Update(void)
float sunAngle = 2*PI*(CClock::GetMinutes() + CClock::GetHours()*60)/(24*60); float sunAngle = 2*PI*(CClock::GetMinutes() + CClock::GetHours()*60)/(24*60);
CVector &sunPos = GetSunPosition(); CVector &sunPos = GetSunPosition();
sunPos.x = sinf(sunAngle); sunPos.x = Sin(sunAngle);
sunPos.y = 1.0f; sunPos.y = 1.0f;
sunPos.z = 0.2f - cosf(sunAngle); sunPos.z = 0.2f - Cos(sunAngle);
sunPos.Normalise(); sunPos.Normalise();
CShadows::CalcPedShadowValues(sunPos, CShadows::CalcPedShadowValues(sunPos,

View file

@ -2340,7 +2340,7 @@ HRESULT CapturePad(RwInt32 padID)
{ {
float angle = DEGTORAD((float)js.rgdwPOV[0] / 100.0f); float angle = DEGTORAD((float)js.rgdwPOV[0] / 100.0f);
leftStickPos.x = sin(angle); leftStickPos.x = Sin(angle);
leftStickPos.y = -cos(angle); leftStickPos.y = -cos(angle);
} }
@ -2365,16 +2365,16 @@ HRESULT CapturePad(RwInt32 padID)
CPad *pad = CPad::GetPad(bs.padID); CPad *pad = CPad::GetPad(bs.padID);
if ( fabs(leftStickPos.x) > 0.3f ) if ( Abs(leftStickPos.x) > 0.3f )
pad->PCTempJoyState.LeftStickX = (int32)(leftStickPos.x * 128.0f); pad->PCTempJoyState.LeftStickX = (int32)(leftStickPos.x * 128.0f);
if ( fabs(leftStickPos.y) > 0.3f ) if ( Abs(leftStickPos.y) > 0.3f )
pad->PCTempJoyState.LeftStickY = (int32)(leftStickPos.y * 128.0f); pad->PCTempJoyState.LeftStickY = (int32)(leftStickPos.y * 128.0f);
if ( fabs(rightStickPos.x) > 0.3f ) if ( Abs(rightStickPos.x) > 0.3f )
pad->PCTempJoyState.RightStickX = (int32)(rightStickPos.x * 128.0f); pad->PCTempJoyState.RightStickX = (int32)(rightStickPos.x * 128.0f);
if ( fabs(rightStickPos.y) > 0.3f ) if ( Abs(rightStickPos.y) > 0.3f )
pad->PCTempJoyState.RightStickY = (int32)(rightStickPos.y * 128.0f); pad->PCTempJoyState.RightStickY = (int32)(rightStickPos.y * 128.0f);
} }

View file

@ -53,7 +53,7 @@ CDoor::Process(CVehicle *vehicle)
break; break;
} }
fSpeedDiff = clamp(fSpeedDiff, -0.2f, 0.2f); fSpeedDiff = clamp(fSpeedDiff, -0.2f, 0.2f);
if(fabs(fSpeedDiff) > 0.002f) if(Abs(fSpeedDiff) > 0.002f)
m_fAngVel += fSpeedDiff; m_fAngVel += fSpeedDiff;
m_fAngVel *= 0.945f; m_fAngVel *= 0.945f;
m_fAngVel = clamp(m_fAngVel, -0.3f, 0.3f); m_fAngVel = clamp(m_fAngVel, -0.3f, 0.3f);
@ -76,7 +76,7 @@ CDoor::Process(CVehicle *vehicle)
float float
CDoor::RetAngleWhenClosed(void) CDoor::RetAngleWhenClosed(void)
{ {
if(fabs(m_fMaxAngle) < fabs(m_fMinAngle)) if(Abs(m_fMaxAngle) < Abs(m_fMinAngle))
return m_fMaxAngle; return m_fMaxAngle;
else else
return m_fMinAngle; return m_fMinAngle;
@ -85,7 +85,7 @@ CDoor::RetAngleWhenClosed(void)
float float
CDoor::RetAngleWhenOpen(void) CDoor::RetAngleWhenOpen(void)
{ {
if(fabs(m_fMaxAngle) < fabs(m_fMinAngle)) if(Abs(m_fMaxAngle) < Abs(m_fMinAngle))
return m_fMinAngle; return m_fMinAngle;
else else
return m_fMaxAngle; return m_fMaxAngle;
@ -104,7 +104,7 @@ bool
CDoor::IsFullyOpen(void) CDoor::IsFullyOpen(void)
{ {
// why -0.5? that's around 28 deg less than fully open // why -0.5? that's around 28 deg less than fully open
if(fabs(m_fAngle) < fabs(RetAngleWhenOpen()) - 0.5f) if(Abs(m_fAngle) < Abs(RetAngleWhenOpen()) - 0.5f)
return false; return false;
return true; return true;
} }

View file

@ -213,7 +213,7 @@ CVehicle::FlyingControl(eFlightModel flightModel)
ApplyTurnForce(impulse*GetUp(), 2.0f*GetUp() + com); ApplyTurnForce(impulse*GetUp(), 2.0f*GetUp() + com);
m_vecTurnSpeed.y *= powf(0.9f, CTimer::GetTimeStep()); m_vecTurnSpeed.y *= Pow(0.9f, CTimer::GetTimeStep());
moveSpeed = m_vecMoveSpeed.MagnitudeSqr(); moveSpeed = m_vecMoveSpeed.MagnitudeSqr();
if(moveSpeed > 2.25f) if(moveSpeed > 2.25f)
m_vecMoveSpeed *= 1.5f/sqrt(moveSpeed); m_vecMoveSpeed *= 1.5f/sqrt(moveSpeed);
@ -296,7 +296,7 @@ CVehicle::ProcessWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelCon
} }
if(brake > adhesion){ if(brake > adhesion){
if(fabs(contactSpeedFwd) > 0.005f) if(Abs(contactSpeedFwd) > 0.005f)
*wheelState = WHEEL_STATE_STATIC; *wheelState = WHEEL_STATE_STATIC;
}else { }else {
if(fwd > 0.0f){ if(fwd > 0.0f){
@ -317,7 +317,7 @@ CVehicle::ProcessWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelCon
*wheelState = WHEEL_STATE_2; *wheelState = WHEEL_STATE_2;
} }
float l = sqrt(sq(right) + sq(fwd)); float l = Sqrt(sq(right) + sq(fwd));
float tractionLoss = bAlreadySkidding ? 1.0f : m_handling->fTractionLoss; float tractionLoss = bAlreadySkidding ? 1.0f : m_handling->fTractionLoss;
right *= adhesion * tractionLoss / l; right *= adhesion * tractionLoss / l;
fwd *= adhesion * tractionLoss / l; fwd *= adhesion * tractionLoss / l;
@ -552,9 +552,9 @@ CVehicle::CanPedExitCar(void)
if(m_vecMoveSpeed.MagnitudeSqr() > 0.005f) if(m_vecMoveSpeed.MagnitudeSqr() > 0.005f)
return false; return false;
// if car is slow enough, check turn speed // if car is slow enough, check turn speed
if(fabs(m_vecTurnSpeed.x) > 0.01f || if(Abs(m_vecTurnSpeed.x) > 0.01f ||
fabs(m_vecTurnSpeed.y) > 0.01f || Abs(m_vecTurnSpeed.y) > 0.01f ||
fabs(m_vecTurnSpeed.z) > 0.01f) Abs(m_vecTurnSpeed.z) > 0.01f)
return false; return false;
return true; return true;
}else{ }else{
@ -564,9 +564,9 @@ CVehicle::CanPedExitCar(void)
if(m_vecMoveSpeed.MagnitudeSqr() >= 0.005f) if(m_vecMoveSpeed.MagnitudeSqr() >= 0.005f)
return false; return false;
// if car is slow enough, check turn speed // if car is slow enough, check turn speed
if(fabs(m_vecTurnSpeed.x) >= 0.01f || if(Abs(m_vecTurnSpeed.x) >= 0.01f ||
fabs(m_vecTurnSpeed.y) >= 0.01f || Abs(m_vecTurnSpeed.y) >= 0.01f ||
fabs(m_vecTurnSpeed.z) >= 0.01f) Abs(m_vecTurnSpeed.z) >= 0.01f)
return false; return false;
return true; return true;
} }