mirror of
https://github.com/GTAmodding/re3.git
synced 2024-11-15 22:49:01 +00:00
cleanup processVehicleEngine and some fixes
This commit is contained in:
parent
5b9e4c4780
commit
0f119ed371
2 changed files with 57 additions and 210 deletions
|
@ -736,7 +736,7 @@ void cAudioManager::ProcessVehicle(CVehicle* veh)
|
|||
switch (params.m_VehicleType) {
|
||||
case VEHICLE_TYPE_CAR:
|
||||
automobile = (CAutomobile*)veh;
|
||||
UpdateGasPedalAudio(&automobile->m_fGasPedalAudio, automobile->m_fGasPedal);
|
||||
UpdateGasPedalAudio(veh, params.m_VehicleType);
|
||||
if (veh->m_modelIndex == MI_RCBANDIT || veh->m_modelIndex == MI_RCBARON) {
|
||||
ProcessModelCarEngine(¶ms);
|
||||
ProcessEngineDamage(¶ms);
|
||||
|
@ -805,7 +805,7 @@ void cAudioManager::ProcessVehicle(CVehicle* veh)
|
|||
break;
|
||||
case VEHICLE_TYPE_BIKE:
|
||||
bike = (CBike*)veh;
|
||||
UpdateGasPedalAudio(&bike->m_fGasPedalAudio, bike->m_fGasPedal);
|
||||
UpdateGasPedalAudio(veh, params.m_VehicleType);
|
||||
if (ProcessVehicleRoadNoise(¶ms)) {
|
||||
if (CWeather::WetRoads > 0.0f)
|
||||
ProcessWetRoadNoise(¶ms);
|
||||
|
@ -1075,35 +1075,32 @@ cAudioManager::ProcessWetRoadNoise(cVehicleParams *params)
|
|||
}
|
||||
|
||||
void
|
||||
cAudioManager::ProcessVehicleEngine1(cVehicleParams* params)
|
||||
cAudioManager::ProcessVehicleEngine(cVehicleParams* params)
|
||||
{
|
||||
const float SOUND_INTENSITY = 50.0f;
|
||||
|
||||
CVehicle* playerVeh;
|
||||
CVehicle* veh;
|
||||
CAutomobile* automobile;
|
||||
float relativeGearChange;
|
||||
float relativeChange;
|
||||
uint8 volume;
|
||||
int32 freq = 0;
|
||||
uint8 emittingVol;
|
||||
cTransmission* transmission;
|
||||
uint8 currentGear;
|
||||
float modificator;
|
||||
float traction = 0.f;
|
||||
|
||||
bool bPizzaFaggio;
|
||||
bool bCaddy;
|
||||
CBike* bike;
|
||||
int8 wheelsOnGround;
|
||||
int8 wheelsOnGroundPrev;
|
||||
tWheelState* wheelState;
|
||||
float* gasPedalAudioPtr;
|
||||
|
||||
float someValue;
|
||||
int32 freq = 0;
|
||||
uint8 currentGear;
|
||||
uint8 emittingVol;
|
||||
int8 wheelsOnGround;
|
||||
int8 wheelsOnGroundPrev;
|
||||
float relativeGearChange;
|
||||
float relativeChange;
|
||||
float modificator;
|
||||
float traction;
|
||||
bool pizzaFaggBool;
|
||||
bool caddyBool;
|
||||
|
||||
bPizzaFaggio = false;
|
||||
bCaddy = false;
|
||||
pizzaFaggBool = false;
|
||||
caddyBool = false;
|
||||
traction = 0.0f;
|
||||
if (params->m_fDistance >= SQR(SOUND_INTENSITY))
|
||||
return;
|
||||
|
@ -1125,12 +1122,12 @@ cAudioManager::ProcessVehicleEngine1(cVehicleParams* params)
|
|||
switch (veh->m_modelIndex) {
|
||||
case MI_PIZZABOY:
|
||||
case MI_FAGGIO:
|
||||
bPizzaFaggio = true;
|
||||
pizzaFaggBool = true;
|
||||
currentGear = transmission->nNumberOfGears;
|
||||
break;
|
||||
case MI_CADDY:
|
||||
currentGear = transmission->nNumberOfGears;
|
||||
bCaddy = true;
|
||||
caddyBool = true;
|
||||
break;
|
||||
default:
|
||||
currentGear = veh->m_nCurrentGear;
|
||||
|
@ -1157,8 +1154,8 @@ cAudioManager::ProcessVehicleEngine1(cVehicleParams* params)
|
|||
}
|
||||
|
||||
if (wheelsOnGround != 0) {
|
||||
if (!veh->bIsHandbrakeOn || bPizzaFaggio && bCaddy) { //mb bug, bcs it's can't be true together
|
||||
if (veh->GetStatus() == STATUS_SIMPLE || bPizzaFaggio || bCaddy) {
|
||||
if (!veh->bIsHandbrakeOn || pizzaFaggBool && caddyBool) { //mb bug, bcs it's can't be true together
|
||||
if (veh->GetStatus() == STATUS_SIMPLE || pizzaFaggBool || caddyBool) {
|
||||
traction = 0.0f;
|
||||
} else {
|
||||
switch (transmission->nDriveType) {
|
||||
|
@ -1199,46 +1196,43 @@ cAudioManager::ProcessVehicleEngine1(cVehicleParams* params)
|
|||
break;
|
||||
}
|
||||
}
|
||||
} else if (0.0f != params->m_fVelocityChange) {
|
||||
} else if (0.0f == params->m_fVelocityChange) {
|
||||
traction = 0.9f;
|
||||
}
|
||||
if (transmission->fMaxVelocity <= 0.0) {
|
||||
relativeChange = 0.0f;
|
||||
//var = 0.0f;
|
||||
//goto lab86;
|
||||
}
|
||||
|
||||
//201-243
|
||||
if (!bPizzaFaggio && !bCaddy) {
|
||||
if (currentGear != 0) {
|
||||
relativeGearChange = Min(1.0f,
|
||||
params->m_fVelocityChange - transmission->Gears[currentGear].fShiftDownVelocity) / transmission->fMaxVelocity * 2.5f;
|
||||
if (traction != 0.0f && veh->GetStatus() != STATUS_SIMPLE && params->m_fVelocityChange >= transmission->Gears[1].fShiftUpVelocity)
|
||||
traction = 0.7f;
|
||||
relativeChange = traction * *gasPedalAudioPtr * 0.95f + (1.0f - traction) * relativeGearChange;
|
||||
modificator = 0.0f;
|
||||
} else {
|
||||
if (!pizzaFaggBool && !caddyBool) {
|
||||
if (currentGear != 0) {
|
||||
relativeGearChange = Min(1.0f,
|
||||
params->m_fVelocityChange - transmission->Gears[currentGear].fShiftDownVelocity) / transmission->fMaxVelocity * 2.5f;
|
||||
if (traction == 0.0f && veh->GetStatus() != STATUS_SIMPLE &&
|
||||
params->m_fVelocityChange < transmission->Gears[1].fShiftUpVelocity)
|
||||
traction = 0.7f;
|
||||
relativeChange = traction * *gasPedalAudioPtr * 0.95f + (1.0f - traction) * relativeGearChange;
|
||||
} else {
|
||||
relativeChange = Min(1.0f,
|
||||
1.0f - Abs((params->m_fVelocityChange - transmission->Gears[0].fShiftDownVelocity) / transmission->fMaxReverseVelocity));
|
||||
}
|
||||
modificator = relativeChange;
|
||||
} else {
|
||||
relativeChange = Min(1.0f,
|
||||
1.0f - Abs((params->m_fVelocityChange - transmission->Gears[0].fShiftDownVelocity) / transmission->fMaxReverseVelocity));
|
||||
modificator = Min(1.0, Abs(params->m_fVelocityChange / transmission->fMaxVelocity > 1.0f));
|
||||
}
|
||||
//goto lab85
|
||||
}
|
||||
|
||||
//244-254
|
||||
modificator = Min(1.0, Abs(params->m_fVelocityChange / transmission->fMaxVelocity > 1.0f));
|
||||
} else {
|
||||
if (wheelsOnGroundPrev != 0)
|
||||
*gasPedalAudioPtr *= 0.4f;
|
||||
relativeChange = *gasPedalAudioPtr;
|
||||
modificator = relativeChange;
|
||||
}
|
||||
//256-272
|
||||
if (currentGear != 0 || wheelsOnGround == 0)
|
||||
freq = 1200 * currentGear + 18000.0f * modificator + 14000;
|
||||
else if (params->m_VehicleType == VEHICLE_TYPE_BIKE)
|
||||
freq = 22050;
|
||||
else
|
||||
freq = 13000.0f * modificator + 14000;
|
||||
if (modificator < 0.75f)
|
||||
if (modificator >= 0.75f)
|
||||
emittingVol = 90;
|
||||
else
|
||||
emittingVol = modificator * (4.0f / 3.0f) * 15.0f + 75;
|
||||
|
@ -1246,19 +1240,18 @@ cAudioManager::ProcessVehicleEngine1(cVehicleParams* params)
|
|||
modificator = 0.0f;
|
||||
emittingVol = 75;
|
||||
}
|
||||
//273-
|
||||
if (veh->bIsDrowning)
|
||||
emittingVol /= 4;
|
||||
if (bCaddy) {
|
||||
if (caddyBool) {
|
||||
emittingVol = 100.0f * modificator;
|
||||
freq = 2130.0f * modificator + 4270;
|
||||
m_sQueueSample.m_nCounter = 2;
|
||||
}
|
||||
m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, SOUND_INTENSITY, m_sQueueSample.m_fDistance);
|
||||
if (m_sQueueSample.m_nVolume != 0) {
|
||||
if (!bCaddy) {
|
||||
if (!caddyBool) {
|
||||
if (veh->GetStatus() == STATUS_SIMPLE) {
|
||||
if (modificator >= 0.02f) {
|
||||
if (modificator < 0.02f) {
|
||||
m_sQueueSample.m_nSampleIndex = aVehicleSettings[params->m_nIndex].m_nBank - CAR_SFX_BANKS_OFFSET + SFX_CAR_IDLE_1;
|
||||
m_sQueueSample.m_nCounter = 52;
|
||||
freq = 10000.0f * modificator + 22050;
|
||||
|
@ -1267,7 +1260,7 @@ cAudioManager::ProcessVehicleEngine1(cVehicleParams* params)
|
|||
m_sQueueSample.m_nCounter = 2;
|
||||
}
|
||||
} else {
|
||||
if (veh->m_fGasPedal >= 0.02f) {
|
||||
if (veh->m_fGasPedal < 0.02f) {
|
||||
m_sQueueSample.m_nSampleIndex = aVehicleSettings[params->m_nIndex].m_nBank - CAR_SFX_BANKS_OFFSET + SFX_CAR_IDLE_1;
|
||||
m_sQueueSample.m_nCounter = 52;
|
||||
freq = 10000.0f * modificator + 22050;
|
||||
|
@ -1301,171 +1294,27 @@ cAudioManager::ProcessVehicleEngine1(cVehicleParams* params)
|
|||
m_sQueueSample.m_bRequireReflection = false;
|
||||
AddSampleToRequestedQueue();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
cAudioManager::ProcessVehicleEngine(cVehicleParams *params)
|
||||
cAudioManager::UpdateGasPedalAudio(CVehicle* veh, eVehicleType vehType)
|
||||
{
|
||||
const float SOUND_INTENSITY = 50.0f;
|
||||
float gasPedal = Abs(veh->m_fGasPedal);
|
||||
float* gasPealAudioPtr;
|
||||
|
||||
CVehicle *playerVeh;
|
||||
CVehicle *veh;
|
||||
CAutomobile *automobile;
|
||||
float relativeGearChange;
|
||||
float relativeChange;
|
||||
uint8 volume;
|
||||
int32 freq = 0;
|
||||
uint8 emittingVol;
|
||||
cTransmission *transmission;
|
||||
uint8 currentGear;
|
||||
float modificator;
|
||||
float traction = 0.f;
|
||||
|
||||
if (params->m_fDistance < SQR(SOUND_INTENSITY)) {
|
||||
playerVeh = FindPlayerVehicle();
|
||||
veh = params->m_pVehicle;
|
||||
if (playerVeh == veh && veh->GetStatus() == STATUS_WRECKED) {
|
||||
SampleManager.StopChannel(m_nActiveSamples);
|
||||
return;
|
||||
}
|
||||
if (!params->m_bDistanceCalculated) {
|
||||
if (params->m_fDistance <= 0.0f)
|
||||
m_sQueueSample.m_fDistance = 0.0f;
|
||||
else
|
||||
m_sQueueSample.m_fDistance = Sqrt(params->m_fDistance);
|
||||
}
|
||||
|
||||
if (veh->bEngineOn) {
|
||||
CalculateDistance(params->m_bDistanceCalculated, params->m_fDistance);
|
||||
automobile = (CAutomobile *)params->m_pVehicle;
|
||||
if (params->m_nIndex == DODO) {
|
||||
ProcessCesna(params);
|
||||
return;
|
||||
}
|
||||
if (FindPlayerVehicle() == veh) {
|
||||
ProcessPlayersVehicleEngine(params, params->m_pVehicle);
|
||||
return;
|
||||
}
|
||||
transmission = params->m_pTransmission;
|
||||
if (transmission != nil) {
|
||||
currentGear = params->m_pVehicle->m_nCurrentGear;
|
||||
if (automobile->m_nWheelsOnGround != 0) {
|
||||
if (automobile->bIsHandbrakeOn) {
|
||||
if (params->m_fVelocityChange == 0.0f)
|
||||
traction = 0.9f;
|
||||
} else if (params->m_pVehicle->GetStatus() == STATUS_SIMPLE) {
|
||||
traction = 0.0f;
|
||||
} else {
|
||||
switch (transmission->nDriveType) {
|
||||
case '4':
|
||||
for (int32 i = 0; i < ARRAY_SIZE(automobile->m_aWheelState); i++) {
|
||||
if (automobile->m_aWheelState[i] == WHEEL_STATE_SPINNING)
|
||||
traction += 0.05f;
|
||||
}
|
||||
break;
|
||||
case 'F':
|
||||
if (automobile->m_aWheelState[CARWHEEL_FRONT_LEFT] == WHEEL_STATE_SPINNING)
|
||||
traction += 0.1f;
|
||||
if (automobile->m_aWheelState[CARWHEEL_FRONT_RIGHT] == WHEEL_STATE_SPINNING)
|
||||
traction += 0.1f;
|
||||
break;
|
||||
case 'R':
|
||||
if (automobile->m_aWheelState[CARWHEEL_REAR_LEFT] == WHEEL_STATE_SPINNING)
|
||||
traction += 0.1f;
|
||||
if (automobile->m_aWheelState[CARWHEEL_REAR_RIGHT] == WHEEL_STATE_SPINNING)
|
||||
traction += 0.1f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (transmission->fMaxVelocity <= 0.f) {
|
||||
relativeChange = 0.f;
|
||||
} else if (currentGear != 0) {
|
||||
relativeGearChange =
|
||||
Min(1.0f, (params->m_fVelocityChange - transmission->Gears[currentGear].fShiftDownVelocity) / transmission->fMaxVelocity * 2.5f);
|
||||
if (traction == 0.0f && automobile->GetStatus() != STATUS_SIMPLE &&
|
||||
params->m_fVelocityChange < transmission->Gears[1].fShiftUpVelocity) {
|
||||
traction = 0.7f;
|
||||
}
|
||||
relativeChange = traction * automobile->m_fGasPedalAudio * 0.95f + (1.0f - traction) * relativeGearChange;
|
||||
} else
|
||||
relativeChange =
|
||||
Min(1.0f, 1.0f - Abs((params->m_fVelocityChange - transmission->Gears[0].fShiftDownVelocity) / transmission->fMaxReverseVelocity));
|
||||
} else {
|
||||
if (automobile->m_nDriveWheelsOnGround != 0)
|
||||
automobile->m_fGasPedalAudio *= 0.4f;
|
||||
relativeChange = automobile->m_fGasPedalAudio;
|
||||
}
|
||||
modificator = relativeChange;
|
||||
if (currentGear != 0 || automobile->m_nWheelsOnGround == 0)
|
||||
freq = 1200 * currentGear + 18000.f * modificator + 14000;
|
||||
else
|
||||
freq = 13000.f * modificator + 14000;
|
||||
if (modificator >= 0.75f) {
|
||||
emittingVol = 120;
|
||||
volume = ComputeVolume(emittingVol, SOUND_INTENSITY, m_sQueueSample.m_fDistance);
|
||||
} else {
|
||||
emittingVol = modificator * 4.0f / 3.0f * 40.f + 80.f;
|
||||
volume = ComputeVolume(emittingVol, SOUND_INTENSITY, m_sQueueSample.m_fDistance);
|
||||
}
|
||||
} else {
|
||||
modificator = 0.f;
|
||||
emittingVol = 80;
|
||||
volume = ComputeVolume(emittingVol, SOUND_INTENSITY, m_sQueueSample.m_fDistance);
|
||||
}
|
||||
m_sQueueSample.m_nVolume = volume;
|
||||
if (m_sQueueSample.m_nVolume != 0) {
|
||||
if (automobile->GetStatus() == STATUS_SIMPLE) {
|
||||
if (modificator < 0.02f) {
|
||||
m_sQueueSample.m_nSampleIndex = aVehicleSettings[params->m_nIndex].m_nBank - CAR_SFX_BANKS_OFFSET + SFX_CAR_IDLE_1;
|
||||
freq = modificator * 10000 + 22050;
|
||||
m_sQueueSample.m_nCounter = 52;
|
||||
} else {
|
||||
m_sQueueSample.m_nSampleIndex = aVehicleSettings[params->m_nIndex].m_nAccelerationSampleIndex;
|
||||
m_sQueueSample.m_nCounter = 2;
|
||||
}
|
||||
} else {
|
||||
if (automobile->m_fGasPedal < 0.05f) {
|
||||
m_sQueueSample.m_nSampleIndex = aVehicleSettings[params->m_nIndex].m_nBank - CAR_SFX_BANKS_OFFSET + SFX_CAR_IDLE_1;
|
||||
freq = modificator * 10000 + 22050;
|
||||
m_sQueueSample.m_nCounter = 52;
|
||||
} else {
|
||||
m_sQueueSample.m_nSampleIndex = aVehicleSettings[params->m_nIndex].m_nAccelerationSampleIndex;
|
||||
m_sQueueSample.m_nCounter = 2;
|
||||
}
|
||||
}
|
||||
m_sQueueSample.m_nBankIndex = SFX_BANK_0;
|
||||
m_sQueueSample.m_bIs2D = false;
|
||||
m_sQueueSample.m_nReleasingVolumeModificator = 3;
|
||||
m_sQueueSample.m_nFrequency = freq + 100 * m_sQueueSample.m_nEntityIndex % 1000;
|
||||
if (m_sQueueSample.m_nSampleIndex == SFX_CAR_IDLE_6 || m_sQueueSample.m_nSampleIndex == SFX_CAR_REV_6)
|
||||
m_sQueueSample.m_nFrequency /= 2;
|
||||
m_sQueueSample.m_nLoopCount = 0;
|
||||
m_sQueueSample.m_nEmittingVolume = emittingVol;
|
||||
m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex);
|
||||
m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex);
|
||||
m_sQueueSample.m_fSpeedMultiplier = 6.0f;
|
||||
m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY;
|
||||
m_sQueueSample.m_bReleasingSoundFlag = false;
|
||||
m_sQueueSample.m_nReleasingVolumeDivider = 8;
|
||||
m_sQueueSample.m_bReverbFlag = true;
|
||||
m_sQueueSample.m_bRequireReflection = false;
|
||||
AddSampleToRequestedQueue();
|
||||
}
|
||||
}
|
||||
switch (vehType) {
|
||||
case VEHICLE_TYPE_CAR:
|
||||
gasPealAudioPtr = &((CAutomobile*)veh)->m_fGasPedalAudio;
|
||||
case VEHICLE_TYPE_BIKE:
|
||||
gasPealAudioPtr = &((CBike*)veh)->m_fGasPedalAudio;
|
||||
default:
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
cAudioManager::UpdateGasPedalAudio(float* gasPedalAudio, float vehGasPedal)
|
||||
{
|
||||
float gasPedal = Abs(vehGasPedal);
|
||||
|
||||
if (*gasPedalAudio < gasPedal)
|
||||
*gasPedalAudio = Min(*gasPedalAudio + 0.09f, gasPedal);
|
||||
if (*gasPealAudioPtr < gasPedal)
|
||||
*gasPealAudioPtr = Min(*gasPealAudioPtr + 0.09f, gasPedal);
|
||||
else
|
||||
*gasPedalAudio = Max(*gasPedalAudio - 0.07f, gasPedal);
|
||||
*gasPealAudioPtr = Max(*gasPealAudioPtr - 0.07f, gasPedal);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -360,7 +360,7 @@ public:
|
|||
void ProcessVehicle(CVehicle *vehicle);
|
||||
bool ProcessVehicleDoors(cVehicleParams *params);
|
||||
void ProcessVehicleEngine(cVehicleParams *params);
|
||||
void UpdateGasPedalAudio(float* gasPedalAudio, float vehGasPedal);
|
||||
void UpdateGasPedalAudio(CVehicle* veh, eVehicleType vehType);
|
||||
void ProcessVehicleHorn(cVehicleParams *params);
|
||||
void ProcessVehicleOneShots(cVehicleParams *params);
|
||||
bool ProcessVehicleReverseWarning(cVehicleParams *params);
|
||||
|
@ -371,8 +371,6 @@ public:
|
|||
void ProcessWeather(int32 id);
|
||||
bool ProcessWetRoadNoise(cVehicleParams *params);
|
||||
|
||||
void ProcessVehicleEngine1(cVehicleParams* params);
|
||||
|
||||
int32 RandomDisplacement(uint32 seed) const;
|
||||
void ReacquireDigitalHandle() const;
|
||||
void ReleaseDigitalHandle() const;
|
||||
|
|
Loading…
Reference in a new issue