mirror of
https://github.com/GTAmodding/re3.git
synced 2024-12-27 09:35:39 +00:00
eSurfaceType
This commit is contained in:
parent
0b8f045d36
commit
d8528ebbbe
13 changed files with 226 additions and 227 deletions
|
@ -70,36 +70,36 @@ cAudioManager::GetCollisionOneShotRatio(int32 a, float b) const
|
|||
case SURFACE_DEFAULT:
|
||||
case SURFACE_TARMAC:
|
||||
case SURFACE_PAVEMENT:
|
||||
case SURFACE_STONE:
|
||||
case SURFACE_BOLLARD: result = GetCollisionRatio(b, 10.f, 60.f, 50.f); break;
|
||||
case SURFACE_STEEP_CLIFF:
|
||||
case SURFACE_TRANSPARENT_STONE: result = GetCollisionRatio(b, 10.f, 60.f, 50.f); break;
|
||||
case SURFACE_GRASS:
|
||||
case SURFACE_LOOSE30: result = GetCollisionRatio(b, 0.f, 2.f, 2.f); break;
|
||||
case SURFACE_DIRT: result = GetCollisionRatio(b, 0.f, 2.f, 2.f); break;
|
||||
case SURFACE_DIRTTRACK: result = GetCollisionRatio(b, 0.f, 2.f, 2.f); break;
|
||||
case SURFACE_METAL6: result = GetCollisionRatio(b, 6.f, 50.f, 44.f); break;
|
||||
case SURFACE_CARDBOARDBOX: result = GetCollisionRatio(b, 0.f, 2.f, 2.f); break;
|
||||
case SURFACE_GRAVEL: result = GetCollisionRatio(b, 0.f, 2.f, 2.f); break;
|
||||
case SURFACE_MUD_DRY: result = GetCollisionRatio(b, 0.f, 2.f, 2.f); break;
|
||||
case SURFACE_CAR: result = GetCollisionRatio(b, 6.f, 50.f, 44.f); break;
|
||||
case SURFACE_GLASS: result = GetCollisionRatio(b, 0.1f, 10.f, 9.9f); break;
|
||||
case SURFACE_SCAFFOLD:
|
||||
case SURFACE_STEEL: result = GetCollisionRatio(b, 30.f, 130.f, 100.f); break;
|
||||
case SURFACE_METAL_DOOR: result = GetCollisionRatio(b, 20.f, 100.f, 80.f); break;
|
||||
case SURFACE_BILLBOARD: result = GetCollisionRatio(b, 0.f, 4.f, 4.f); break;
|
||||
case SURFACE_METAL_POLE:
|
||||
case SURFACE_GATE: result = GetCollisionRatio(b, 1.f, 10.f, 9.f); break;
|
||||
case SURFACE_STREET_LIGHT: result = GetCollisionRatio(b, 1.f, 10.f, 9.f); break;
|
||||
case SURFACE_METAL14: result = GetCollisionRatio(b, 1.f, 15.f, 14.f); break;
|
||||
case SURFACE_METAL15: result = GetCollisionRatio(b, 8.f, 50.f, 42.f); break;
|
||||
case SURFACE_METAL_FENCE: result = GetCollisionRatio(b, 0.1f, 10.f, 9.9f); break;
|
||||
case SURFACE_FLESH: result = GetCollisionRatio(b, 0.f, 20.f, 20.f); break;
|
||||
case SURFACE_TRANSPARENT_CLOTH:
|
||||
case SURFACE_THICK_METAL_PLATE: result = GetCollisionRatio(b, 30.f, 130.f, 100.f); break;
|
||||
case SURFACE_GARAGE_DOOR: result = GetCollisionRatio(b, 20.f, 100.f, 80.f); break;
|
||||
case SURFACE_CAR_PANEL: result = GetCollisionRatio(b, 0.f, 4.f, 4.f); break;
|
||||
case SURFACE_SCAFFOLD_POLE:
|
||||
case SURFACE_METAL_GATE: result = GetCollisionRatio(b, 1.f, 10.f, 9.f); break;
|
||||
case SURFACE_LAMP_POST: result = GetCollisionRatio(b, 1.f, 10.f, 9.f); break;
|
||||
case SURFACE_FIRE_HYDRANT: result = GetCollisionRatio(b, 1.f, 15.f, 14.f); break;
|
||||
case SURFACE_GIRDER: result = GetCollisionRatio(b, 8.f, 50.f, 42.f); break;
|
||||
case SURFACE_METAL_CHAIN_FENCE: result = GetCollisionRatio(b, 0.1f, 10.f, 9.9f); break;
|
||||
case SURFACE_PED: result = GetCollisionRatio(b, 0.f, 20.f, 20.f); break;
|
||||
case SURFACE_SAND: result = GetCollisionRatio(b, 0.f, 10.f, 10.f); break;
|
||||
case SURFACE_PUDDLE: result = GetCollisionRatio(b, 0.f, 10.f, 10.f); break;
|
||||
case SURFACE_WOOD: result = GetCollisionRatio(b, 1.f, 4.f, 3.f); break;
|
||||
case SURFACE_WOOD_BOX: result = GetCollisionRatio(b, 0.1f, 5.f, 4.9f); break;
|
||||
case SURFACE_WOOD_PLANK: result = GetCollisionRatio(b, 0.1f, 40.f, 39.9f); break;
|
||||
case SURFACE_TIRE:
|
||||
case SURFACE_RUBBER29: result = GetCollisionRatio(b, 0.f, 10.f, 10.f); break;
|
||||
case SURFACE_HARD24: result = GetCollisionRatio(b, 0.1f, 4.f, 3.9f); break;
|
||||
case SURFACE_WATER: result = GetCollisionRatio(b, 0.f, 10.f, 10.f); break;
|
||||
case SURFACE_WOOD_CRATES: result = GetCollisionRatio(b, 1.f, 4.f, 3.f); break;
|
||||
case SURFACE_WOOD_BENCH: result = GetCollisionRatio(b, 0.1f, 5.f, 4.9f); break;
|
||||
case SURFACE_WOOD_SOLID: result = GetCollisionRatio(b, 0.1f, 40.f, 39.9f); break;
|
||||
case SURFACE_RUBBER:
|
||||
case SURFACE_WHEELBASE: result = GetCollisionRatio(b, 0.f, 10.f, 10.f); break;
|
||||
case SURFACE_PLASTIC: result = GetCollisionRatio(b, 0.1f, 4.f, 3.9f); break;
|
||||
case SURFACE_HEDGE: result = GetCollisionRatio(b, 0.f, 0.5f, 0.5f); break;
|
||||
case SURFACE_METAL27: result = GetCollisionRatio(b, 4.f, 40.f, 36.f); break;
|
||||
case SURFACE_METAL28: result = GetCollisionRatio(b, 0.f, 5.f, 5.f); break;
|
||||
case SURFACE_CONTAINER: result = GetCollisionRatio(b, 4.f, 40.f, 36.f); break;
|
||||
case SURFACE_NEWS_VENDOR: result = GetCollisionRatio(b, 0.f, 5.f, 5.f); break;
|
||||
default: result = 0.f; break;
|
||||
}
|
||||
|
||||
|
@ -130,18 +130,18 @@ cAudioManager::SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollisio
|
|||
m_sQueueSample.m_nSampleIndex = SFX_RAIN;
|
||||
m_sQueueSample.m_nFrequency = 13000.f * ratio + 35000;
|
||||
vol = 50.f * ratio;
|
||||
} else if(surface1 == SURFACE_PUDDLE || surface2 == SURFACE_PUDDLE) {
|
||||
} else if(surface1 == SURFACE_WATER || surface2 == SURFACE_WATER) {
|
||||
ratio = GetCollisionRatio(audioCollision.m_fIntensity2, 0.0001f, 0.09f, 0.0899f);
|
||||
m_sQueueSample.m_nSampleIndex = SFX_BOAT_WATER_LOOP;
|
||||
m_sQueueSample.m_nFrequency = 6050.f * ratio + 16000;
|
||||
vol = 30.f * ratio;
|
||||
} else if(surface1 == SURFACE_DIRT || surface2 == SURFACE_DIRT || surface1 == SURFACE_DIRTTRACK ||
|
||||
surface2 == SURFACE_DIRTTRACK || surface1 == SURFACE_SAND || surface2 == SURFACE_SAND) {
|
||||
} else if(surface1 == SURFACE_GRAVEL || surface2 == SURFACE_GRAVEL || surface1 == SURFACE_MUD_DRY ||
|
||||
surface2 == SURFACE_MUD_DRY || surface1 == SURFACE_SAND || surface2 == SURFACE_SAND) {
|
||||
ratio = GetCollisionRatio(audioCollision.m_fIntensity2, 0.0001f, 0.09f, 0.0899f);
|
||||
m_sQueueSample.m_nSampleIndex = SFX_GRAVEL_SKID;
|
||||
m_sQueueSample.m_nFrequency = 6000.f * ratio + 10000;
|
||||
vol = 50.f * ratio;
|
||||
} else if(surface1 == SURFACE_FLESH || surface2 == SURFACE_FLESH) {
|
||||
} else if(surface1 == SURFACE_PED || surface2 == SURFACE_PED) {
|
||||
return 0;
|
||||
} else {
|
||||
ratio = GetCollisionRatio(audioCollision.m_fIntensity2, 0.0001f, 0.09f, 0.0899f);
|
||||
|
@ -240,9 +240,9 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
|||
s2 = col.m_bSurface2;
|
||||
}
|
||||
ratio = GetCollisionOneShotRatio(s1, col.m_fIntensity1);
|
||||
if(s1 == SURFACE_METAL6 && s2 == SURFACE_FLESH) ratio /= 4.0f;
|
||||
if(s1 == SURFACE_METAL6 && ratio < 0.6f) {
|
||||
s1 = SURFACE_BILLBOARD;
|
||||
if(s1 == SURFACE_CAR && s2 == SURFACE_PED) ratio /= 4.0f;
|
||||
if(s1 == SURFACE_CAR && ratio < 0.6f) {
|
||||
s1 = SURFACE_CAR_PANEL;
|
||||
ratio = Min(1.f, 2.f * ratio);
|
||||
}
|
||||
emittingVol = 40.f * ratio;
|
||||
|
@ -290,13 +290,13 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col)
|
|||
}
|
||||
switch(s1) {
|
||||
case SURFACE_GLASS: m_sQueueSample.m_nFrequency = 13500; break;
|
||||
case SURFACE_METAL15: m_sQueueSample.m_nFrequency = 8819; break;
|
||||
case SURFACE_PUDDLE:
|
||||
case SURFACE_GIRDER: m_sQueueSample.m_nFrequency = 8819; break;
|
||||
case SURFACE_WATER:
|
||||
m_sQueueSample.m_nFrequency =
|
||||
2 * SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex);
|
||||
break;
|
||||
case SURFACE_TIRE: m_sQueueSample.m_nFrequency = 6000; break;
|
||||
case SURFACE_HARD24: m_sQueueSample.m_nFrequency = 8000; break;
|
||||
case SURFACE_RUBBER: m_sQueueSample.m_nFrequency = 6000; break;
|
||||
case SURFACE_PLASTIC: m_sQueueSample.m_nFrequency = 8000; break;
|
||||
default:
|
||||
m_sQueueSample.m_nFrequency =
|
||||
SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex);
|
||||
|
|
|
@ -848,7 +848,7 @@ cAudioManager::ProcessVehicleRoadNoise(cVehicleParams *params)
|
|||
m_sQueueSample.m_nBankIndex = SAMPLEBANK_MAIN;
|
||||
m_sQueueSample.m_bIs2D = false;
|
||||
m_sQueueSample.m_nReleasingVolumeModificator = 3;
|
||||
if (params->m_pVehicle->m_nSurfaceTouched == SURFACE_PUDDLE) {
|
||||
if (params->m_pVehicle->m_nSurfaceTouched == SURFACE_WATER) {
|
||||
m_sQueueSample.m_nSampleIndex = SFX_BOAT_WATER_LOOP;
|
||||
freq = 6050 * emittingVol / 30 + 16000;
|
||||
} else {
|
||||
|
@ -1517,10 +1517,10 @@ cAudioManager::ProcessVehicleSkidding(cVehicleParams *params)
|
|||
m_sQueueSample.m_nFrequency = 13000.f * skidVal + 35000.f;
|
||||
m_sQueueSample.m_nVolume /= 4;
|
||||
break;
|
||||
case SURFACE_DIRT:
|
||||
case SURFACE_DIRTTRACK:
|
||||
case SURFACE_GRAVEL:
|
||||
case SURFACE_MUD_DRY:
|
||||
case SURFACE_SAND:
|
||||
case SURFACE_PUDDLE:
|
||||
case SURFACE_WATER:
|
||||
m_sQueueSample.m_nSampleIndex = SFX_GRAVEL_SKID;
|
||||
m_sQueueSample.m_nFrequency = 6000.f * skidVal + 10000.f;
|
||||
break;
|
||||
|
@ -3053,32 +3053,32 @@ cAudioManager::ProcessPedOneShots(cPedParams *params)
|
|||
case SURFACE_GRASS:
|
||||
sampleIndex = m_anRandomTable[1] % 5 + SFX_FOOTSTEP_GRASS_1;
|
||||
break;
|
||||
case SURFACE_DIRT:
|
||||
case SURFACE_DIRTTRACK:
|
||||
case SURFACE_GRAVEL:
|
||||
case SURFACE_MUD_DRY:
|
||||
sampleIndex = m_anRandomTable[4] % 5 + SFX_FOOTSTEP_GRAVEL_1;
|
||||
break;
|
||||
case SURFACE_METAL6:
|
||||
case SURFACE_METAL_DOOR:
|
||||
case SURFACE_BILLBOARD:
|
||||
case SURFACE_STEEL:
|
||||
case SURFACE_METAL_POLE:
|
||||
case SURFACE_STREET_LIGHT:
|
||||
case SURFACE_METAL14:
|
||||
case SURFACE_METAL15:
|
||||
case SURFACE_METAL_FENCE:
|
||||
case SURFACE_METAL27:
|
||||
case SURFACE_METAL28:
|
||||
case SURFACE_CAR:
|
||||
case SURFACE_GARAGE_DOOR:
|
||||
case SURFACE_CAR_PANEL:
|
||||
case SURFACE_THICK_METAL_PLATE:
|
||||
case SURFACE_SCAFFOLD_POLE:
|
||||
case SURFACE_LAMP_POST:
|
||||
case SURFACE_FIRE_HYDRANT:
|
||||
case SURFACE_GIRDER:
|
||||
case SURFACE_METAL_CHAIN_FENCE:
|
||||
case SURFACE_CONTAINER:
|
||||
case SURFACE_NEWS_VENDOR:
|
||||
sampleIndex = m_anRandomTable[0] % 5 + SFX_FOOTSTEP_METAL_1;
|
||||
break;
|
||||
case SURFACE_SAND:
|
||||
sampleIndex = (m_anRandomTable[4] & 3) + SFX_FOOTSTEP_SAND_1;
|
||||
break;
|
||||
case SURFACE_PUDDLE:
|
||||
case SURFACE_WATER:
|
||||
sampleIndex = (m_anRandomTable[3] & 3) + SFX_FOOTSTEP_WATER_1;
|
||||
break;
|
||||
case SURFACE_WOOD:
|
||||
case SURFACE_WOOD_BOX:
|
||||
case SURFACE_WOOD_PLANK:
|
||||
case SURFACE_WOOD_CRATES:
|
||||
case SURFACE_WOOD_BENCH:
|
||||
case SURFACE_WOOD_SOLID:
|
||||
sampleIndex = m_anRandomTable[2] % 5 + SFX_FOOTSTEP_WOOD_1;
|
||||
break;
|
||||
case SURFACE_HEDGE:
|
||||
|
@ -3125,7 +3125,7 @@ cAudioManager::ProcessPedOneShots(cPedParams *params)
|
|||
if (!ped->bIsLooking) {
|
||||
maxDist = SQR(30);
|
||||
emittingVol = m_anRandomTable[3] % 20 + 80;
|
||||
if (ped->m_nSurfaceTouched == SURFACE_PUDDLE) {
|
||||
if (ped->m_nSurfaceTouched == SURFACE_WATER) {
|
||||
m_sQueueSample.m_nSampleIndex = (m_anRandomTable[3] & 3) + SFX_FOOTSTEP_WATER_1;
|
||||
} else if (sound == SOUND_FALL_LAND) {
|
||||
m_sQueueSample.m_nSampleIndex = SFX_BODY_LAND;
|
||||
|
@ -4353,12 +4353,12 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound)
|
|||
if (playerPed) {
|
||||
switch (playerPed->m_nSurfaceTouched) {
|
||||
case SURFACE_GRASS:
|
||||
case SURFACE_DIRT:
|
||||
case SURFACE_DIRTTRACK:
|
||||
case SURFACE_SCAFFOLD:
|
||||
case SURFACE_FLESH:
|
||||
case SURFACE_GRAVEL:
|
||||
case SURFACE_MUD_DRY:
|
||||
case SURFACE_TRANSPARENT_CLOTH:
|
||||
case SURFACE_PED:
|
||||
case SURFACE_SAND:
|
||||
case SURFACE_TIRE:
|
||||
case SURFACE_RUBBER:
|
||||
case SURFACE_HEDGE:
|
||||
m_sQueueSample.m_nSampleIndex = SFX_BULLET_SHELL_HIT_GROUND_2;
|
||||
m_sQueueSample.m_nFrequency = RandomDisplacement(500) + 11000;
|
||||
|
@ -4384,7 +4384,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound)
|
|||
}
|
||||
}
|
||||
return;
|
||||
case SURFACE_PUDDLE:
|
||||
case SURFACE_WATER:
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -504,11 +504,11 @@ CCam::ProcessSpecialHeightRoutines(void)
|
|||
|
||||
switch(((CPhysical*)CamTargetEntity)->m_nSurfaceTouched)
|
||||
case SURFACE_GRASS:
|
||||
case SURFACE_DIRT:
|
||||
case SURFACE_DIRTTRACK:
|
||||
case SURFACE_STEEL:
|
||||
case SURFACE_TIRE:
|
||||
case SURFACE_STONE:
|
||||
case SURFACE_GRAVEL:
|
||||
case SURFACE_MUD_DRY:
|
||||
case SURFACE_THICK_METAL_PLATE:
|
||||
case SURFACE_RUBBER:
|
||||
case SURFACE_STEEP_CLIFF:
|
||||
OnRoad = true;
|
||||
|
||||
if(CCullZones::PlayerNoRain())
|
||||
|
@ -565,9 +565,9 @@ CCam::ProcessSpecialHeightRoutines(void)
|
|||
if(PreviouslyFailedRoadHeightCheck && m_fCloseInPedHeightOffset < 0.0001f){
|
||||
if(colPoint.surfaceB != SURFACE_TARMAC &&
|
||||
colPoint.surfaceB != SURFACE_GRASS &&
|
||||
colPoint.surfaceB != SURFACE_DIRT &&
|
||||
colPoint.surfaceB != SURFACE_DIRTTRACK &&
|
||||
colPoint.surfaceB != SURFACE_STONE){
|
||||
colPoint.surfaceB != SURFACE_GRAVEL &&
|
||||
colPoint.surfaceB != SURFACE_MUD_DRY &&
|
||||
colPoint.surfaceB != SURFACE_STEEP_CLIFF){
|
||||
if(m_fRoadOffSet > 1.4f)
|
||||
m_fRoadOffSet = 1.4f;
|
||||
}else{
|
||||
|
@ -1408,11 +1408,11 @@ CCam::Process_FollowPed(const CVector &CameraTarget, float TargetOrientation, fl
|
|||
bool foo = false;
|
||||
switch(((CPhysical*)CamTargetEntity)->m_nSurfaceTouched)
|
||||
case SURFACE_GRASS:
|
||||
case SURFACE_DIRT:
|
||||
case SURFACE_GRAVEL:
|
||||
case SURFACE_PAVEMENT:
|
||||
case SURFACE_STEEL:
|
||||
case SURFACE_TIRE:
|
||||
case SURFACE_STONE:
|
||||
case SURFACE_THICK_METAL_PLATE:
|
||||
case SURFACE_RUBBER:
|
||||
case SURFACE_STEEP_CLIFF:
|
||||
foo = true;
|
||||
if(foo)
|
||||
WellBufferMe(TargetHeight, &m_fCamBufferedHeight, &m_fCamBufferedHeightSpeed, 0.4f, 0.05f, false);
|
||||
|
@ -1750,8 +1750,8 @@ CCam::WorkOutCamHeightWeeCar(CVector &TargetCoors, float TargetOrientation)
|
|||
else
|
||||
WellBufferMe(TargetZOffSet, &RoadHeightFix, &RoadHeightFixSpeed, 0.27f, 0.1f, false);
|
||||
|
||||
if((colpoint.surfaceB == SURFACE_DEFAULT || colpoint.surfaceB >= SURFACE_METAL6) &&
|
||||
colpoint.surfaceB != SURFACE_STEEL && colpoint.surfaceB != SURFACE_STONE &&
|
||||
if((colpoint.surfaceB == SURFACE_DEFAULT || colpoint.surfaceB >= SURFACE_CAR) &&
|
||||
colpoint.surfaceB != SURFACE_THICK_METAL_PLATE && colpoint.surfaceB != SURFACE_STEEP_CLIFF &&
|
||||
RoadHeightFix > 1.4f)
|
||||
RoadHeightFix = 1.4f;
|
||||
|
||||
|
|
|
@ -430,18 +430,18 @@ CCollision::TestLineOfSight(const CColLine &line, const CMatrix &matrix, CColMod
|
|||
return false;
|
||||
|
||||
for(i = 0; i < model.numSpheres; i++)
|
||||
if(!ignoreSeeThrough || model.spheres[i].surface != SURFACE_GLASS && model.spheres[i].surface != SURFACE_SCAFFOLD)
|
||||
if(!ignoreSeeThrough || model.spheres[i].surface != SURFACE_GLASS && model.spheres[i].surface != SURFACE_TRANSPARENT_CLOTH)
|
||||
if(TestLineSphere(newline, model.spheres[i]))
|
||||
return true;
|
||||
|
||||
for(i = 0; i < model.numBoxes; i++)
|
||||
if(!ignoreSeeThrough || model.boxes[i].surface != SURFACE_GLASS && model.boxes[i].surface != SURFACE_SCAFFOLD)
|
||||
if(!ignoreSeeThrough || model.boxes[i].surface != SURFACE_GLASS && model.boxes[i].surface != SURFACE_TRANSPARENT_CLOTH)
|
||||
if(TestLineBox(newline, model.boxes[i]))
|
||||
return true;
|
||||
|
||||
CalculateTrianglePlanes(&model);
|
||||
for(i = 0; i < model.numTriangles; i++)
|
||||
if(!ignoreSeeThrough || model.triangles[i].surface != SURFACE_GLASS && model.triangles[i].surface != SURFACE_SCAFFOLD)
|
||||
if(!ignoreSeeThrough || model.triangles[i].surface != SURFACE_GLASS && model.triangles[i].surface != SURFACE_TRANSPARENT_CLOTH)
|
||||
if(TestLineTriangle(newline, model.vertices, model.triangles[i], model.trianglePlanes[i]))
|
||||
return true;
|
||||
|
||||
|
@ -1062,16 +1062,16 @@ CCollision::ProcessLineOfSight(const CColLine &line,
|
|||
|
||||
float coldist = mindist;
|
||||
for(i = 0; i < model.numSpheres; i++)
|
||||
if(!ignoreSeeThrough || model.spheres[i].surface != SURFACE_GLASS && model.spheres[i].surface != SURFACE_SCAFFOLD)
|
||||
if(!ignoreSeeThrough || model.spheres[i].surface != SURFACE_GLASS && model.spheres[i].surface != SURFACE_TRANSPARENT_CLOTH)
|
||||
ProcessLineSphere(newline, model.spheres[i], point, coldist);
|
||||
|
||||
for(i = 0; i < model.numBoxes; i++)
|
||||
if(!ignoreSeeThrough || model.boxes[i].surface != SURFACE_GLASS && model.boxes[i].surface != SURFACE_SCAFFOLD)
|
||||
if(!ignoreSeeThrough || model.boxes[i].surface != SURFACE_GLASS && model.boxes[i].surface != SURFACE_TRANSPARENT_CLOTH)
|
||||
ProcessLineBox(newline, model.boxes[i], point, coldist);
|
||||
|
||||
CalculateTrianglePlanes(&model);
|
||||
for(i = 0; i < model.numTriangles; i++)
|
||||
if(!ignoreSeeThrough || model.triangles[i].surface != SURFACE_GLASS && model.triangles[i].surface != SURFACE_SCAFFOLD)
|
||||
if(!ignoreSeeThrough || model.triangles[i].surface != SURFACE_GLASS && model.triangles[i].surface != SURFACE_TRANSPARENT_CLOTH)
|
||||
ProcessLineTriangle(newline, model.vertices, model.triangles[i], model.trianglePlanes[i], point, coldist);
|
||||
|
||||
if(coldist < mindist){
|
||||
|
@ -1103,17 +1103,17 @@ CCollision::ProcessVerticalLine(const CColLine &line,
|
|||
|
||||
float coldist = mindist;
|
||||
for(i = 0; i < model.numSpheres; i++)
|
||||
if(!ignoreSeeThrough || model.spheres[i].surface != SURFACE_GLASS && model.spheres[i].surface != SURFACE_SCAFFOLD)
|
||||
if(!ignoreSeeThrough || model.spheres[i].surface != SURFACE_GLASS && model.spheres[i].surface != SURFACE_TRANSPARENT_CLOTH)
|
||||
ProcessLineSphere(newline, model.spheres[i], point, coldist);
|
||||
|
||||
for(i = 0; i < model.numBoxes; i++)
|
||||
if(!ignoreSeeThrough || model.boxes[i].surface != SURFACE_GLASS && model.boxes[i].surface != SURFACE_SCAFFOLD)
|
||||
if(!ignoreSeeThrough || model.boxes[i].surface != SURFACE_GLASS && model.boxes[i].surface != SURFACE_TRANSPARENT_CLOTH)
|
||||
ProcessLineBox(newline, model.boxes[i], point, coldist);
|
||||
|
||||
CalculateTrianglePlanes(&model);
|
||||
TempStoredPoly.valid = false;
|
||||
for(i = 0; i < model.numTriangles; i++)
|
||||
if(!ignoreSeeThrough || model.triangles[i].surface != SURFACE_GLASS && model.triangles[i].surface != SURFACE_SCAFFOLD)
|
||||
if(!ignoreSeeThrough || model.triangles[i].surface != SURFACE_GLASS && model.triangles[i].surface != SURFACE_TRANSPARENT_CLOTH)
|
||||
ProcessVerticalLineTriangle(newline, model.vertices, model.triangles[i], model.trianglePlanes[i], point, coldist, &TempStoredPoly);
|
||||
|
||||
if(coldist < mindist){
|
||||
|
@ -1642,15 +1642,15 @@ CCollision::DrawColModel_Coloured(const CMatrix &mat, const CColModel &colModel,
|
|||
b *= f;
|
||||
}
|
||||
|
||||
if(s == SURFACE_SCAFFOLD || s == SURFACE_METAL_FENCE ||
|
||||
s == SURFACE_BOLLARD || s == SURFACE_METAL_POLE)
|
||||
if(s == SURFACE_TRANSPARENT_CLOTH || s == SURFACE_METAL_CHAIN_FENCE ||
|
||||
s == SURFACE_TRANSPARENT_STONE || s == SURFACE_SCAFFOLD_POLE)
|
||||
if(CTimer::GetFrameCounter() & 1){
|
||||
r = 0;
|
||||
g = 0;
|
||||
b = 0;
|
||||
}
|
||||
|
||||
if(s > SURFACE_GATE){
|
||||
if(s > SURFACE_METAL_GATE){
|
||||
r = CGeneral::GetRandomNumber();
|
||||
g = CGeneral::GetRandomNumber();
|
||||
b = CGeneral::GetRandomNumber();
|
||||
|
@ -1723,8 +1723,8 @@ CCollision::DrawColModel_Coloured(const CMatrix &mat, const CColModel &colModel,
|
|||
b *= f;
|
||||
}
|
||||
|
||||
if(s == SURFACE_SCAFFOLD || s == SURFACE_METAL_FENCE ||
|
||||
s == SURFACE_BOLLARD || s == SURFACE_METAL_POLE)
|
||||
if(s == SURFACE_TRANSPARENT_CLOTH || s == SURFACE_METAL_CHAIN_FENCE ||
|
||||
s == SURFACE_TRANSPARENT_STONE || s == SURFACE_SCAFFOLD_POLE)
|
||||
if(CTimer::GetFrameCounter() & 1){
|
||||
r = 0;
|
||||
g = 0;
|
||||
|
|
|
@ -59,38 +59,38 @@ CSurfaceTable::GetAdhesionGroup(uint8 surfaceType)
|
|||
case SURFACE_DEFAULT: return ADHESIVE_ROAD;
|
||||
case SURFACE_TARMAC: return ADHESIVE_ROAD;
|
||||
case SURFACE_GRASS: return ADHESIVE_LOOSE;
|
||||
case SURFACE_DIRT: return ADHESIVE_LOOSE;
|
||||
case SURFACE_DIRTTRACK: return ADHESIVE_HARD;
|
||||
case SURFACE_GRAVEL: return ADHESIVE_LOOSE;
|
||||
case SURFACE_MUD_DRY: return ADHESIVE_HARD;
|
||||
case SURFACE_PAVEMENT: return ADHESIVE_ROAD;
|
||||
case SURFACE_METAL6: return ADHESIVE_HARD;
|
||||
case SURFACE_CAR: return ADHESIVE_HARD;
|
||||
case SURFACE_GLASS: return ADHESIVE_HARD;
|
||||
case SURFACE_SCAFFOLD: return ADHESIVE_HARD;
|
||||
case SURFACE_METAL_DOOR: return ADHESIVE_HARD;
|
||||
case SURFACE_BILLBOARD: return ADHESIVE_HARD;
|
||||
case SURFACE_STEEL: return ADHESIVE_HARD;
|
||||
case SURFACE_METAL_POLE: return ADHESIVE_HARD;
|
||||
case SURFACE_STREET_LIGHT: return ADHESIVE_HARD;
|
||||
case SURFACE_METAL14: return ADHESIVE_HARD;
|
||||
case SURFACE_METAL15: return ADHESIVE_HARD;
|
||||
case SURFACE_METAL_FENCE: return ADHESIVE_HARD;
|
||||
case SURFACE_FLESH: return ADHESIVE_RUBBER;
|
||||
case SURFACE_TRANSPARENT_CLOTH: return ADHESIVE_HARD;
|
||||
case SURFACE_GARAGE_DOOR: return ADHESIVE_HARD;
|
||||
case SURFACE_CAR_PANEL: return ADHESIVE_HARD;
|
||||
case SURFACE_THICK_METAL_PLATE: return ADHESIVE_HARD;
|
||||
case SURFACE_SCAFFOLD_POLE: return ADHESIVE_HARD;
|
||||
case SURFACE_LAMP_POST: return ADHESIVE_HARD;
|
||||
case SURFACE_FIRE_HYDRANT: return ADHESIVE_HARD;
|
||||
case SURFACE_GIRDER: return ADHESIVE_HARD;
|
||||
case SURFACE_METAL_CHAIN_FENCE: return ADHESIVE_HARD;
|
||||
case SURFACE_PED: return ADHESIVE_RUBBER;
|
||||
case SURFACE_SAND: return ADHESIVE_SAND;
|
||||
case SURFACE_PUDDLE: return ADHESIVE_WET;
|
||||
case SURFACE_WOOD: return ADHESIVE_ROAD;
|
||||
case SURFACE_WOOD_BOX: return ADHESIVE_ROAD;
|
||||
case SURFACE_WOOD_PLANK: return ADHESIVE_ROAD;
|
||||
case SURFACE_TIRE: return ADHESIVE_RUBBER;
|
||||
case SURFACE_HARD24: return ADHESIVE_HARD;
|
||||
case SURFACE_WATER: return ADHESIVE_WET;
|
||||
case SURFACE_WOOD_CRATES: return ADHESIVE_ROAD;
|
||||
case SURFACE_WOOD_BENCH: return ADHESIVE_ROAD;
|
||||
case SURFACE_WOOD_SOLID: return ADHESIVE_ROAD;
|
||||
case SURFACE_RUBBER: return ADHESIVE_RUBBER;
|
||||
case SURFACE_PLASTIC: return ADHESIVE_HARD;
|
||||
case SURFACE_HEDGE: return ADHESIVE_LOOSE;
|
||||
case SURFACE_STONE: return ADHESIVE_LOOSE;
|
||||
case SURFACE_METAL27: return ADHESIVE_HARD;
|
||||
case SURFACE_METAL28: return ADHESIVE_HARD;
|
||||
case SURFACE_RUBBER29: return ADHESIVE_RUBBER;
|
||||
case SURFACE_LOOSE30: return ADHESIVE_LOOSE;
|
||||
case SURFACE_BOLLARD: return ADHESIVE_HARD;
|
||||
case SURFACE_GATE: return ADHESIVE_HARD;
|
||||
case SURFACE_SAND33: return ADHESIVE_SAND;
|
||||
case SURFACE_ROAD34: return ADHESIVE_ROAD;
|
||||
case SURFACE_STEEP_CLIFF: return ADHESIVE_LOOSE;
|
||||
case SURFACE_CONTAINER: return ADHESIVE_HARD;
|
||||
case SURFACE_NEWS_VENDOR: return ADHESIVE_HARD;
|
||||
case SURFACE_WHEELBASE: return ADHESIVE_RUBBER;
|
||||
case SURFACE_CARDBOARDBOX: return ADHESIVE_LOOSE;
|
||||
case SURFACE_TRANSPARENT_STONE: return ADHESIVE_HARD;
|
||||
case SURFACE_METAL_GATE: return ADHESIVE_HARD;
|
||||
case SURFACE_SAND_BEACH: return ADHESIVE_SAND;
|
||||
case SURFACE_CONCRETE_BEACH: return ADHESIVE_ROAD;
|
||||
default: return ADHESIVE_ROAD;
|
||||
}
|
||||
}
|
||||
|
@ -101,41 +101,41 @@ CSurfaceTable::GetWetMultiplier(uint8 surfaceType)
|
|||
switch(surfaceType){
|
||||
case SURFACE_DEFAULT:
|
||||
case SURFACE_TARMAC:
|
||||
case SURFACE_DIRTTRACK:
|
||||
case SURFACE_MUD_DRY:
|
||||
case SURFACE_PAVEMENT:
|
||||
case SURFACE_SCAFFOLD:
|
||||
case SURFACE_WOOD:
|
||||
case SURFACE_WOOD_BOX:
|
||||
case SURFACE_WOOD_PLANK:
|
||||
case SURFACE_TRANSPARENT_CLOTH:
|
||||
case SURFACE_WOOD_CRATES:
|
||||
case SURFACE_WOOD_BENCH:
|
||||
case SURFACE_WOOD_SOLID:
|
||||
case SURFACE_HEDGE:
|
||||
case SURFACE_LOOSE30:
|
||||
case SURFACE_BOLLARD:
|
||||
case SURFACE_ROAD34:
|
||||
case SURFACE_CARDBOARDBOX:
|
||||
case SURFACE_TRANSPARENT_STONE:
|
||||
case SURFACE_CONCRETE_BEACH:
|
||||
return 1.0f - CWeather::WetRoads*0.25f;
|
||||
|
||||
case SURFACE_GRASS:
|
||||
case SURFACE_METAL6:
|
||||
case SURFACE_CAR:
|
||||
case SURFACE_GLASS:
|
||||
case SURFACE_METAL_DOOR:
|
||||
case SURFACE_BILLBOARD:
|
||||
case SURFACE_STEEL:
|
||||
case SURFACE_METAL_POLE:
|
||||
case SURFACE_STREET_LIGHT:
|
||||
case SURFACE_METAL14:
|
||||
case SURFACE_METAL15:
|
||||
case SURFACE_METAL_FENCE:
|
||||
case SURFACE_FLESH:
|
||||
case SURFACE_TIRE:
|
||||
case SURFACE_HARD24:
|
||||
case SURFACE_STONE:
|
||||
case SURFACE_METAL27:
|
||||
case SURFACE_METAL28:
|
||||
case SURFACE_RUBBER29:
|
||||
case SURFACE_GATE:
|
||||
case SURFACE_GARAGE_DOOR:
|
||||
case SURFACE_CAR_PANEL:
|
||||
case SURFACE_THICK_METAL_PLATE:
|
||||
case SURFACE_SCAFFOLD_POLE:
|
||||
case SURFACE_LAMP_POST:
|
||||
case SURFACE_FIRE_HYDRANT:
|
||||
case SURFACE_GIRDER:
|
||||
case SURFACE_METAL_CHAIN_FENCE:
|
||||
case SURFACE_PED:
|
||||
case SURFACE_RUBBER:
|
||||
case SURFACE_PLASTIC:
|
||||
case SURFACE_STEEP_CLIFF:
|
||||
case SURFACE_CONTAINER:
|
||||
case SURFACE_NEWS_VENDOR:
|
||||
case SURFACE_WHEELBASE:
|
||||
case SURFACE_METAL_GATE:
|
||||
return 1.0f - CWeather::WetRoads*0.4f;
|
||||
|
||||
case SURFACE_SAND:
|
||||
case SURFACE_SAND33:
|
||||
case SURFACE_SAND_BEACH:
|
||||
return 1.0f - CWeather::WetRoads*0.5f;
|
||||
|
||||
default:
|
||||
|
|
|
@ -1,43 +1,42 @@
|
|||
#pragma once
|
||||
|
||||
// TODO: check this
|
||||
enum eSurfaceType
|
||||
{
|
||||
SURFACE_DEFAULT,
|
||||
SURFACE_TARMAC,
|
||||
SURFACE_GRASS,
|
||||
SURFACE_DIRT,
|
||||
SURFACE_DIRTTRACK,
|
||||
SURFACE_GRAVEL,
|
||||
SURFACE_MUD_DRY,
|
||||
SURFACE_PAVEMENT,
|
||||
SURFACE_METAL6,
|
||||
SURFACE_CAR,
|
||||
SURFACE_GLASS,
|
||||
SURFACE_SCAFFOLD,
|
||||
SURFACE_METAL_DOOR, // garage door
|
||||
SURFACE_BILLBOARD,
|
||||
SURFACE_STEEL, //?
|
||||
SURFACE_METAL_POLE, // ?
|
||||
SURFACE_STREET_LIGHT,
|
||||
SURFACE_METAL14,
|
||||
SURFACE_METAL15,
|
||||
SURFACE_METAL_FENCE,
|
||||
SURFACE_FLESH,
|
||||
SURFACE_TRANSPARENT_CLOTH,
|
||||
SURFACE_GARAGE_DOOR,
|
||||
SURFACE_CAR_PANEL,
|
||||
SURFACE_THICK_METAL_PLATE,
|
||||
SURFACE_SCAFFOLD_POLE,
|
||||
SURFACE_LAMP_POST,
|
||||
SURFACE_FIRE_HYDRANT,
|
||||
SURFACE_GIRDER,
|
||||
SURFACE_METAL_CHAIN_FENCE,
|
||||
SURFACE_PED,
|
||||
SURFACE_SAND,
|
||||
SURFACE_PUDDLE,
|
||||
SURFACE_WOOD,
|
||||
SURFACE_WOOD_BOX,
|
||||
SURFACE_WOOD_PLANK,
|
||||
SURFACE_TIRE,
|
||||
SURFACE_HARD24,
|
||||
SURFACE_WATER,
|
||||
SURFACE_WOOD_CRATES,
|
||||
SURFACE_WOOD_BENCH,
|
||||
SURFACE_WOOD_SOLID,
|
||||
SURFACE_RUBBER,
|
||||
SURFACE_PLASTIC,
|
||||
SURFACE_HEDGE,
|
||||
SURFACE_STONE,
|
||||
SURFACE_METAL27,
|
||||
SURFACE_METAL28,
|
||||
SURFACE_RUBBER29,
|
||||
SURFACE_LOOSE30,
|
||||
SURFACE_BOLLARD,
|
||||
SURFACE_GATE,
|
||||
SURFACE_SAND33,
|
||||
SURFACE_ROAD34,
|
||||
SURFACE_STEEP_CLIFF,
|
||||
SURFACE_CONTAINER,
|
||||
SURFACE_NEWS_VENDOR,
|
||||
SURFACE_WHEELBASE,
|
||||
SURFACE_CARDBOARDBOX,
|
||||
SURFACE_TRANSPARENT_STONE,
|
||||
SURFACE_METAL_GATE,
|
||||
SURFACE_SAND_BEACH,
|
||||
SURFACE_CONCRETE_BEACH,
|
||||
};
|
||||
|
||||
enum
|
||||
|
|
|
@ -66,7 +66,7 @@ CTempColModels::Initialise(void)
|
|||
#else
|
||||
for (i = 0; i < ARRAY_SIZE(s_aPedGSpheres); i++) {
|
||||
#endif
|
||||
s_aPedSpheres[i].surface = SURFACE_FLESH;
|
||||
s_aPedSpheres[i].surface = SURFACE_PED;
|
||||
s_aPedSpheres[i].piece = 0;
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,7 @@ CTempColModels::Initialise(void)
|
|||
s_aPed2Spheres[2].center = CVector(0.0f, -0.35f, -0.9f);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(s_aPed2Spheres); i++) {
|
||||
s_aPed2Spheres[i].surface = SURFACE_FLESH;
|
||||
s_aPed2Spheres[i].surface = SURFACE_PED;
|
||||
s_aPed2Spheres[i].piece = 0;
|
||||
}
|
||||
|
||||
|
@ -106,10 +106,10 @@ CTempColModels::Initialise(void)
|
|||
s_aPedGSpheres[2].center = CVector(0.0f, 0.25f, -0.9f);
|
||||
s_aPedGSpheres[3].center = CVector(0.0f, 0.65f, -0.9f);
|
||||
|
||||
s_aPedGSpheres[0].surface = SURFACE_FLESH;
|
||||
s_aPedGSpheres[1].surface = SURFACE_FLESH;
|
||||
s_aPedGSpheres[2].surface = SURFACE_FLESH;
|
||||
s_aPedGSpheres[3].surface = SURFACE_FLESH;
|
||||
s_aPedGSpheres[0].surface = SURFACE_PED;
|
||||
s_aPedGSpheres[1].surface = SURFACE_PED;
|
||||
s_aPedGSpheres[2].surface = SURFACE_PED;
|
||||
s_aPedGSpheres[3].surface = SURFACE_PED;
|
||||
s_aPedGSpheres[0].piece = 4;
|
||||
s_aPedGSpheres[1].piece = 1;
|
||||
s_aPedGSpheres[2].piece = 0;
|
||||
|
@ -131,7 +131,7 @@ CTempColModels::Initialise(void)
|
|||
s_aDoorSpheres[2].center = CVector(0.0f, -0.6f, 0.25f);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(s_aDoorSpheres); i++) {
|
||||
s_aDoorSpheres[i].surface = SURFACE_BILLBOARD;
|
||||
s_aDoorSpheres[i].surface = SURFACE_CAR_PANEL;
|
||||
s_aDoorSpheres[i].piece = 0;
|
||||
}
|
||||
|
||||
|
@ -151,7 +151,7 @@ CTempColModels::Initialise(void)
|
|||
s_aBumperSpheres[3].center = CVector(-0.85f, -0.05f, 0.0f);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(s_aBumperSpheres); i++) {
|
||||
s_aBumperSpheres[i].surface = SURFACE_BILLBOARD;
|
||||
s_aBumperSpheres[i].surface = SURFACE_CAR_PANEL;
|
||||
s_aBumperSpheres[i].piece = 0;
|
||||
}
|
||||
|
||||
|
@ -171,7 +171,7 @@ CTempColModels::Initialise(void)
|
|||
s_aPanelSpheres[3].center = CVector(-0.15f, 0.45f, 0.0f);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(s_aPanelSpheres); i++) {
|
||||
s_aPanelSpheres[i].surface = SURFACE_BILLBOARD;
|
||||
s_aPanelSpheres[i].surface = SURFACE_CAR_PANEL;
|
||||
s_aPanelSpheres[i].piece = 0;
|
||||
}
|
||||
|
||||
|
@ -191,7 +191,7 @@ CTempColModels::Initialise(void)
|
|||
s_aBonnetSpheres[3].center = CVector(0.4f, 0.9f, 0.0f);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(s_aBonnetSpheres); i++) {
|
||||
s_aBonnetSpheres[i].surface = SURFACE_BILLBOARD;
|
||||
s_aBonnetSpheres[i].surface = SURFACE_CAR_PANEL;
|
||||
s_aBonnetSpheres[i].piece = 0;
|
||||
}
|
||||
|
||||
|
@ -211,7 +211,7 @@ CTempColModels::Initialise(void)
|
|||
s_aBootSpheres[3].center = CVector(0.4f, -0.6f, 0.0f);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(s_aBootSpheres); i++) {
|
||||
s_aBootSpheres[i].surface = SURFACE_BILLBOARD;
|
||||
s_aBootSpheres[i].surface = SURFACE_CAR_PANEL;
|
||||
s_aBootSpheres[i].piece = 0;
|
||||
}
|
||||
|
||||
|
@ -233,7 +233,7 @@ CTempColModels::Initialise(void)
|
|||
#else
|
||||
for (i = 0; i < ARRAY_SIZE(s_aBootSpheres); i++) {
|
||||
#endif
|
||||
s_aWheelSpheres[i].surface = SURFACE_RUBBER29;
|
||||
s_aWheelSpheres[i].surface = SURFACE_WHEELBASE;
|
||||
s_aWheelSpheres[i].piece = 0;
|
||||
}
|
||||
|
||||
|
@ -255,7 +255,7 @@ CTempColModels::Initialise(void)
|
|||
#else
|
||||
for (i = 0; i < ARRAY_SIZE(s_aBootSpheres); i++) {
|
||||
#endif
|
||||
s_aBodyPartSpheres1[i].surface = SURFACE_FLESH;
|
||||
s_aBodyPartSpheres1[i].surface = SURFACE_PED;
|
||||
s_aBodyPartSpheres1[i].piece = 0;
|
||||
}
|
||||
|
||||
|
@ -277,7 +277,7 @@ CTempColModels::Initialise(void)
|
|||
#else
|
||||
for (i = 0; i < ARRAY_SIZE(s_aBootSpheres); i++) {
|
||||
#endif
|
||||
s_aBodyPartSpheres2[i].surface = SURFACE_FLESH;
|
||||
s_aBodyPartSpheres2[i].surface = SURFACE_PED;
|
||||
s_aBodyPartSpheres2[i].piece = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -951,7 +951,7 @@ CPhysical::ApplyCollisionAlt(CEntity *B, CColPoint &colpoint, float &impulse, CV
|
|||
Abs(m_vecMoveSpeed.z) < minspeed*2.0f)
|
||||
impulse = -0.8f * normalSpeed * mass;
|
||||
else if(IsVehicle() && ((CVehicle*)this)->IsBoat() &&
|
||||
colpoint.surfaceB == SURFACE_WOOD_PLANK && colpoint.normal.z < 0.5f)
|
||||
colpoint.surfaceB == SURFACE_WOOD_SOLID && colpoint.normal.z < 0.5f)
|
||||
impulse = -(2.0f * m_fElasticity + 1.0f) * normalSpeed * mass;
|
||||
else
|
||||
impulse = -(m_fElasticity + 1.0f) * normalSpeed * mass;
|
||||
|
@ -1146,7 +1146,7 @@ CPhysical::ApplyFriction(float adhesiveLimit, CColPoint &colpoint)
|
|||
ApplyFrictionTurnForce(frictionDir*fImpulse, pointpos);
|
||||
|
||||
if(fOtherSpeed > 0.1f &&
|
||||
colpoint.surfaceB != SURFACE_GRASS && colpoint.surfaceB != SURFACE_DIRTTRACK &&
|
||||
colpoint.surfaceB != SURFACE_GRASS && colpoint.surfaceB != SURFACE_MUD_DRY &&
|
||||
CSurfaceTable::GetAdhesionGroup(colpoint.surfaceA) == ADHESIVE_HARD){
|
||||
CVector v = frictionDir * fOtherSpeed * 0.25f;
|
||||
for(int i = 0; i < 4; i++)
|
||||
|
@ -1642,7 +1642,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists)
|
|||
if(impulseA > maxImpulseA) maxImpulseA = impulseA;
|
||||
|
||||
if(A->IsVehicle()){
|
||||
if(!(((CVehicle*)A)->IsBoat() && aColPoints[i].surfaceB == SURFACE_WOOD_PLANK) &&
|
||||
if(!(((CVehicle*)A)->IsBoat() && aColPoints[i].surfaceB == SURFACE_WOOD_SOLID) &&
|
||||
impulseA > A->m_fDamageImpulse)
|
||||
A->SetDamagedPieceRecord(aColPoints[i].pieceA, impulseA, B, aColPoints[i].normal);
|
||||
|
||||
|
@ -1679,7 +1679,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists)
|
|||
float adhesion = CSurfaceTable::GetAdhesiveLimit(aColPoints[i]) / numCollisions;
|
||||
|
||||
if(A->IsVehicle()){
|
||||
if(((CVehicle*)A)->IsBoat() && aColPoints[i].surfaceB == SURFACE_WOOD_PLANK)
|
||||
if(((CVehicle*)A)->IsBoat() && aColPoints[i].surfaceB == SURFACE_WOOD_SOLID)
|
||||
adhesion = 0.0f;
|
||||
else if(impulseA > A->m_fDamageImpulse)
|
||||
A->SetDamagedPieceRecord(aColPoints[i].pieceA, impulseA, B, aColPoints[i].normal);
|
||||
|
|
|
@ -96,7 +96,7 @@ CPedModelInfo::CreateHitColModelSkinned(RpClump *clump)
|
|||
center.x = pos.x + m_pColNodeInfos[i].x;
|
||||
center.y = pos.y + 0.0f;
|
||||
center.z = pos.z + m_pColNodeInfos[i].z;
|
||||
spheres[i].Set(m_pColNodeInfos[i].radius, center, SURFACE_FLESH, m_pColNodeInfos[i].pieceType);
|
||||
spheres[i].Set(m_pColNodeInfos[i].radius, center, SURFACE_PED, m_pColNodeInfos[i].pieceType);
|
||||
}
|
||||
RwMatrixDestroy(invmat);
|
||||
RwMatrixDestroy(mat);
|
||||
|
|
|
@ -2413,7 +2413,7 @@ particleProduceFootDust(CPed *ped, CVector const &pos, float size, int times)
|
|||
switch (ped->m_nSurfaceTouched)
|
||||
{
|
||||
case SURFACE_TARMAC:
|
||||
case SURFACE_DIRT:
|
||||
case SURFACE_GRAVEL:
|
||||
case SURFACE_PAVEMENT:
|
||||
case SURFACE_SAND:
|
||||
for (int i = 0; i < times; ++i) {
|
||||
|
@ -2566,7 +2566,7 @@ CPed::PlayFootSteps(void)
|
|||
}
|
||||
}
|
||||
|
||||
if (m_nSurfaceTouched == SURFACE_PUDDLE) {
|
||||
if (m_nSurfaceTouched == SURFACE_WATER) {
|
||||
float pedSpeed = CVector2D(m_vecMoveSpeed).Magnitude();
|
||||
if (pedSpeed > 0.03f && CTimer::GetFrameCounter() % 2 == 0 && pedSpeed > 0.13f) {
|
||||
#ifdef PC_PARTICLE
|
||||
|
@ -2965,7 +2965,7 @@ CPed::CanPedDriveOff(void)
|
|||
bool
|
||||
CPed::CanPedJumpThis(CEntity *unused, CVector *damageNormal = nil)
|
||||
{
|
||||
if (m_nSurfaceTouched == SURFACE_PUDDLE)
|
||||
if (m_nSurfaceTouched == SURFACE_WATER)
|
||||
return true;
|
||||
|
||||
CVector pos = GetPosition();
|
||||
|
@ -5306,8 +5306,8 @@ CPed::SetAttack(CEntity *victim)
|
|||
aimPos += GetUp() * 0.35f;
|
||||
CEntity *obstacle = CWorld::TestSphereAgainstWorld(aimPos, 0.2f, nil, true, false, false, true, false, false);
|
||||
if (obstacle) {
|
||||
if(gaTempSphereColPoints[0].surfaceB != SURFACE_SCAFFOLD && gaTempSphereColPoints[0].surfaceB != SURFACE_METAL_FENCE &&
|
||||
gaTempSphereColPoints[0].surfaceB != SURFACE_WOOD_BOX && gaTempSphereColPoints[0].surfaceB != SURFACE_METAL_POLE) {
|
||||
if(gaTempSphereColPoints[0].surfaceB != SURFACE_TRANSPARENT_CLOTH && gaTempSphereColPoints[0].surfaceB != SURFACE_METAL_CHAIN_FENCE &&
|
||||
gaTempSphereColPoints[0].surfaceB != SURFACE_WOOD_BENCH && gaTempSphereColPoints[0].surfaceB != SURFACE_SCAFFOLD_POLE) {
|
||||
if (!IsPlayer()) {
|
||||
bObstacleShowedUpDuringKillObjective = true;
|
||||
m_shootTimer = 0;
|
||||
|
@ -11647,7 +11647,7 @@ CPed::SetJump(void)
|
|||
#ifdef VC_PED_PORTS
|
||||
m_nPedState != PED_JUMP && !RpAnimBlendClumpGetAssociation(GetClump(), ANIM_JUMP_LAUNCH) &&
|
||||
#endif
|
||||
(m_nSurfaceTouched != SURFACE_STONE || DotProduct(GetForward(), m_vecDamageNormal) >= 0.0f)) {
|
||||
(m_nSurfaceTouched != SURFACE_STEEP_CLIFF || DotProduct(GetForward(), m_vecDamageNormal) >= 0.0f)) {
|
||||
SetStoredState();
|
||||
m_nPedState = PED_JUMP;
|
||||
CAnimBlendAssociation *jumpAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_JUMP_LAUNCH, 8.0f);
|
||||
|
@ -15473,7 +15473,7 @@ CPed::ProcessEntityCollision(CEntity *collidingEnt, CColPoint *collidingPoints)
|
|||
GetMatrix().GetPosition().z = FEET_OFFSET + intersectionPoint.point.z;
|
||||
#endif
|
||||
m_nSurfaceTouched = intersectionPoint.surfaceB;
|
||||
if (m_nSurfaceTouched == SURFACE_STONE) {
|
||||
if (m_nSurfaceTouched == SURFACE_STEEP_CLIFF) {
|
||||
bHitSteepSlope = true;
|
||||
m_vecDamageNormal = intersectionPoint.normal;
|
||||
}
|
||||
|
@ -15559,7 +15559,7 @@ CPed::ProcessEntityCollision(CEntity *collidingEnt, CColPoint *collidingPoints)
|
|||
#endif
|
||||
sphereNormal.Normalise();
|
||||
collidingPoints[sphere].normal = sphereNormal;
|
||||
if (collidingPoints[sphere].surfaceB == SURFACE_STONE)
|
||||
if (collidingPoints[sphere].surfaceB == SURFACE_STEEP_CLIFF)
|
||||
bHitSteepSlope = true;
|
||||
}
|
||||
}
|
||||
|
@ -17430,7 +17430,7 @@ CPed::UpdatePosition(void)
|
|||
velocityChange = m_moved + velocityOfSurface - m_vecMoveSpeed;
|
||||
m_fRotationCur += curSurface->m_vecTurnSpeed.z * CTimer::GetTimeStep();
|
||||
m_fRotationDest += curSurface->m_vecTurnSpeed.z * CTimer::GetTimeStep();
|
||||
} else if (m_nSurfaceTouched != SURFACE_STONE || m_vecDamageNormal.x == 0.0f && m_vecDamageNormal.y == 0.0f) {
|
||||
} else if (m_nSurfaceTouched != SURFACE_STEEP_CLIFF || m_vecDamageNormal.x == 0.0f && m_vecDamageNormal.y == 0.0f) {
|
||||
velocityChange = m_moved - m_vecMoveSpeed;
|
||||
} else {
|
||||
// Ped got damaged by steep slope
|
||||
|
|
|
@ -609,7 +609,7 @@ CAutomobile::ProcessControl(void)
|
|||
m_aSuspensionSpringRatio[i], bias);
|
||||
m_aWheelSkidmarkMuddy[i] =
|
||||
m_aWheelColPoints[i].surfaceB == SURFACE_GRASS ||
|
||||
m_aWheelColPoints[i].surfaceB == SURFACE_DIRTTRACK ||
|
||||
m_aWheelColPoints[i].surfaceB == SURFACE_MUD_DRY ||
|
||||
m_aWheelColPoints[i].surfaceB == SURFACE_SAND;
|
||||
}else{
|
||||
contactPoints[i] = Multiply3x3(GetMatrix(), colModel->lines[i].p1);
|
||||
|
@ -733,7 +733,7 @@ CAutomobile::ProcessControl(void)
|
|||
else
|
||||
fThrust = acceleration;
|
||||
|
||||
m_aWheelColPoints[CARWHEEL_FRONT_LEFT].surfaceA = SURFACE_RUBBER29;
|
||||
m_aWheelColPoints[CARWHEEL_FRONT_LEFT].surfaceA = SURFACE_WHEELBASE;
|
||||
float adhesion = CSurfaceTable::GetAdhesiveLimit(m_aWheelColPoints[CARWHEEL_FRONT_LEFT])*traction;
|
||||
if(GetStatus() == STATUS_PLAYER)
|
||||
adhesion *= CSurfaceTable::GetWetMultiplier(m_aWheelColPoints[CARWHEEL_FRONT_LEFT].surfaceB);
|
||||
|
@ -767,7 +767,7 @@ CAutomobile::ProcessControl(void)
|
|||
else
|
||||
fThrust = acceleration;
|
||||
|
||||
m_aWheelColPoints[CARWHEEL_FRONT_RIGHT].surfaceA = SURFACE_RUBBER29;
|
||||
m_aWheelColPoints[CARWHEEL_FRONT_RIGHT].surfaceA = SURFACE_WHEELBASE;
|
||||
float adhesion = CSurfaceTable::GetAdhesiveLimit(m_aWheelColPoints[CARWHEEL_FRONT_RIGHT])*traction;
|
||||
if(GetStatus() == STATUS_PLAYER)
|
||||
adhesion *= CSurfaceTable::GetWetMultiplier(m_aWheelColPoints[CARWHEEL_FRONT_RIGHT].surfaceB);
|
||||
|
@ -848,7 +848,7 @@ CAutomobile::ProcessControl(void)
|
|||
else
|
||||
fThrust = acceleration;
|
||||
|
||||
m_aWheelColPoints[CARWHEEL_REAR_LEFT].surfaceA = SURFACE_RUBBER29;
|
||||
m_aWheelColPoints[CARWHEEL_REAR_LEFT].surfaceA = SURFACE_WHEELBASE;
|
||||
float adhesion = CSurfaceTable::GetAdhesiveLimit(m_aWheelColPoints[CARWHEEL_REAR_LEFT])*traction;
|
||||
if(GetStatus() == STATUS_PLAYER)
|
||||
adhesion *= CSurfaceTable::GetWetMultiplier(m_aWheelColPoints[CARWHEEL_REAR_LEFT].surfaceB);
|
||||
|
@ -882,7 +882,7 @@ CAutomobile::ProcessControl(void)
|
|||
else
|
||||
fThrust = acceleration;
|
||||
|
||||
m_aWheelColPoints[CARWHEEL_REAR_RIGHT].surfaceA = SURFACE_RUBBER29;
|
||||
m_aWheelColPoints[CARWHEEL_REAR_RIGHT].surfaceA = SURFACE_WHEELBASE;
|
||||
float adhesion = CSurfaceTable::GetAdhesiveLimit(m_aWheelColPoints[CARWHEEL_REAR_RIGHT])*traction;
|
||||
if(GetStatus() == STATUS_PLAYER)
|
||||
adhesion *= CSurfaceTable::GetWetMultiplier(m_aWheelColPoints[CARWHEEL_REAR_RIGHT].surfaceB);
|
||||
|
@ -1097,10 +1097,10 @@ CAutomobile::ProcessControl(void)
|
|||
}
|
||||
|
||||
uint8 surf = m_aWheelColPoints[i].surfaceB;
|
||||
if(surf == SURFACE_DIRT || surf == SURFACE_PUDDLE || surf == SURFACE_HEDGE){
|
||||
if(surf == SURFACE_GRAVEL || surf == SURFACE_WATER || surf == SURFACE_HEDGE){
|
||||
if(surfShake < 0.2f)
|
||||
surfShake = 0.3f;
|
||||
}else if(surf == SURFACE_DIRTTRACK || surf == SURFACE_SAND){
|
||||
}else if(surf == SURFACE_MUD_DRY || surf == SURFACE_SAND){
|
||||
if(surfShake < 0.1f)
|
||||
surfShake = 0.2f;
|
||||
}else if(surf == SURFACE_GRASS){
|
||||
|
@ -2933,7 +2933,7 @@ CAutomobile::ProcessBuoyancy(void)
|
|||
static RwRGBA smokeCol = {255, 255, 255, 255};
|
||||
|
||||
for(i = 0; i < 4; i++){
|
||||
if(m_aSuspensionSpringRatio[i] < 1.0f && m_aWheelColPoints[i].surfaceB == SURFACE_PUDDLE){
|
||||
if(m_aSuspensionSpringRatio[i] < 1.0f && m_aWheelColPoints[i].surfaceB == SURFACE_WATER){
|
||||
CVector pos = m_aWheelColPoints[i].point + 0.3f*GetUp() - GetPosition();
|
||||
CVector vSpeed = GetSpeed(pos);
|
||||
vSpeed.z = 0.0f;
|
||||
|
@ -3540,7 +3540,7 @@ CAutomobile::AddWheelDirtAndWater(CColPoint *colpoint, uint32 belowEffectSpeed)
|
|||
CGeneral::GetRandomNumberInRange(0.02f, 0.1f), grassCol);
|
||||
}
|
||||
return 0;
|
||||
case SURFACE_DIRT:
|
||||
case SURFACE_GRAVEL:
|
||||
dir.x = -0.05f*m_vecMoveSpeed.x;
|
||||
dir.y = -0.05f*m_vecMoveSpeed.y;
|
||||
for(i = 0; i < 4; i++){
|
||||
|
@ -3549,7 +3549,7 @@ CAutomobile::AddWheelDirtAndWater(CColPoint *colpoint, uint32 belowEffectSpeed)
|
|||
CGeneral::GetRandomNumberInRange(0.02f, 0.06f), dirtCol);
|
||||
}
|
||||
return 1;
|
||||
case SURFACE_DIRTTRACK:
|
||||
case SURFACE_MUD_DRY:
|
||||
dir.x = -0.05f*m_vecMoveSpeed.x;
|
||||
dir.y = -0.05f*m_vecMoveSpeed.y;
|
||||
for(i = 0; i < 4; i++){
|
||||
|
@ -3899,19 +3899,19 @@ CAutomobile::SetUpWheelColModel(CColModel *colModel)
|
|||
|
||||
CMatrix mat;
|
||||
mat.Attach(RwFrameGetMatrix(m_aCarNodes[CAR_WHEEL_LF]));
|
||||
colModel->spheres[0].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_TIRE, CAR_PIECE_WHEEL_LF);
|
||||
colModel->spheres[0].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_RUBBER, CAR_PIECE_WHEEL_LF);
|
||||
mat.Attach(RwFrameGetMatrix(m_aCarNodes[CAR_WHEEL_LB]));
|
||||
colModel->spheres[1].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_TIRE, CAR_PIECE_WHEEL_LR);
|
||||
colModel->spheres[1].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_RUBBER, CAR_PIECE_WHEEL_LR);
|
||||
mat.Attach(RwFrameGetMatrix(m_aCarNodes[CAR_WHEEL_RF]));
|
||||
colModel->spheres[2].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_TIRE, CAR_PIECE_WHEEL_RF);
|
||||
colModel->spheres[2].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_RUBBER, CAR_PIECE_WHEEL_RF);
|
||||
mat.Attach(RwFrameGetMatrix(m_aCarNodes[CAR_WHEEL_RB]));
|
||||
colModel->spheres[3].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_TIRE, CAR_PIECE_WHEEL_RR);
|
||||
colModel->spheres[3].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_RUBBER, CAR_PIECE_WHEEL_RR);
|
||||
|
||||
if(m_aCarNodes[CAR_WHEEL_LM] != nil && m_aCarNodes[CAR_WHEEL_RM] != nil){
|
||||
mat.Attach(RwFrameGetMatrix(m_aCarNodes[CAR_WHEEL_LM]));
|
||||
colModel->spheres[4].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_TIRE, CAR_PIECE_WHEEL_LR);
|
||||
colModel->spheres[4].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_RUBBER, CAR_PIECE_WHEEL_LR);
|
||||
mat.Attach(RwFrameGetMatrix(m_aCarNodes[CAR_WHEEL_RM]));
|
||||
colModel->spheres[5].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_TIRE, CAR_PIECE_WHEEL_RR);
|
||||
colModel->spheres[5].Set(mi->m_wheelScale, mat.GetPosition(), SURFACE_RUBBER, CAR_PIECE_WHEEL_RR);
|
||||
colModel->numSpheres = 6;
|
||||
}else
|
||||
colModel->numSpheres = 4;
|
||||
|
|
|
@ -703,7 +703,7 @@ CVehicle::BladeColSectorList(CPtrList &list, CColModel &rotorColModel, CMatrix &
|
|||
}
|
||||
|
||||
if(hadCollision && !entity->IsPed())
|
||||
DMAudio.ReportCollision(this, entity, SURFACE_BILLBOARD, SURFACE_TARMAC, 50.0f, 0.09f);
|
||||
DMAudio.ReportCollision(this, entity, SURFACE_CAR_PANEL, SURFACE_TARMAC, 50.0f, 0.09f);
|
||||
m_fElasticity = savedElasticity;
|
||||
}
|
||||
}
|
||||
|
@ -2082,7 +2082,7 @@ CVehicle::HeliDustGenerate(CEntity *heli, float radius, float ground, int rnd)
|
|||
|
||||
float waterLevel = 0.0f;
|
||||
if(CWaterLevel::GetWaterLevel(pos, &waterLevel, false) && waterLevel > particleZ){
|
||||
surface = SURFACE_PUDDLE;
|
||||
surface = SURFACE_WATER;
|
||||
n = rnd;
|
||||
particleZ = waterLevel;
|
||||
}
|
||||
|
@ -2090,7 +2090,7 @@ CVehicle::HeliDustGenerate(CEntity *heli, float radius, float ground, int rnd)
|
|||
|
||||
if(n){
|
||||
pos.z = particleZ;
|
||||
if(surface == SURFACE_PUDDLE){
|
||||
if(surface == SURFACE_WATER){
|
||||
float red = (0.3*CTimeCycle::GetDirectionalRed() + CTimeCycle::GetAmbientRed_Obj())*255.0f/4.0f;
|
||||
float green = (0.3*CTimeCycle::GetDirectionalGreen() + CTimeCycle::GetAmbientGreen_Obj())*255.0f/4.0f;
|
||||
float blue = (0.3*CTimeCycle::GetDirectionalBlue() + CTimeCycle::GetAmbientBlue_Obj())*255.0f/4.0f;
|
||||
|
@ -2119,18 +2119,18 @@ CVehicle::HeliDustGenerate(CEntity *heli, float radius, float ground, int rnd)
|
|||
g = 10;
|
||||
b = 3;
|
||||
break;
|
||||
case SURFACE_DIRT:
|
||||
case SURFACE_GRAVEL:
|
||||
r = 10;
|
||||
g = 8;
|
||||
b = 7;
|
||||
break;
|
||||
case SURFACE_DIRTTRACK:
|
||||
case SURFACE_MUD_DRY:
|
||||
r = 10;
|
||||
g = 6;
|
||||
b = 3;
|
||||
break;
|
||||
case SURFACE_SAND:
|
||||
case SURFACE_SAND33:
|
||||
case SURFACE_SAND_BEACH:
|
||||
r = 10;
|
||||
g = 10;
|
||||
b = 7;
|
||||
|
|
|
@ -1647,7 +1647,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
|
|||
{
|
||||
case ENTITY_TYPE_VEHICLE:
|
||||
{
|
||||
if (point.pieceB >= SURFACE_STREET_LIGHT && point.pieceB <= SURFACE_METAL_FENCE) {
|
||||
if (point.pieceB >= SURFACE_LAMP_POST && point.pieceB <= SURFACE_METAL_CHAIN_FENCE) {
|
||||
((CVehicle*)victim)->BurstTyre(point.pieceB, true);
|
||||
|
||||
for (int32 i = 0; i < 4; i++)
|
||||
|
|
Loading…
Reference in a new issue