-
Notifications
You must be signed in to change notification settings - Fork 1
/
Session.java
154 lines (143 loc) · 3.21 KB
/
Session.java
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/**
* Stores the main variables and session data. This class is in charge of all
* the visible "stuff". It knows what the treadmill is doing, what the
* statistics are, and so forth.
*
* @version 1.0
*/
public class Session {
private State state;
private int speed;
private int incline;
private User runner;
/**
* State of the treadmill.
*/
public enum State {
RUNNING, PAUSED, STOPPED;
}
/**
* Sets up the treadmill and puts it in a stopped state.
*
* @param runner the treadmill runner
*/
public Session(User runner) {
state = State.STOPPED;
speed = 0;
incline = 0;
this.runner = runner;
}
/**
* Updates the state of the simulation. Updates the values for all the
* getWhatever functions.
*
* @param timespan amount of time in s since you last called update().
* @return if the user is still on the treadmill
*/
public boolean update(double timespan) {
if (state != State.RUNNING) return true;
return runner.update(timespan, speed);
}
/**
* Sets a new speed for the treadmill.
*
* @param sp new speed in tenths of a mile per hour
*/
public void setSpeed(int sp) {
speed = sp;
}
/**
* Sets a new inclination for the treadmill.
*
* @param inc new inclination in percent
*/
public void setIncline(int inc) {
incline = inc;
runner.setIncline(inc);
}
/**
* Inclination of the treadmill.
*
* @return current inclination in percent
*/
public int getIncline() {
return incline;
}
/**
* True speed of the treadmill.
*
* @return current speed in mph
*/
public double getSpeed() {
if (state == State.RUNNING) {
return getSetSpeed();
} else {
return 0.0;
}
}
/**
* Speed treadmill is set at, whether it's running or not.
*
* @return current speed in mph
*/
public double getSetSpeed() {
return speed / 10.0;
}
/**
* Current state of the treadmill.
*
* @return state of the treadmill
*/
public State getState() {
return state;
}
/**
* Stops the treadmill. Forgets all of the session data including time
* elapsed, distance run, etc.
*/
public void stop() {
state = State.STOPPED;
runner.reset();
}
/**
* Starts the treadmill. If the treadmill is currently running or
* paused, this method has no effect.
*
* @param speed speed in tenths of a mile per hour
* @param incline inclination in percent
*/
public void start(int speed, int incline) {
if (state != State.STOPPED) return;
this.speed = speed;
this.incline = incline;
runner.setIncline(incline);
start();
}
/**
* Starts the treadmill. If the treadmill is currently running or
* paused, this method has no effect.
*/
public void start() {
if (state != State.STOPPED) return;
runner.reorient();
runner.recalculateHistory();
state = State.RUNNING;
}
/**
* Pauses the treadmill. All data are retained. If the treadmill is
* already paused or stopped, this method has no effect.
*/
public void pause() {
if (state != State.RUNNING) return;
state = State.PAUSED;
}
/**
* Resumes from a paused state. If the treadmill is already going, or
* has been stopped completely, this method does nothing.
*/
public void resume() {
if (state != State.PAUSED) return;
runner.reorient();
state = State.RUNNING;
}
}