Clean up user inputs for driving
This commit is contained in:
32
script.js
32
script.js
@ -55,7 +55,7 @@ class SwerveDrive {
|
||||
);
|
||||
}
|
||||
|
||||
drive(velocityX, velocityY, turnSpeed, maxSpeed) {
|
||||
drive(velocityX, velocityY, turnSpeed, maxModuleSpeed) {
|
||||
// Take in a requested speeds and update every module
|
||||
this.modules.forEach(module =>
|
||||
module.calculateState(velocityX, velocityY, turnSpeed)
|
||||
@ -63,8 +63,8 @@ class SwerveDrive {
|
||||
|
||||
// If any speeds exceed the max speed, normalize down so we don't effect movement direction
|
||||
const maxCalculated = Math.max(...this.modules.map(m => m.speed), 0);
|
||||
if (maxCalculated > maxSpeed) {
|
||||
const scale = maxSpeed / maxCalculated;
|
||||
if (maxCalculated > maxModuleSpeed) {
|
||||
const scale = maxModuleSpeed / maxCalculated;
|
||||
this.modules.forEach(module => {
|
||||
module.velocity.x *= scale;
|
||||
module.velocity.y *= scale;
|
||||
@ -169,19 +169,33 @@ const preset8WheelBtn = document.getElementById('preset-8wheel');
|
||||
|
||||
// Add event listeners for drive controls
|
||||
vxSlider.addEventListener('input', (e) => {
|
||||
vxOutput.textContent = parseFloat(e.target.value).toFixed(1);
|
||||
vxOutput.textContent = parseFloat(e.target.value);
|
||||
});
|
||||
vxOutput.textContent = parseFloat(vxSlider.value);
|
||||
|
||||
vySlider.addEventListener('input', (e) => {
|
||||
vyOutput.textContent = parseFloat(e.target.value).toFixed(1);
|
||||
vyOutput.textContent = parseFloat(e.target.value);
|
||||
});
|
||||
vyOutput.textContent = parseFloat(vySlider.value);
|
||||
|
||||
omegaSlider.addEventListener('input', (e) => {
|
||||
omegaOutput.textContent = parseFloat(e.target.value).toFixed(1);
|
||||
omegaOutput.textContent = parseFloat(e.target.value);
|
||||
});
|
||||
omegaOutput.textContent = parseFloat(omegaSlider.value);
|
||||
|
||||
maxSpeedSlider.addEventListener('input', (e) => {
|
||||
maxSpeedOutput.textContent = parseFloat(e.target.value).toFixed(1);
|
||||
maxSpeedOutput.textContent = parseFloat(e.target.value);
|
||||
});
|
||||
maxSpeedOutput.textContent = parseFloat(maxSpeedSlider.value);
|
||||
|
||||
resetBtn.addEventListener('click', (e) => {
|
||||
vxSlider.value = 0;
|
||||
vySlider.value = 0;
|
||||
omegaSlider.value = 0;
|
||||
|
||||
vxOutput.textContent = parseFloat(vxSlider.value);
|
||||
vyOutput.textContent = parseFloat(vySlider.value);
|
||||
omegaOutput.textContent = parseFloat(omegaSlider.value);
|
||||
});
|
||||
|
||||
|
||||
@ -338,7 +352,7 @@ function animate() {
|
||||
|
||||
// Update speeds based on sliders
|
||||
xSpeed = parseFloat(vxSlider.value);
|
||||
ySpeed = parseFloat(vySlider.value);
|
||||
ySpeed = -parseFloat(vySlider.value);
|
||||
turnSpeed = parseFloat(omegaSlider.value);
|
||||
|
||||
// Animate the grid with robot movement
|
||||
@ -360,7 +374,7 @@ function animate() {
|
||||
drawGrid(ctx, canvas.width * 2, gridSquareSize, xGridOffset, yGridOffset, robotRotation);
|
||||
drawRobot(ctx, robot);
|
||||
|
||||
robot.drive(xSpeed, ySpeed, turnSpeed, 500);
|
||||
robot.drive(xSpeed, ySpeed, turnSpeed, parseFloat(maxSpeedSlider.value));
|
||||
|
||||
// Do it all over again
|
||||
ctx.restore();
|
||||
|
||||
Reference in New Issue
Block a user