Rise
The Vieneo Province
TurnByTurn.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "d3d9.h"
4 #include "../Bus.h"
5 #include "../Networking.h"
6 
7 class TurnByTurn
8 {
9  // Change constants under this line to play around with instructions
10  // max distance the waypoint needs to be from the vehicle to count as "reached"
11  const float cReachedWaypointThreshold = 0.005f; // 10 meters
12  // distance traveled between voice cues
13  const float cDistanceBetweenCues = 0.02f; // 40 meters
14  // distance to check ahead for direction changes
15  const float cDistanceToCheckAhead = 0.8f;
16  // trigger a voice cue if direction change is bigger then this (degrees)
17  const float cDirectionChangeThreshold = 30.0f;
18  // distance to to wait after the start of the heading change before we start looking forward again
19  const float cWaitDistanceAfterHeadingChangeForNextCheck = -0.006f; // 20 meters after 0
20  // Change constants above this line to play around with instructions
21 
22  const float sectorSize = 682.666666667f;
23  const float mapStartTcpU = 519.0f;
24  const float mapStartTcpV = 1101.0f;
25 
26  Bus* bus = nullptr;
27  Logger* logger = nullptr;
28  Networking* networking = nullptr;
29  LPDIRECT3DVERTEXBUFFER9 m_avRouteMap = nullptr; // For turn-by-turn navigation
30  D3DXVECTOR2 vehiclePos;
31  D3DXVECTOR2 lastVehiclePos { 0.0f , 0.0f };
32  float distanceTraveled = 0.0f;
33  float mapMagnifier = 0.0f;
34  float elapsedCounter = 0.0f;
41  bool nextNodeUpdateSent = false;
45  int headingState = 0;
46 
48  size_t activeWaypointIndex = 0;
49  size_t nextWaypointIndex = 0;
50  size_t lineCount = 0;
51 
53  {
54  TYPE_APPROACHING_NEXT_NODE = 0, // so 1 km before at 120, 500 meters before at 60
59  };
60 
61  enum Direction
62  {
63  // direction enumeration (like 0 is straight, 1 is bear left, 2 is turn left, 3 is bear right, 4 is turn right, 5 is u-turn) ...
64  STRAIGHT = 0,
65  BEAR_LEFT = 1,
66  TURN_LEFT = 2,
69  U_TURN = 5
70  };
71 
72  enum State
73  {
77  };
78 
79  D3DXVECTOR2 convertWorldPositionToMapPosition(const D3DXVECTOR2 &pos);
80  void sendUpdateToServer(int pEdgeId, float pDistance, size_t pDirection, size_t pType);
81  float angleBetweenPositionsDeg(const D3DXVECTOR2& vectorA, const D3DXVECTOR2& vectorB);
82  float distanceBetweenPositions(const D3DXVECTOR2& vectorA, const D3DXVECTOR2& vectorB);
83  float convertDistanceToMeters(float dist);
84  float vectorToDegrees(const D3DXVECTOR2& vec);
85  float getHeadingChange(float targetHeading, float currentHeading);
86  float customModulo(float a, float n);
87  void checkForCue();
88  void updateHeadingState();
89 public:
90  TurnByTurn(Bus* pBus, Logger* pLoggger, Networking* pNetworking);
91  ~TurnByTurn();
92  void Update(bool pIsGrndVehicle, float pElasedTime);
93  void Draw(IDirect3DDevice9* pd3dDevice);
94  void UpdateVB(IDirect3DDevice9* pd3dDevice);
95  void CreateVB(IDirect3DDevice9* pd3dDevice);
96  void LookAhead();
97  void ReleaseResources();
98 };
99 
size_t closestWaypointIndex
Definition: TurnByTurn.h:47
float getHeadingChange(float targetHeading, float currentHeading)
Definition: TurnByTurn.cpp:350
D3DXVECTOR2 vehiclePos
Definition: TurnByTurn.h:30
const float mapStartTcpU
Definition: TurnByTurn.h:23
const float cDistanceBetweenCues
Definition: TurnByTurn.h:13
float angleBetweenPositionsDeg(const D3DXVECTOR2 &vectorA, const D3DXVECTOR2 &vectorB)
Definition: TurnByTurn.cpp:320
int edgeIdAfterFirstHeadingChange
Definition: TurnByTurn.h:40
size_t nextWaypointIndex
Definition: TurnByTurn.h:49
size_t lineCount
Definition: TurnByTurn.h:50
bool nextNodeUpdateSent
Definition: TurnByTurn.h:41
Definition: Logger.h:9
void ReleaseResources()
Definition: TurnByTurn.cpp:227
size_t firstHeadingChangeDirection
Definition: TurnByTurn.h:39
float customModulo(float a, float n)
Definition: TurnByTurn.cpp:358
int headingChangeEndWaypointIndex
Definition: TurnByTurn.h:44
void Draw(IDirect3DDevice9 *pd3dDevice)
Definition: TurnByTurn.cpp:121
float distanceTraveled
Definition: TurnByTurn.h:32
float distanceBetweenPositions(const D3DXVECTOR2 &vectorA, const D3DXVECTOR2 &vectorB)
Definition: TurnByTurn.cpp:339
float approachingNodeLastDistanceSent
Definition: TurnByTurn.h:42
void sendUpdateToServer(int pEdgeId, float pDistance, size_t pDirection, size_t pType)
Definition: TurnByTurn.cpp:232
const float cDirectionChangeThreshold
Definition: TurnByTurn.h:17
int headingState
Definition: TurnByTurn.h:45
Networking * networking
Definition: TurnByTurn.h:28
D3DXVECTOR2 lastVehiclePos
Definition: TurnByTurn.h:31
void updateHeadingState()
Definition: TurnByTurn.cpp:390
Bus * bus
Definition: TurnByTurn.h:26
Definition: Bus.h:16
const float cDistanceToCheckAhead
Definition: TurnByTurn.h:15
float mapMagnifier
Definition: TurnByTurn.h:33
float distanceUntilAfterFirstHeadingChange
Definition: TurnByTurn.h:37
D3DXVECTOR2 convertWorldPositionToMapPosition(const D3DXVECTOR2 &pos)
Definition: TurnByTurn.cpp:204
const float cReachedWaypointThreshold
Definition: TurnByTurn.h:11
void checkForCue()
Definition: TurnByTurn.cpp:362
void LookAhead()
Definition: TurnByTurn.cpp:247
size_t activeWaypointIndex
Definition: TurnByTurn.h:48
const float sectorSize
Definition: TurnByTurn.h:22
float convertDistanceToMeters(float dist)
Definition: TurnByTurn.cpp:344
void UpdateVB(IDirect3DDevice9 *pd3dDevice)
Definition: TurnByTurn.cpp:165
float distanceTraveledAtLastCue
Definition: TurnByTurn.h:35
int headingChangeStartWaypointIndex
Definition: TurnByTurn.h:43
float vectorToDegrees(const D3DXVECTOR2 &vec)
Definition: TurnByTurn.cpp:327
TurnByTurn(Bus *pBus, Logger *pLoggger, Networking *pNetworking)
Definition: TurnByTurn.cpp:7
float firstHeadingChangeDegrees
Definition: TurnByTurn.h:38
LPDIRECT3DVERTEXBUFFER9 m_avRouteMap
Definition: TurnByTurn.h:29
const float cWaitDistanceAfterHeadingChangeForNextCheck
Definition: TurnByTurn.h:19
void CreateVB(IDirect3DDevice9 *pd3dDevice)
Definition: TurnByTurn.cpp:151
float distanceUntilFirstHeadingChange
Definition: TurnByTurn.h:36
void Update(bool pIsGrndVehicle, float pElasedTime)
Definition: TurnByTurn.cpp:18
const float mapStartTcpV
Definition: TurnByTurn.h:24
Logger * logger
Definition: TurnByTurn.h:27
float elapsedCounter
Definition: TurnByTurn.h:34