re3/src/control/AutoPilot.h

138 lines
3.5 KiB
C
Raw Normal View History

#pragma once
2019-08-06 21:32:19 +00:00
#include "Timer.h"
class CVehicle;
2019-09-11 18:42:34 +00:00
struct CPathNode;
enum eCarMission : uint8
{
MISSION_NONE,
MISSION_CRUISE,
MISSION_RAMPLAYER_FARAWAY,
MISSION_RAMPLAYER_CLOSE,
MISSION_BLOCKPLAYER_FARAWAY,
MISSION_BLOCKPLAYER_CLOSE,
MISSION_BLOCKPLAYER_HANDBRAKESTOP,
MISSION_WAITFORDELETION,
MISSION_GOTOCOORDS,
MISSION_GOTOCOORDS_STRAIGHT,
MISSION_EMERGENCYVEHICLE_STOP,
MISSION_STOP_FOREVER,
MISSION_GOTOCOORDS_ACCURATE,
MISSION_GOTO_COORDS_STRAIGHT_ACCURATE,
MISSION_GOTOCOORDS_ASTHECROWSWIMS,
MISSION_RAMCAR_FARAWAY,
MISSION_RAMCAR_CLOSE,
MISSION_BLOCKCAR_FARAWAY,
MISSION_BLOCKCAR_CLOSE,
MISSION_BLOCKCAR_HANDBRAKESTOP,
MISSION_HELI_FLYTOCOORS,
MISSION_ATTACKPLAYER,
MISSION_PLANE_FLYTOCOORS,
MISSION_HELI_LAND,
MISSION_SLOWLY_DRIVE_TOWARDS_PLAYER_1,
MISSION_SLOWLY_DRIVE_TOWARDS_PLAYER_2,
MISSION_BLOCKPLAYER_FORWARDANDBACK
};
enum eCarTempAction : uint8
{
TEMPACT_NONE,
TEMPACT_WAIT,
TEMPACT_REVERSE,
TEMPACT_HANDBRAKETURNLEFT,
TEMPACT_HANDBRAKETURNRIGHT,
TEMPACT_HANDBRAKESTRAIGHT,
TEMPACT_TURNLEFT,
TEMPACT_TURNRIGHT,
TEMPACT_GOFORWARD,
TEMPACT_SWERVELEFT,
TEMPACT_SWERVERIGHT
};
enum eCarDrivingStyle : uint8
{
DRIVINGSTYLE_STOP_FOR_CARS,
DRIVINGSTYLE_SLOW_DOWN_FOR_CARS,
DRIVINGSTYLE_AVOID_CARS,
DRIVINGSTYLE_PLOUGH_THROUGH,
DRIVINGSTYLE_STOP_FOR_CARS_IGNORE_LIGHTS
};
class CAutoPilot {
public:
2019-09-02 16:04:09 +00:00
int32 m_nCurrentRouteNode;
int32 m_nNextRouteNode;
int32 m_nPrevRouteNode;
2019-08-06 21:32:19 +00:00
uint32 m_nTimeEnteredCurve;
2019-08-11 17:11:54 +00:00
uint32 m_nTimeToSpendOnCurrentCurve;
uint32 m_nCurrentPathNodeInfo;
uint32 m_nNextPathNodeInfo;
uint32 m_nPreviousPathNodeInfo;
2019-08-11 17:11:54 +00:00
uint32 m_nAntiReverseTimer;
2019-10-12 10:42:34 +00:00
uint32 m_nTimeToStartMission;
int8 m_nPreviousDirection;
2019-08-06 21:32:19 +00:00
int8 m_nCurrentDirection;
int8 m_nNextDirection;
int8 m_nCurrentLane;
2019-08-11 17:11:54 +00:00
int8 m_nNextLane;
eCarDrivingStyle m_nDrivingStyle;
eCarMission m_nCarMission;
2019-08-11 17:11:54 +00:00
eCarTempAction m_nTempAction;
uint32 m_nTimeTempAction;
float m_fMaxTrafficSpeed;
uint8 m_nCruiseSpeed;
uint8 m_nCruiseSpeedMultiplierType;
float m_fCruiseSpeedMultiplier;
2019-08-25 13:47:22 +00:00
uint8 m_bSlowedDownBecauseOfCars : 1;
2019-08-11 17:11:54 +00:00
uint8 m_bSlowedDownBecauseOfPeds : 1;
2019-09-02 16:04:09 +00:00
uint8 m_bStayInCurrentLevel : 1;
uint8 m_bStayInFastLane : 1;
2019-10-06 11:25:13 +00:00
uint8 m_bIgnorePathfinding : 1;
uint8 m_nSwitchDistance;
CVector m_vecDestinationCoors;
2019-09-11 18:42:34 +00:00
CPathNode *m_aPathFindNodesInfo[NUM_PATH_NODES_IN_AUTOPILOT];
int16 m_nPathFindNodesCount;
CVehicle *m_pTargetCar;
2019-07-09 21:49:44 +00:00
CAutoPilot(void) {
m_nPrevRouteNode = 0;
m_nNextRouteNode = m_nPrevRouteNode;
m_nCurrentRouteNode = m_nNextRouteNode;
2019-08-06 21:32:19 +00:00
m_nTimeEnteredCurve = 0;
2019-08-11 17:11:54 +00:00
m_nTimeToSpendOnCurrentCurve = 1000;
2019-07-09 21:49:44 +00:00
m_nPreviousPathNodeInfo = 0;
m_nNextPathNodeInfo = m_nPreviousPathNodeInfo;
m_nCurrentPathNodeInfo = m_nNextPathNodeInfo;
m_nNextDirection = 1;
2019-08-06 21:32:19 +00:00
m_nCurrentDirection = m_nNextDirection;
2019-08-11 17:11:54 +00:00
m_nCurrentLane = m_nNextLane = 0;
2019-07-09 21:49:44 +00:00
m_nDrivingStyle = DRIVINGSTYLE_STOP_FOR_CARS;
m_nCarMission = MISSION_NONE;
2019-08-11 17:11:54 +00:00
m_nTempAction = TEMPACT_NONE;
2019-07-09 21:49:44 +00:00
m_nCruiseSpeed = 10;
m_fMaxTrafficSpeed = 10.0f;
2019-08-11 17:11:54 +00:00
m_bSlowedDownBecauseOfPeds = false;
2019-08-25 13:47:22 +00:00
m_bSlowedDownBecauseOfCars = false;
2019-07-09 21:49:44 +00:00
m_nPathFindNodesCount = 0;
m_pTargetCar = 0;
m_nTimeToStartMission = CTimer::GetTimeInMilliseconds();
2019-08-11 17:11:54 +00:00
m_nAntiReverseTimer = m_nTimeToStartMission;
2019-09-02 16:04:09 +00:00
m_bStayInFastLane = false;
m_nCruiseSpeedMultiplierType = 0;
m_fCruiseSpeedMultiplier = 1.0f;
2019-07-09 21:49:44 +00:00
}
2019-08-11 17:11:54 +00:00
void ModifySpeed(float);
2019-09-11 18:42:34 +00:00
void RemoveOnePathNode();
2020-05-02 15:02:17 +00:00
#ifdef COMPATIBLE_SAVES
void Save(uint8*& buf);
void Load(uint8*& buf);
#endif
2020-05-09 17:21:13 +00:00
float GetCruiseSpeed(void) { return m_nCruiseSpeed * m_fCruiseSpeedMultiplier; }
};
2020-05-10 13:54:37 +00:00
VALIDATE_SIZE(CAutoPilot, 0x70);