From ffc546ff6e4bda3386fa6878b1bdc2d1e329730c Mon Sep 17 00:00:00 2001 From: LucaHaverty Date: Tue, 18 Jun 2024 16:43:49 -0700 Subject: [PATCH] Control panel formatting, working input modifiers, elevator and arm behavior --- fission/src/mirabuf/MirabufSceneObject.ts | 2 +- .../modals/configuring/ChangeInputsModal.tsx | 22 ++--- fission/src/systems/input/InputSystem.ts | 64 ++++++++++----- .../behavior/ArcadeDriveBehavior.ts | 8 +- .../simulation/behavior/GenericArmBehavior.ts | 47 +++++------ .../behavior/GenericElevatorBehavior.ts | 28 +++++++ .../synthesis_brain/SynthesisBrain.ts | 81 +++++++------------ 7 files changed, 133 insertions(+), 119 deletions(-) create mode 100644 fission/src/systems/simulation/behavior/GenericElevatorBehavior.ts diff --git a/fission/src/mirabuf/MirabufSceneObject.ts b/fission/src/mirabuf/MirabufSceneObject.ts index da9b9faba6..cd92814216 100644 --- a/fission/src/mirabuf/MirabufSceneObject.ts +++ b/fission/src/mirabuf/MirabufSceneObject.ts @@ -12,7 +12,7 @@ import { LayerReserve } from "@/systems/physics/PhysicsSystem"; import Mechanism from "@/systems/physics/Mechanism"; import SynthesisBrain from "@/systems/simulation/synthesis_brain/SynthesisBrain"; -const DEBUG_BODIES = true; +const DEBUG_BODIES = false; interface RnDebugMeshes { colliderMesh: THREE.Mesh; diff --git a/fission/src/modals/configuring/ChangeInputsModal.tsx b/fission/src/modals/configuring/ChangeInputsModal.tsx index 38d5abdc9e..45a75e98b3 100644 --- a/fission/src/modals/configuring/ChangeInputsModal.tsx +++ b/fission/src/modals/configuring/ChangeInputsModal.tsx @@ -8,24 +8,24 @@ import InputSystem from "@/systems/input/InputSystem" // capitalize first letter const transformKeyName = (control: Input) => { - let suffix = "" + let prefix = "" if (control.modifiers) { - if (control.modifiers.meta) suffix += " + Meta" - if (control.modifiers.shift) suffix += " + Shift" - if (control.modifiers.ctrl) suffix += " + Ctrl" - if (control.modifiers.alt) suffix += " + Alt" + if (control.modifiers.meta) prefix += "Meta + " + if (control.modifiers.shift) prefix += "Shift + " + if (control.modifiers.ctrl) prefix += "Ctrl + " + if (control.modifiers.alt) prefix += "Alt + " } - return control.keybind[0].toUpperCase() + control.keybind.substring(1) + suffix + return prefix + control.keybind[0].toUpperCase() + control.keybind.substring(1) } const ChangeInputsModal: React.FC = ({ modalId }) => { const [loadedRobot, setLoadedRobot] = useState("") const [selectedInput, setSelectedInput] = useState("") const [chosenKey, setChosenKey] = useState("") - const [modifierState, setModifierState] = useState({}) + const [modifierState, setModifierState] = useState({ctrl: false, alt: false, shift: false, meta: false}) useEffect(() => { - setTimeout(() => setLoadedRobot("Dozer v9"), 2_000) + setTimeout(() => setLoadedRobot("Dozer v9"), 1) }) if (selectedInput && chosenKey) { @@ -34,7 +34,7 @@ const ChangeInputsModal: React.FC = ({ modalId }) => { selected.modifiers = modifierState setChosenKey("") setSelectedInput("") - setModifierState({}) + setModifierState({ctrl: false, alt: false, shift: false, meta: false}) } return ( @@ -58,7 +58,7 @@ const ChangeInputsModal: React.FC = ({ modalId }) => { {Object.values(InputSystem.robotInputs).map(c => ( = ({ modalId }) => { {Object.values(InputSystem.globalInputs).map(c => ( wheel.targetWheelSpeed = leftSpeed); -// this.rightWheels.forEach((wheel) => wheel.targetWheelSpeed = rightSpeed); -// } + rotateArm(rotationalVelocity: number) { + this._hingeDriver.targetVelocity = rotationalVelocity; + } -// public Update(_: number): void { -// this.driveSpeeds(InputSystem.getAxis("arcadeForward", "arcadeBackward")*this.driveSpeed, -// InputSystem.getAxis("arcadeRight", "arcadeLeft")*this.turnSpeed); -// } -// } + public Update(_: number): void { + this.rotateArm(InputSystem.getAxis("armPositive", "armNegative")*this._rotationalSpeed); + } +} -// export default ArcadeDriveBehavior; \ No newline at end of file +export default GenericArmBehavior; \ No newline at end of file diff --git a/fission/src/systems/simulation/behavior/GenericElevatorBehavior.ts b/fission/src/systems/simulation/behavior/GenericElevatorBehavior.ts new file mode 100644 index 0000000000..6ca4af3930 --- /dev/null +++ b/fission/src/systems/simulation/behavior/GenericElevatorBehavior.ts @@ -0,0 +1,28 @@ +import SliderDriver from "../driver/SliderDriver"; +import SliderStimulus from "../stimulus/SliderStimulus"; +import Behavior from "./Behavior"; +import InputSystem from "@/systems/input/InputSystem"; + +class GenericElevatorBehavior extends Behavior { + private _sliderDriver: SliderDriver; + + private _linearSpeed = 1; + + private _inverted: boolean; + + constructor(sliderDriver: SliderDriver, sliderStimulus: SliderStimulus, inverted: boolean) { + super([sliderDriver], [sliderStimulus]); + this._sliderDriver = sliderDriver; + this._inverted = inverted; + } + + moveElevator(positionDelta: number) { + this._sliderDriver.targetPosition += positionDelta * (this._inverted ? -1 : 1); + } + + public Update(deltaT: number): void { + this.moveElevator(InputSystem.getAxis("elevatorPositive", "elevatorNegative")*this._linearSpeed*deltaT); + } +} + +export default GenericElevatorBehavior; \ No newline at end of file diff --git a/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts b/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts index 7d4cc5c8f4..d06101d480 100644 --- a/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts +++ b/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts @@ -1,4 +1,4 @@ -import Mechanism, { MechanismConstraint } from "@/systems/physics/Mechanism"; +import Mechanism from "@/systems/physics/Mechanism"; import Brain from "../Brain"; import Behavior from "../behavior/Behavior"; import World from "@/systems/World"; @@ -6,19 +6,20 @@ import WheelDriver from "../driver/WheelDriver"; import WheelRotationStimulus from "../stimulus/WheelStimulus"; import ArcadeDriveBehavior from "../behavior/ArcadeDriveBehavior"; import { SimulationLayer } from "../SimulationSystem"; -import * as THREE from 'three'; -import { JoltMat44_ThreeMatrix4 } from "@/util/TypeConversions"; import Jolt from "@barclah/jolt-physics"; -import { JOLT_TYPES } from "@/util/loading/JoltAsyncLoader"; import JOLT from "@/util/loading/JoltSyncLoader"; +import HingeDriver from "../driver/HingeDriver"; +import HingeStimulus from "../stimulus/HingeStimulus"; +import GenericArmBehavior from "../behavior/GenericArmBehavior"; +import SliderDriver from "../driver/SliderDriver"; +import SliderStimulus from "../stimulus/SliderStimulus"; +import GenericElevatorBehavior from "../behavior/GenericElevatorBehavior"; class SynthesisBrain extends Brain { private _behaviors: Behavior[] = []; private _simLayer: SimulationLayer; - private _debugBodies: Map; - _leftWheelIndices: number[] = []; public constructor(mechanism: Mechanism) { @@ -26,60 +27,26 @@ class SynthesisBrain extends Brain { this._simLayer = World.SimulationSystem.GetSimulationLayer(mechanism)!; - this._debugBodies = new Map(); - if (!this._simLayer) { console.log("Simulation Layer is undefined"); return; } - console.log("config arcade drive"); this.configureArcadeDriveBehavior(); - - // const comMesh = World.SceneRenderer.CreateSphere(0.05); - // World.SceneRenderer.scene.add(comMesh); - - // (comMesh.material as THREE.Material).depthTest = false; - - // this._debugMeshes.push(comMesh); - - // console.log(mechanism.nodeToBody); - //this._debugBodies!.set(rnName, { colliderMesh: colliderMesh, comMesh: comMesh }); - //comMesh.position = new THREE.Vector3(0, 0, 0); - - this._mechanism.constraints.forEach((c) => { - if (!(c.constraint instanceof JOLT.TwoBodyConstraint)) - return; - - const comMesh = World.SceneRenderer.CreateSphere(0.05); - (comMesh.material as THREE.Material).depthTest = false; - - World.SceneRenderer.scene.add(comMesh); - - this._debugBodies.set(c.constraint as Jolt.TwoBodyConstraint, comMesh); - }); - console.log("Number of constraints: " + this._debugBodies.size); + this.configureArmBehaviors(); + this.configureElevatorBehaviors(); } public Enable(): void { } public Update(deltaT: number): void { this._behaviors.forEach((b) => b.Update(deltaT)); - - let i = 0; - this._debugBodies.forEach((value, key) => { - if (!(this._leftWheelIndices.includes(i))) { i++; return;} - - const transform = JoltMat44_ThreeMatrix4(key.GetConstraintToBody1Matrix()); - value!.position.setFromMatrixPosition(transform); - i++; - }); } + public Disable(): void { this._behaviors = []; } - configureArcadeDriveBehavior() { let wheelDrivers: WheelDriver[] = this._simLayer.drivers.filter((driver) => driver instanceof WheelDriver) as WheelDriver[]; let wheelStimuli: WheelRotationStimulus[] = this._simLayer.stimuli.filter((stimulus) => stimulus instanceof WheelRotationStimulus) as WheelRotationStimulus[]; @@ -107,23 +74,29 @@ class SynthesisBrain extends Brain { else { leftWheels.push(wheelDrivers[i]); leftStimuli.push(wheelStimuli[i]); - this._leftWheelIndices.push(i); - console.log(i); } } - - fixedConstraints.forEach((c) => { - //console.log(c.GetBody1().GetRotation().GetEulerAngles()); - }) - - //wheelDrivers.forEach((w) => console.log(w.constraint)) this._behaviors.push(new ArcadeDriveBehavior(leftWheels, rightWheels, leftStimuli, rightStimuli)); } - getLeftRightWheels() { - throw new Error("Method not implemented."); + configureArmBehaviors() { + let hingeDrivers: HingeDriver[] = this._simLayer.drivers.filter((driver) => driver instanceof HingeDriver) as HingeDriver[]; + let hingeStimuli: HingeStimulus[] = this._simLayer.stimuli.filter((stimulus) => stimulus instanceof HingeStimulus) as HingeStimulus[]; + + for (let i = 0; i < hingeDrivers.length; i++) { + this._behaviors.push(new GenericArmBehavior(hingeDrivers[i], hingeStimuli[i])); + } + } + + configureElevatorBehaviors() { + let sliderDrivers: SliderDriver[] = this._simLayer.drivers.filter((driver) => driver instanceof SliderDriver) as SliderDriver[]; + let sliderStimuli: SliderStimulus[] = this._simLayer.stimuli.filter((stimulus) => stimulus instanceof SliderStimulus) as SliderStimulus[]; + + for (let i = 0; i < sliderDrivers.length; i++) { + this._behaviors.push(new GenericElevatorBehavior(sliderDrivers[i], sliderStimuli[i], i==0 ? false : true)); + } } } -export default SynthesisBrain; \ No newline at end of file +export default SynthesisBrain;32 \ No newline at end of file