mirror of
https://github.com/halpz/re3.git
synced 2025-06-29 06:26:22 +00:00
more car control
This commit is contained in:
@ -3,6 +3,7 @@
|
||||
#include "General.h"
|
||||
#include "Timecycle.h"
|
||||
#include "HandlingMgr.h"
|
||||
#include "CarAI.h"
|
||||
#include "CarCtrl.h"
|
||||
#include "RwHelper.h"
|
||||
#include "ModelIndices.h"
|
||||
@ -152,6 +153,7 @@ CBoat::ProcessControl(void)
|
||||
case STATUS_SIMPLE:
|
||||
m_bIsAnchored = false;
|
||||
m_fOrientation = INVALID_ORIENTATION;
|
||||
CCarAI::UpdateCarAI(this);
|
||||
CPhysical::ProcessControl();
|
||||
bBoatInWater = true;
|
||||
bPropellerInWater = true;
|
||||
@ -160,7 +162,8 @@ CBoat::ProcessControl(void)
|
||||
case STATUS_PHYSICS:
|
||||
m_bIsAnchored = false;
|
||||
m_fOrientation = INVALID_ORIENTATION;
|
||||
CCarCtrl::SteerAIBoatWithPhysics(this);
|
||||
CCarAI::UpdateCarAI(this);
|
||||
CCarCtrl::SteerAICarWithPhysics(this);
|
||||
break;
|
||||
case STATUS_ABANDONED:
|
||||
case STATUS_WRECKED:
|
||||
@ -398,9 +401,9 @@ CBoat::ProcessControl(void)
|
||||
}
|
||||
|
||||
// Slow down or push down boat as it approaches the world limits
|
||||
m_vecMoveSpeed.x = Min(m_vecMoveSpeed.x, -(GetPosition().x - 1900.0f)*0.01f); // east
|
||||
m_vecMoveSpeed.x = Max(m_vecMoveSpeed.x, -(GetPosition().x - -1515.0f)*0.01f); // west
|
||||
m_vecMoveSpeed.y = Min(m_vecMoveSpeed.y, -(GetPosition().y - 600.0f)*0.01f); // north
|
||||
m_vecMoveSpeed.x = Min(m_vecMoveSpeed.x, -(GetPosition().x - 1500.0f)*0.01f); // east
|
||||
m_vecMoveSpeed.x = Max(m_vecMoveSpeed.x, -(GetPosition().x - -2300.0f)*0.01f); // west
|
||||
m_vecMoveSpeed.y = Min(m_vecMoveSpeed.y, -(GetPosition().y - 1900.0f)*0.01f); // north
|
||||
m_vecMoveSpeed.y = Max(m_vecMoveSpeed.y, -(GetPosition().y - -1900.0f)*0.01f); // south
|
||||
|
||||
if(!onLand && bBoatInWater)
|
||||
|
@ -100,6 +100,7 @@ CVehicle::CVehicle(uint8 CreatedBy)
|
||||
m_bSirenOrAlarm = 0;
|
||||
m_nCarHornTimer = 0;
|
||||
m_nCarHornPattern = 0;
|
||||
bPartOfConvoy = false;
|
||||
bCreatedAsPoliceVehicle = false;
|
||||
bParking = false;
|
||||
m_nAlarmState = 0;
|
||||
@ -697,51 +698,57 @@ void
|
||||
CVehicle::DoFixedMachineGuns(void)
|
||||
{
|
||||
if(CPad::GetPad(0)->GetCarGunFired() && !bGunSwitchedOff){
|
||||
if(CTimer::GetTimeInMilliseconds() > m_nGunFiringTime + 150){
|
||||
CVector source, target;
|
||||
float dx, dy, len;
|
||||
|
||||
dx = GetForward().x;
|
||||
dy = GetForward().y;
|
||||
len = Sqrt(SQR(dx) + SQR(dy));
|
||||
if(len < 0.1f) len = 0.1f;
|
||||
dx /= len;
|
||||
dy /= len;
|
||||
|
||||
m_nGunFiringTime = CTimer::GetTimeInMilliseconds();
|
||||
|
||||
source = GetMatrix() * CVector(2.0f, 2.5f, 1.0f);
|
||||
target = source + CVector(dx, dy, 0.0f)*60.0f;
|
||||
target += CVector(
|
||||
((CGeneral::GetRandomNumber()&0xFF)-128) * 0.015f,
|
||||
((CGeneral::GetRandomNumber()&0xFF)-128) * 0.015f,
|
||||
((CGeneral::GetRandomNumber()&0xFF)-128) * 0.02f);
|
||||
CWeapon::DoTankDoomAiming(this, pDriver, &source, &target);
|
||||
FireOneInstantHitRound(&source, &target, 15);
|
||||
|
||||
source = GetMatrix() * CVector(-2.0f, 2.5f, 1.0f);
|
||||
target = source + CVector(dx, dy, 0.0f)*60.0f;
|
||||
target += CVector(
|
||||
((CGeneral::GetRandomNumber()&0xFF)-128) * 0.015f,
|
||||
((CGeneral::GetRandomNumber()&0xFF)-128) * 0.015f,
|
||||
((CGeneral::GetRandomNumber()&0xFF)-128) * 0.02f);
|
||||
CWeapon::DoTankDoomAiming(this, pDriver, &source, &target);
|
||||
FireOneInstantHitRound(&source, &target, 15);
|
||||
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_SHOT_FIRED, 0.0f);
|
||||
|
||||
m_nAmmoInClip--;
|
||||
if(m_nAmmoInClip == 0){
|
||||
m_nAmmoInClip = 20;
|
||||
m_nGunFiringTime = CTimer::GetTimeInMilliseconds() + 1400;
|
||||
}
|
||||
}
|
||||
FireFixedMachineGuns();
|
||||
}else{
|
||||
if(CTimer::GetTimeInMilliseconds() > m_nGunFiringTime + 1400)
|
||||
m_nAmmoInClip = 20;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CVehicle::FireFixedMachineGuns(void)
|
||||
{
|
||||
if (CTimer::GetTimeInMilliseconds() <= m_nGunFiringTime + 150)
|
||||
return;
|
||||
CVector source, target;
|
||||
float dx, dy, len;
|
||||
|
||||
dx = GetForward().x;
|
||||
dy = GetForward().y;
|
||||
len = Sqrt(SQR(dx) + SQR(dy));
|
||||
if (len < 0.1f) len = 0.1f;
|
||||
dx /= len;
|
||||
dy /= len;
|
||||
|
||||
m_nGunFiringTime = CTimer::GetTimeInMilliseconds();
|
||||
|
||||
source = GetMatrix() * CVector(2.0f, 2.5f, 1.0f);
|
||||
target = source + CVector(dx, dy, 0.0f) * 60.0f;
|
||||
target += CVector(
|
||||
((CGeneral::GetRandomNumber() & 0xFF) - 128) * 0.015f,
|
||||
((CGeneral::GetRandomNumber() & 0xFF) - 128) * 0.015f,
|
||||
((CGeneral::GetRandomNumber() & 0xFF) - 128) * 0.02f);
|
||||
CWeapon::DoTankDoomAiming(this, pDriver, &source, &target);
|
||||
FireOneInstantHitRound(&source, &target, 15);
|
||||
|
||||
source = GetMatrix() * CVector(-2.0f, 2.5f, 1.0f);
|
||||
target = source + CVector(dx, dy, 0.0f) * 60.0f;
|
||||
target += CVector(
|
||||
((CGeneral::GetRandomNumber() & 0xFF) - 128) * 0.015f,
|
||||
((CGeneral::GetRandomNumber() & 0xFF) - 128) * 0.015f,
|
||||
((CGeneral::GetRandomNumber() & 0xFF) - 128) * 0.02f);
|
||||
CWeapon::DoTankDoomAiming(this, pDriver, &source, &target);
|
||||
FireOneInstantHitRound(&source, &target, 15);
|
||||
|
||||
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_SHOT_FIRED, 0.0f);
|
||||
|
||||
m_nAmmoInClip--;
|
||||
if (m_nAmmoInClip == 0) {
|
||||
m_nAmmoInClip = 20;
|
||||
m_nGunFiringTime = CTimer::GetTimeInMilliseconds() + 1400;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CVehicle::ExtinguishCarFire(void)
|
||||
{
|
||||
@ -1034,7 +1041,7 @@ CVehicle::SetUpDriver(void)
|
||||
if(VehicleCreatedBy != RANDOM_VEHICLE)
|
||||
return nil;
|
||||
|
||||
pDriver = CPopulation::AddPedInCar(this);
|
||||
pDriver = CPopulation::AddPedInCar(this, false);
|
||||
pDriver->m_pMyVehicle = this;
|
||||
pDriver->m_pMyVehicle->RegisterReference((CEntity**)&pDriver->m_pMyVehicle);
|
||||
pDriver->bInVehicle = true;
|
||||
@ -1050,7 +1057,7 @@ CVehicle::SetupPassenger(int n)
|
||||
if(pPassengers[n])
|
||||
return pPassengers[n];
|
||||
|
||||
pPassengers[n] = CPopulation::AddPedInCar(this);
|
||||
pPassengers[n] = CPopulation::AddPedInCar(this, true);
|
||||
pPassengers[n]->m_pMyVehicle = this;
|
||||
pPassengers[n]->m_pMyVehicle->RegisterReference((CEntity**)&pPassengers[n]->m_pMyVehicle);
|
||||
pPassengers[n]->bInVehicle = true;
|
||||
|
@ -182,6 +182,7 @@ public:
|
||||
uint8 bIsCarParkVehicle : 1; // Car has been created using the special CAR_PARK script command
|
||||
uint8 bHasAlreadyBeenRecorded : 1; // Used for replays
|
||||
|
||||
uint8 bPartOfConvoy : 1;
|
||||
uint8 bCreatedAsPoliceVehicle : 1;// True if this guy was created as a police vehicle (enforcer, policecar, miamivice car etc)
|
||||
uint8 bParking : 1;
|
||||
|
||||
@ -287,6 +288,7 @@ public:
|
||||
bool ShufflePassengersToMakeSpace(void);
|
||||
void InflictDamage(CEntity *damagedBy, eWeaponType weaponType, float damage);
|
||||
void DoFixedMachineGuns(void);
|
||||
void FireFixedMachineGuns(void);
|
||||
|
||||
|
||||
bool IsAlarmOn(void) { return m_nAlarmState != 0 && m_nAlarmState != -1; }
|
||||
|
Reference in New Issue
Block a user