2019-07-17 11:19:20 +00:00
|
|
|
#include "common.h"
|
2020-04-17 13:31:11 +00:00
|
|
|
|
2020-01-31 10:23:15 +00:00
|
|
|
#include "Automobile.h"
|
|
|
|
#include "CarCtrl.h"
|
|
|
|
#include "Camera.h"
|
2019-07-17 11:19:20 +00:00
|
|
|
#include "Remote.h"
|
2020-01-31 10:23:15 +00:00
|
|
|
#include "Timer.h"
|
|
|
|
#include "World.h"
|
|
|
|
#include "PlayerInfo.h"
|
|
|
|
#include "Vehicle.h"
|
2019-07-17 11:19:20 +00:00
|
|
|
|
2020-01-31 10:23:15 +00:00
|
|
|
void
|
|
|
|
CRemote::GivePlayerRemoteControlledCar(float x, float y, float z, float rot, uint16 model)
|
|
|
|
{
|
|
|
|
CAutomobile *car = new CAutomobile(model, MISSION_VEHICLE);
|
|
|
|
bool found;
|
|
|
|
|
|
|
|
z = car->GetDistanceFromCentreOfMassToBaseOfModel() + CWorld::FindGroundZFor3DCoord(x, y, z + 2.0f, &found);
|
|
|
|
|
|
|
|
car->GetMatrix().SetRotateZOnly(rot);
|
2020-04-30 10:48:01 +00:00
|
|
|
car->SetPosition(x, y, z);
|
2020-04-30 13:45:45 +00:00
|
|
|
car->SetStatus(STATUS_PLAYER_REMOTE);
|
2020-01-31 10:23:15 +00:00
|
|
|
car->bIsLocked = true;
|
|
|
|
|
|
|
|
CCarCtrl::JoinCarWithRoadSystem(car);
|
|
|
|
car->AutoPilot.m_nCarMission = MISSION_NONE;
|
|
|
|
car->AutoPilot.m_nTempAction = TEMPACT_NONE;
|
|
|
|
car->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS;
|
|
|
|
car->AutoPilot.m_nCruiseSpeed = car->AutoPilot.m_fMaxTrafficSpeed = 9.0f;
|
|
|
|
car->AutoPilot.m_nNextLane = car->AutoPilot.m_nCurrentLane = 0;
|
|
|
|
car->bEngineOn = true;
|
|
|
|
CWorld::Add(car);
|
|
|
|
if (FindPlayerVehicle() != nil)
|
2020-04-30 13:45:45 +00:00
|
|
|
FindPlayerVehicle()->SetStatus(STATUS_PLAYER_DISABLED);
|
2020-01-31 10:23:15 +00:00
|
|
|
|
|
|
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = car;
|
|
|
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->RegisterReference((CEntity**)&CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle);
|
2020-08-24 19:52:07 +00:00
|
|
|
if (car->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE || car->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI) {
|
|
|
|
TheCamera.TakeControl(car, CCam::MODE_CAM_ON_A_STRING, INTERPOLATION, CAMCONTROL_SCRIPT);
|
|
|
|
TheCamera.SetZoomValueCamStringScript(0);
|
|
|
|
} else
|
|
|
|
TheCamera.TakeControl(car, CCam::MODE_BEHINDCAR, INTERPOLATION, CAMCONTROL_SCRIPT);
|
2020-01-31 10:23:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2020-08-24 20:01:51 +00:00
|
|
|
CRemote::TakeRemoteControlledCarFromPlayer(bool blowUp)
|
2020-01-31 10:23:15 +00:00
|
|
|
{
|
2020-08-24 19:52:07 +00:00
|
|
|
if (CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->VehicleCreatedBy == MISSION_VEHICLE) {
|
|
|
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->VehicleCreatedBy = RANDOM_VEHICLE;
|
|
|
|
CCarCtrl::NumMissionCars--;
|
|
|
|
CCarCtrl::NumRandomCars++;
|
|
|
|
}
|
2020-01-31 10:23:15 +00:00
|
|
|
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->bIsLocked = false;
|
|
|
|
CWorld::Players[CWorld::PlayerInFocus].m_nTimeLostRemoteCar = CTimer::GetTimeInMilliseconds();
|
|
|
|
CWorld::Players[CWorld::PlayerInFocus].m_bInRemoteMode = true;
|
2020-08-24 20:01:51 +00:00
|
|
|
CWorld::Players[CWorld::PlayerInFocus].field_D5 = blowUp;
|
2020-08-24 19:52:07 +00:00
|
|
|
CWorld::Players[CWorld::PlayerInFocus].field_D6 = true;
|
2020-01-31 10:23:15 +00:00
|
|
|
}
|