diff --git a/exporter/SynthesisFusionAddin/src/Parser/SynthesisParser/Parser.py b/exporter/SynthesisFusionAddin/src/Parser/SynthesisParser/Parser.py index 5dd2245ca3..a925f5b119 100644 --- a/exporter/SynthesisFusionAddin/src/Parser/SynthesisParser/Parser.py +++ b/exporter/SynthesisFusionAddin/src/Parser/SynthesisParser/Parser.py @@ -27,7 +27,7 @@ def __init__(self, options: ExporterOptions): def export(self) -> bool: try: app = adsk.core.Application.get() - design = app.activeDocument.design + design: adsk.fusion.Design = app.activeDocument.design assembly_out = assembly_pb2.Assembly() fill_info( diff --git a/exporter/SynthesisFusionAddin/src/general_imports.py b/exporter/SynthesisFusionAddin/src/general_imports.py index 7921a5e367..042e4618ea 100644 --- a/exporter/SynthesisFusionAddin/src/general_imports.py +++ b/exporter/SynthesisFusionAddin/src/general_imports.py @@ -48,7 +48,7 @@ A_EP = None # Setup the global state - gm = GlobalManager() + gm: GlobalManager = GlobalManager() my_addin_path = os.path.dirname(os.path.realpath(__file__)) except: # should also log this diff --git a/fission/src/Synthesis.tsx b/fission/src/Synthesis.tsx index c6d0fb9a39..daefd9f9be 100644 --- a/fission/src/Synthesis.tsx +++ b/fission/src/Synthesis.tsx @@ -49,10 +49,11 @@ import ScoringZonesPanel from "@/panels/configuring/scoring/ScoringZonesPanel" import ZoneConfigPanel from "@/panels/configuring/scoring/ZoneConfigPanel" import ScoreboardPanel from "@/panels/information/ScoreboardPanel" import DriverStationPanel from "@/panels/simulation/DriverStationPanel" -import ManageAssembliesModal from "@/modals/spawning/ManageAssembliesModal.tsx" -import World from "@/systems/World.ts" -import { AddRobotsModal, AddFieldsModal, SpawningModal } from "@/modals/spawning/SpawningModals.tsx" -import ImportMirabufModal from "@/modals/mirabuf/ImportMirabufModal.tsx" +import ManageAssembliesModal from '@/modals/spawning/ManageAssembliesModal.tsx'; +import World from '@/systems/World.ts'; +import { AddRobotsModal, AddFieldsModal, SpawningModal } from '@/modals/spawning/SpawningModals.tsx'; +import ImportMirabufModal from '@/modals/mirabuf/ImportMirabufModal.tsx'; +import ImportLocalMirabufModal from '@/modals/mirabuf/ImportLocalMirabufModal.tsx'; const DEFAULT_MIRA_PATH = "/api/mira/Robots/Team 2471 (2018)_v7.mira" @@ -192,6 +193,7 @@ const initialModals = [ , , , + , ] const initialPanels: ReactElement[] = [ diff --git a/fission/src/systems/input/InputSystem.ts b/fission/src/systems/input/InputSystem.ts index 21aca82ee7..8535301569 100644 --- a/fission/src/systems/input/InputSystem.ts +++ b/fission/src/systems/input/InputSystem.ts @@ -121,7 +121,10 @@ class InputSystem extends WorldSystem { } // Returns true if two modifier states are identical - private static CompareModifiers(state1: ModifierState, state2: ModifierState): boolean { + private static CompareModifiers(state1: ModifierState, state2: ModifierState) : boolean { + if (!state1 || !state2) + return false; + return ( state1.alt == state2.alt && state1.ctrl == state2.ctrl && diff --git a/fission/src/systems/simulation/behavior/GenericArmBehavior.ts b/fission/src/systems/simulation/behavior/GenericArmBehavior.ts index b2d50d8064..5f38eb14c6 100644 --- a/fission/src/systems/simulation/behavior/GenericArmBehavior.ts +++ b/fission/src/systems/simulation/behavior/GenericArmBehavior.ts @@ -6,10 +6,10 @@ import InputSystem, { emptyModifierState } from "@/systems/input/InputSystem" class GenericArmBehavior extends Behavior { private _hingeDriver: HingeDriver - private _positiveInput: string - private _negativeInput: string - - private _rotationalSpeed = 30 + private _positiveInput: string; + private _negativeInput: string; + + private _rotationalSpeed = 6; constructor(hingeDriver: HingeDriver, hingeStimulus: HingeStimulus, jointIndex: number) { super([hingeDriver], [hingeStimulus]) diff --git a/fission/src/systems/simulation/behavior/GenericElevatorBehavior.ts b/fission/src/systems/simulation/behavior/GenericElevatorBehavior.ts index 0d9ce8de79..2b9f41936b 100644 --- a/fission/src/systems/simulation/behavior/GenericElevatorBehavior.ts +++ b/fission/src/systems/simulation/behavior/GenericElevatorBehavior.ts @@ -9,7 +9,7 @@ class GenericElevatorBehavior extends Behavior { private _positiveInput: string private _negativeInput: string - private _linearSpeed = 1 + private _linearSpeed = 2.5; constructor(sliderDriver: SliderDriver, sliderStimulus: SliderStimulus, jointIndex: number) { super([sliderDriver], [sliderStimulus]) @@ -34,12 +34,12 @@ class GenericElevatorBehavior extends Behavior { } // Changes the elevators target position - moveElevator(positionDelta: number) { - this._sliderDriver.targetPosition += positionDelta + moveElevator(linearVelocity: number) { + this._sliderDriver.targetVelocity = linearVelocity; } - public Update(deltaT: number): void { - this.moveElevator(InputSystem.GetAxis(this._positiveInput, this._negativeInput) * this._linearSpeed * deltaT) + public Update(_: number): void { + this.moveElevator(InputSystem.GetAxis(this._positiveInput, this._negativeInput)*this._linearSpeed); } } diff --git a/fission/src/systems/simulation/driver/Driver.ts b/fission/src/systems/simulation/driver/Driver.ts index 39c3aefa0e..400b7bde30 100644 --- a/fission/src/systems/simulation/driver/Driver.ts +++ b/fission/src/systems/simulation/driver/Driver.ts @@ -2,4 +2,9 @@ abstract class Driver { public abstract Update(deltaT: number): void } -export default Driver +export enum DriverControlMode { + Velocity = 0, + Position = 1 +} + +export default Driver; \ No newline at end of file diff --git a/fission/src/systems/simulation/driver/HingeDriver.ts b/fission/src/systems/simulation/driver/HingeDriver.ts index 172a7cc095..4500508490 100644 --- a/fission/src/systems/simulation/driver/HingeDriver.ts +++ b/fission/src/systems/simulation/driver/HingeDriver.ts @@ -1,5 +1,5 @@ import Jolt from "@barclah/jolt-physics" -import Driver from "./Driver" +import Driver, { DriverControlMode } from "./Driver" import { SIMULATION_PERIOD } from "@/systems/physics/PhysicsSystem" import JOLT from "@/util/loading/JoltSyncLoader" @@ -21,7 +21,7 @@ class HingeDriver extends Driver { return this._targetAngle } public set targetAngle(rads: number) { - this._targetAngle = rads + this._targetAngle = Math.max(this._constraint.GetLimitsMin(), Math.min(this._constraint.GetLimitsMax(), rads)); } public set minTorqueLimit(nm: number) { @@ -36,6 +36,7 @@ class HingeDriver extends Driver { public get controlMode(): DriverControlMode { return this._controlMode } + public set controlMode(mode: DriverControlMode) { this._controlMode = mode switch (mode) { @@ -64,8 +65,8 @@ class HingeDriver extends Driver { springSettings.mDamping = 0.995 motorSettings.mSpringSettings = springSettings - motorSettings.mMinTorqueLimit = -50.0 - motorSettings.mMaxTorqueLimit = 50.0 + motorSettings.mMinTorqueLimit = -200.0 + motorSettings.mMaxTorqueLimit = 200.0 this._targetAngle = this._constraint.GetCurrentAngle() @@ -81,9 +82,4 @@ class HingeDriver extends Driver { } } -export enum DriverControlMode { - Velocity = 0, - Position = 1, -} - -export default HingeDriver +export default HingeDriver \ No newline at end of file diff --git a/fission/src/systems/simulation/driver/SliderDriver.ts b/fission/src/systems/simulation/driver/SliderDriver.ts index 050a41c925..2ad547a831 100644 --- a/fission/src/systems/simulation/driver/SliderDriver.ts +++ b/fission/src/systems/simulation/driver/SliderDriver.ts @@ -1,12 +1,22 @@ -import Jolt from "@barclah/jolt-physics" -import Driver from "./Driver" -import { SIMULATION_PERIOD } from "@/systems/physics/PhysicsSystem" -import JOLT from "@/util/loading/JoltSyncLoader" -import InputSystem from "@/systems/input/InputSystem" +import Jolt from "@barclah/jolt-physics"; +import Driver, { DriverControlMode } from "./Driver"; +import { SIMULATION_PERIOD } from "@/systems/physics/PhysicsSystem"; +import JOLT from "@/util/loading/JoltSyncLoader"; class SliderDriver extends Driver { - private _constraint: Jolt.SliderConstraint - private _targetPosition: number = 0.0 + + private _constraint: Jolt.SliderConstraint; + + private _controlMode: DriverControlMode = DriverControlMode.Velocity; + private _targetVelocity: number = 0.0; + private _targetPosition: number = 0.0; + + public get targetVelocity(): number { + return this._targetVelocity; + } + public set targetVelocity(radsPerSec: number) { + this._targetVelocity = radsPerSec; + } public get targetPosition(): number { return this._targetPosition @@ -27,6 +37,25 @@ class SliderDriver extends Driver { motorSettings.mMaxForceLimit = newtons } + public get controlMode(): DriverControlMode { + return this._controlMode; + } + + public set controlMode(mode: DriverControlMode) { + this._controlMode = mode; + switch (mode) { + case DriverControlMode.Velocity: + this._constraint.SetMotorState(JOLT.EMotorState_Velocity); + break; + case DriverControlMode.Position: + this._constraint.SetMotorState(JOLT.EMotorState_Position); + break; + default: + // idk + break; + } + } + public constructor(constraint: Jolt.SliderConstraint) { super() @@ -35,21 +64,21 @@ class SliderDriver extends Driver { const motorSettings = this._constraint.GetMotorSettings() const springSettings = motorSettings.mSpringSettings springSettings.mFrequency = 20 * (1.0 / SIMULATION_PERIOD) - springSettings.mDamping = 0.995 + springSettings.mDamping = 0.999 motorSettings.mSpringSettings = springSettings - motorSettings.mMinForceLimit = -125.0 - motorSettings.mMaxForceLimit = 125.0 - - this._constraint.SetMotorState(JOLT.EMotorState_Position) + motorSettings.mMinForceLimit = -900.0 + motorSettings.mMaxForceLimit = 900.0 - this.targetPosition = this._constraint.GetCurrentPosition() + this._constraint.SetMotorState(JOLT.EMotorState_Velocity) + this.controlMode = DriverControlMode.Velocity; } - public Update(_: number): void { - this._targetPosition += - ((InputSystem.getInput("sliderUp") ? 1 : 0) - (InputSystem.getInput("sliderDown") ? 1 : 0)) * 3 - this._constraint.SetTargetPosition(this._targetPosition) + public Update(_: number): void {if (this._controlMode == DriverControlMode.Velocity) { + this._constraint.SetTargetVelocity(this._targetVelocity); + } else if (this._controlMode == DriverControlMode.Position) { + this._constraint.SetTargetPosition(this._targetPosition); + } } } diff --git a/fission/src/ui/components/MainHUD.tsx b/fission/src/ui/components/MainHUD.tsx index aa0d681cec..64b9e88c0f 100644 --- a/fission/src/ui/components/MainHUD.tsx +++ b/fission/src/ui/components/MainHUD.tsx @@ -120,7 +120,16 @@ const MainHUD: React.FC = () => { icon={} onClick={() => openModal("import-mirabuf")} /> - } onClick={TestGodMode} /> + } + onClick={() => openModal("import-local-mirabuf")} + /> + } + onClick={TestGodMode} + />
= ({ modalId }) => { + // update tooltip based on type of drivetrain, receive message from Synthesis + const { showTooltip } = useTooltipControlContext() + + const fileUploadRef = useRef(null) + + const [selectedFile, setSelectedFile] = useState(undefined) + + const uploadClicked = () => { + if (fileUploadRef.current) { + fileUploadRef.current.click() + } + } + + const onInputChanged = (e: ChangeEvent) => { + if (e.target.files) { + const file = e.target.files[0] + setSelectedFile(file) + } + } + + return ( + } + modalId={modalId} + acceptEnabled={selectedFile !== undefined} + onAccept={() => { + if (selectedFile) { + console.log(`Mira: '${selectedFile}'`) + showTooltip("controls", [ + { control: "WASD", description: "Drive" }, + { control: "E", description: "Intake" }, + { control: "Q", description: "Dispense" }, + ]) + + CreateMirabufFromUrl(URL.createObjectURL(selectedFile)).then(x => { + if (x) { + World.SceneRenderer.RegisterSceneObject(x) + } + }) + } + } + } + > +
+ +
+
+ ) +} + +export default ImportLocalMirabufModal \ No newline at end of file