-
Notifications
You must be signed in to change notification settings - Fork 0
/
vehicle.cpp
79 lines (64 loc) · 2.1 KB
/
vehicle.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "vehicle.h"
#include "road.h"
#include "constants.h"
double Vehicle::GetCurrentSpeed() {
return currentSpeed;
}
void Vehicle::SetDesiredSpeed(double mph) {
desiredSpeed = mph;
}
void Vehicle::SetCurrentSpeed(double speed) {
if (currentSpeed <= speed) {
if (speed > desiredSpeed) {
currentSpeed = desiredSpeed;
} else {
currentSpeed = speed;
}
} else {
if (speed < desiredSpeed) {
currentSpeed = desiredSpeed;
} else {
currentSpeed = speed;
}
}
}
void Vehicle::UpdateSpeed(int seconds) {
if (currentSpeed > desiredSpeed) {
Decelerate(seconds);
} else if (currentSpeed < desiredSpeed) {
Accelerate(seconds);
}
}
void Vehicle::Accelerate(int secondsDelta) {};
void Vehicle::Decelerate(int secondsDelta) {};
Road* MetricGUI::CreateRoad(std::string name, double locx, double locy, double len, Heading hdg)
{
return new Road(name, locx / Constants::MetersToKm, locy / Constants::MetersToKm, len / Constants::MetersToKm, hdg);
}
double MetricGUI::GetSpeed(Vehicle &v){
return v.GetCurrentSpeed() * Constants::MpsToKph;
}
void MetricGUI::SetSpeedLimit(Vehicle &v, double speed){
v.SetDesiredSpeed(speed/Constants::MpsToKph);
}
Road* ImperialGUI::CreateRoad(std::string name, double locx, double locy, double len, Heading hdg){
return new Road(name, locx / Constants::MetersToMiles, locy / Constants::MetersToMiles, len / Constants::MetersToMiles, hdg);
}
double ImperialGUI::GetSpeed(Vehicle& v){
return v.GetCurrentSpeed() * Constants::MpsToMph;
}
void ImperialGUI::SetSpeedLimit(Vehicle& v, double speed){
v.SetDesiredSpeed(speed/Constants::MpsToMph);
}
StopSign* MetricGUI::CreateStopSign(double location){
return new StopSign(location);
}
StopSign* ImperialGUI::CreateStopSign(double location){
return new StopSign(location);
}
SpeedLimit* MetricGUI::CreateSpeedLimit(double speed, double location){
return new SpeedLimit(speed, location);
}
SpeedLimit* ImperialGUI::CreateSpeedLimit(double speed, double location){
return new SpeedLimit(speed, location);
}