@@ -4,13 +4,14 @@ import com.acmerobotics.roadrunner.geometry.Pose2d
4
4
import com.noahbres.meepmeep.MeepMeep
5
5
import com.noahbres.meepmeep.core.colorscheme.ColorScheme
6
6
import com.noahbres.meepmeep.core.entity.BotEntity
7
+ import com.noahbres.meepmeep.core.entity.EntityEventListener
7
8
import com.noahbres.meepmeep.core.exhaustive
8
- import com.noahbres.meepmeep.core.util.FieldUtil
9
9
import com.noahbres.meepmeep.roadrunner.Constraints
10
10
import com.noahbres.meepmeep.roadrunner.DriveShim
11
11
import com.noahbres.meepmeep.roadrunner.DriveTrainType
12
12
import com.noahbres.meepmeep.roadrunner.trajectorysequence.*
13
- import com.noahbres.meepmeep.roadrunner.ui.TrajectoryProgressSlider
13
+ import com.noahbres.meepmeep.roadrunner.ui.TrajectoryProgressSliderMaster
14
+ import kotlin.math.min
14
15
15
16
class RoadRunnerBotEntity (
16
17
meepMeep : MeepMeep ,
@@ -19,14 +20,15 @@ class RoadRunnerBotEntity(
19
20
width : Double , height : Double ,
20
21
pose : Pose2d ,
21
22
22
- private val colorScheme : ColorScheme ,
23
+ val colorScheme : ColorScheme ,
23
24
opacity : Double ,
24
25
25
- private var driveTrainType : DriveTrainType = DriveTrainType .MECANUM
26
- ) : BotEntity(meepMeep, width, height, pose, colorScheme, opacity) {
26
+ private var driveTrainType : DriveTrainType = DriveTrainType .MECANUM ,
27
+
28
+ var listenToSwitchThemeRequest : Boolean = false
29
+ ) : BotEntity(meepMeep, width, height, pose, colorScheme, opacity), EntityEventListener {
27
30
companion object {
28
31
const val SKIP_LOOPS = 2
29
- const val PROGRESS_SLIDER_HEIGHT = 20
30
32
}
31
33
32
34
override val tag = " RR_BOT_ENTITY"
@@ -39,7 +41,7 @@ class RoadRunnerBotEntity(
39
41
40
42
private var trajectorySequenceEntity: TrajectorySequenceEntity ? = null
41
43
42
- private var looping = true
44
+ var looping = true
43
45
private var running = false
44
46
45
47
private var trajectorySequenceElapsedTime = 0.0
@@ -52,23 +54,8 @@ class RoadRunnerBotEntity(
52
54
53
55
private var skippedLoops = 0
54
56
55
- private val progressSlider = TrajectoryProgressSlider (
56
- this ,
57
- FieldUtil .CANVAS_WIDTH .toInt(),
58
- PROGRESS_SLIDER_HEIGHT ,
59
- colorScheme.TRAJECTORY_SLIDER_FG ,
60
- colorScheme.TRAJECTORY_SLIDER_BG ,
61
- colorScheme.TRAJECTORY_TEXT_COLOR ,
62
- MeepMeep .FONT_CMU_BOLD
63
- )
64
-
65
- init {
66
- progressSlider.progress = 0.0
67
- meepMeep.sliderPanel.add(progressSlider)
68
- meepMeep.windowFrame.pack()
69
-
70
- meepMeep.windowFrame
71
- }
57
+ private var sliderMaster: TrajectoryProgressSliderMaster ? = null
58
+ private var sliderMasterIndex: Int? = null
72
59
73
60
override fun update (deltaTime : Long ) {
74
61
if (! running) return
@@ -106,19 +93,26 @@ class RoadRunnerBotEntity(
106
93
107
94
trajectorySequenceEntity!! .markerEntityList.forEach { if (trajectorySequenceElapsedTime >= it.time) it.passed() }
108
95
109
- progressSlider.progress = (trajectorySequenceElapsedTime / currentTrajectorySequence!! .duration)
96
+ sliderMaster?.reportProgress(sliderMasterIndex ? : - 1 , trajectorySequenceElapsedTime)
97
+
98
+ Unit
110
99
}
111
100
112
101
looping -> {
113
102
trajectorySequenceEntity!! .markerEntityList.forEach {
114
103
it.reset()
115
104
}
116
105
trajectorySequenceElapsedTime = 0.0
106
+
107
+ sliderMaster?.reportDone(sliderMasterIndex ? : - 1 )
117
108
}
118
109
119
110
else -> {
120
111
trajectorySequenceElapsedTime = 0.0
121
- currentTrajectorySequence = null
112
+ running = false
113
+ // currentTrajectorySequence = null
114
+
115
+ sliderMaster?.reportDone(sliderMasterIndex ? : - 1 )
122
116
}
123
117
}.exhaustive
124
118
}
@@ -128,28 +122,27 @@ class RoadRunnerBotEntity(
128
122
trajectorySequenceElapsedTime = 0.0
129
123
}
130
124
125
+ fun resume () {
126
+ running = true
127
+ }
128
+
131
129
fun pause () {
132
130
trajectoryPaused = true
133
131
}
134
132
135
- fun unPause () {
133
+ fun unpause () {
136
134
trajectoryPaused = false
137
135
}
138
136
139
- fun togglePause () {
140
- trajectoryPaused = ! trajectoryPaused
141
- }
142
-
143
- fun setTrajectoryProgress (progress : Double ) {
137
+ fun setTrajectoryProgressSeconds (seconds : Double ) {
144
138
if (currentTrajectorySequence != null )
145
- trajectorySequenceElapsedTime = progress * currentTrajectorySequence!! .duration
139
+ trajectorySequenceElapsedTime = min(seconds, currentTrajectorySequence!! .duration)
146
140
}
147
141
148
142
fun followTrajectorySequence (sequence : TrajectorySequence ) {
149
143
currentTrajectorySequence = sequence
150
144
151
145
trajectorySequenceEntity = TrajectorySequenceEntity (meepMeep, sequence, colorScheme)
152
- meepMeep.addEntity(trajectorySequenceEntity!! )
153
146
}
154
147
155
148
fun setConstraints (constraints : Constraints ) {
@@ -165,10 +158,22 @@ class RoadRunnerBotEntity(
165
158
}
166
159
167
160
override fun switchScheme (scheme : ColorScheme ) {
168
- super .switchScheme(scheme)
161
+ if (listenToSwitchThemeRequest)
162
+ super .switchScheme(scheme)
163
+ }
164
+
165
+ fun setTrajectoryProgressSliderMaster (master : TrajectoryProgressSliderMaster , index : Int ) {
166
+ sliderMaster = master
167
+ sliderMasterIndex = index
168
+ }
169
+
170
+ override fun onAddToEntityList () {
171
+ if (trajectorySequenceEntity != null )
172
+ meepMeep.requestToAddEntity(trajectorySequenceEntity!! )
173
+ }
169
174
170
- this .progressSlider.fg = scheme. TRAJECTORY_SLIDER_FG
171
- this .progressSlider.bg = scheme. TRAJECTORY_SLIDER_BG
172
- this .progressSlider.textColor = scheme. TRAJECTORY_TEXT_COLOR
175
+ override fun onRemoveFromEntityList () {
176
+ if (trajectorySequenceEntity != null )
177
+ meepMeep.requestToRemoveEntity(trajectorySequenceEntity !! )
173
178
}
174
179
}
0 commit comments