@@ -90,61 +90,95 @@ const SubsystemRowInterface: React.FC<SubsystemRowProps> = ({ robot, driver, seq
9090 return (
9191 < >
9292 < Stack justifyContent = { "space-between" } alignItems = { "center" } gap = { "1rem" } >
93- < Stack direction = "row" gap = { 8 } >
94- < Label size = "sm" >
95- { driver instanceof WheelDriver ? "Drive" : ( driver . info ?. name ?? "UnnamedMotor" ) }
96- </ Label >
97- < StatefulSlider
98- label = "Max Velocity"
99- min = { 0.1 }
100- max = { driverSwitch ( driver , 80 , 40 , 80 ) as number }
101- defaultValue = { velocity }
102- // TODO:
103- // format={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }}
104- onChange = { velocity => {
105- setVelocity ( velocity as number )
106- onChange ( velocity as number , force , unstickForce )
107- } }
108- step = { 0.01 }
109- />
110- { PreferencesSystem . getGlobalPreference ( "SubsystemGravity" ) ||
111- ( driver instanceof WheelDriver && (
93+ { driver instanceof WheelDriver ? (
94+ // Drivetrain (wheel) sliders stacked vertically
95+ < Stack direction = "column" gap = { 2 } sx = { { minWidth : "260px" } } >
96+ < Label size = "sm" > Drive</ Label >
97+ < StatefulSlider
98+ label = "Max Velocity"
99+ min = { 0.1 }
100+ max = { driverSwitch ( driver , 80 , 40 , 80 ) as number }
101+ defaultValue = { velocity }
102+ onChange = { velocity => {
103+ setVelocity ( velocity as number )
104+ onChange ( velocity as number , force , unstickForce )
105+ } }
106+ step = { 0.01 }
107+ />
108+ < StatefulSlider
109+ label = { driverSwitch ( driver , "Max Force" , "Max Torque" , "Max Acceleration" ) as string }
110+ min = { driverSwitch ( driver , 100 , 20 , 0.1 ) as number }
111+ max = { driverSwitch ( driver , 800 , 150 , 15 ) as number }
112+ defaultValue = { force }
113+ onChange = { force => {
114+ setForce ( force as number )
115+ onChange ( velocity , force as number , unstickForce )
116+ } }
117+ step = { 0.01 }
118+ />
119+ < StatefulSlider
120+ min = { 0 }
121+ max = { 15000 }
122+ defaultValue = { unstickForce }
123+ label = "Unstick Force"
124+ onChange = { ( value : number | number [ ] ) => {
125+ setUnstickForce ( value as number )
126+ onChange ( velocity , force , value as number )
127+ } }
128+ step = { 100 }
129+ />
130+ </ Stack >
131+ ) : (
132+ // Other subsystems keep horizontal layout
133+ < Stack direction = "row" gap = { 8 } >
134+ < Label size = "sm" > { driver . info ?. name ?? "UnnamedMotor" } </ Label >
135+ < StatefulSlider
136+ label = "Max Velocity"
137+ min = { 0.1 }
138+ max = { driverSwitch ( driver , 80 , 40 , 80 ) as number }
139+ defaultValue = { velocity }
140+ onChange = { velocity => {
141+ setVelocity ( velocity as number )
142+ onChange ( velocity as number , force , unstickForce )
143+ } }
144+ step = { 0.01 }
145+ />
146+ { PreferencesSystem . getGlobalPreference ( "SubsystemGravity" ) && (
112147 < StatefulSlider
113148 label = { driverSwitch ( driver , "Max Force" , "Max Torque" , "Max Acceleration" ) as string }
114149 min = { driverSwitch ( driver , 100 , 20 , 0.1 ) as number }
115150 max = { driverSwitch ( driver , 800 , 150 , 15 ) as number }
116151 defaultValue = { force }
117- // TODO:
118- // format={{ minimumFractionDigits: 2, maximumFractionDigits: 2 }}
119152 onChange = { force => {
120153 setForce ( force as number )
121154 onChange ( velocity , force as number , unstickForce )
122155 } }
123156 step = { 0.01 }
124157 />
125- ) ) }
126- { sequentialBehavior && (
127- < Checkbox
128- label = "Invert Motor"
129- checked = { sequentialBehavior . inverted }
130- onClick = { checked => {
131- sequentialBehavior . inverted = checked
132- saveBehaviors ?.( )
158+ ) }
159+ { sequentialBehavior && (
160+ < Checkbox
161+ label = "Invert Motor"
162+ checked = { sequentialBehavior . inverted }
163+ onClick = { checked => {
164+ sequentialBehavior . inverted = checked
165+ saveBehaviors ?.( )
166+ } }
167+ />
168+ ) }
169+ < StatefulSlider
170+ min = { 0 }
171+ max = { 15000 }
172+ defaultValue = { unstickForce }
173+ label = "Unstick Force"
174+ onChange = { ( value : number | number [ ] ) => {
175+ setUnstickForce ( value as number )
176+ onChange ( velocity , force , value as number )
133177 } }
178+ step = { 100 }
134179 />
135- ) }
136- < StatefulSlider
137- min = { 0 }
138- max = { 15000 }
139- defaultValue = { unstickForce }
140- label = "Unstick Force"
141- onChange = { ( value : number | number [ ] ) => {
142- setUnstickForce ( value as number )
143- onChange ( velocity , force , value as number )
144- } }
145- step = { 100 }
146- />
147- </ Stack >
180+ </ Stack >
181+ ) }
148182 </ Stack >
149183 < Divider />
150184 </ >
0 commit comments