From 74bb30e149b665a0e19ae5e0902134c92adc77ee Mon Sep 17 00:00:00 2001 From: PepperLola Date: Tue, 9 Jul 2024 10:54:24 -0700 Subject: [PATCH 1/7] pin prettier version and format --- fission/bun.lockb | Bin 306880 -> 307794 bytes fission/package.json | 6 +- fission/src/Synthesis.tsx | 4 +- fission/src/aps/APS.ts | 33 ++--- fission/src/mirabuf/MirabufSceneObject.ts | 46 +++--- fission/src/systems/input/DefaultInputs.ts | 116 ++++++++++----- fission/src/systems/physics/Mechanism.ts | 31 ++-- fission/src/systems/physics/PhysicsSystem.ts | 10 +- fission/src/systems/scene/SceneRenderer.ts | 44 +++--- .../behavior/ArcadeDriveBehavior.ts | 30 ++-- .../synthesis_brain/SynthesisBrain.ts | 139 ++++++++++-------- fission/src/ui/components/Dropdown.tsx | 21 ++- fission/src/ui/components/Skybox.tsx | 16 +- fission/src/vite-env.d.ts | 8 +- 14 files changed, 288 insertions(+), 216 deletions(-) diff --git a/fission/bun.lockb b/fission/bun.lockb index 7e72545e8a6a8de73c28c1d66777e037aece4f4d..397fe36750773c06721d2258b694b53be881dd0b 100755 GIT binary patch delta 49862 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 delta 49371 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 diff --git a/fission/package.json b/fission/package.json index 256645d327..f1de5e1e78 100644 --- a/fission/package.json +++ b/fission/package.json @@ -12,8 +12,8 @@ "test": "vitest", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives", "lint:fix": "eslint . --ext ts,tsx --report-unused-disable-directives --fix", - "prettier": "bun x prettier src --check || npx prettier src --check", - "prettier:fix": "bun x prettier src --write || npx prettier src --write", + "prettier": "bunx prettier src --check || npx prettier src --check", + "prettier:fix": "bunx prettier src --write || npx prettier src --write", "format": "(bun run prettier:fix && bun run lint:fix) || (npm run prettier:fix && npm run lint:fix)", "assetpack": "curl -o public/assetpack.zip https://synthesis.autodesk.com/Downloadables/assetpack.zip && tar -xf public/assetpack.zip -C public/", "playwright:install": "bun x playwright install || npx playwright install" @@ -62,7 +62,7 @@ "jsdom": "^24.1.0", "pako": "^2.1.0", "postcss": "^8.4.26", - "prettier": "^3.0.0", + "prettier": "3.3.2", "protobufjs": "^7.2.6", "protobufjs-cli": "^1.1.2", "tailwindcss": "^3.3.3", diff --git a/fission/src/Synthesis.tsx b/fission/src/Synthesis.tsx index d0791238e1..d5f8e9a9b6 100644 --- a/fission/src/Synthesis.tsx +++ b/fission/src/Synthesis.tsx @@ -56,7 +56,7 @@ import ImportMirabufModal from "@/modals/mirabuf/ImportMirabufModal.tsx" import ImportLocalMirabufModal from "@/modals/mirabuf/ImportLocalMirabufModal.tsx" import APS, { ENDPOINT_SYNTHESIS_CHALLENGE } from "./aps/APS.ts" import ResetAllInputsModal from "./ui/modals/configuring/ResetAllInputsModal.tsx" -import Skybox from './ui/components/Skybox.tsx'; +import Skybox from "./ui/components/Skybox.tsx" const DEFAULT_MIRA_PATH = "/api/mira/Robots/Team 2471 (2018)_v7.mira" @@ -139,7 +139,7 @@ function Synthesis() { return ( - + { showTooltip(type, controls, duration) diff --git a/fission/src/aps/APS.ts b/fission/src/aps/APS.ts index ff2430db36..6c5ae6388c 100644 --- a/fission/src/aps/APS.ts +++ b/fission/src/aps/APS.ts @@ -58,8 +58,7 @@ class APS { * @param {number} expires_at - When the token expires */ static setExpiresAt(expires_at: number) { - if (this.auth) - this.auth.expires_at = expires_at; + if (this.auth) this.auth.expires_at = expires_at } /** @@ -113,15 +112,15 @@ class APS { } /** - * Logs the user out by setting their auth data to undefined. - */ + * Logs the user out by setting their auth data to undefined. + */ static async logout() { this.auth = undefined } /** - * Prompts the user to sign in, which will retrieve the auth code. - */ + * Prompts the user to sign in, which will retrieve the auth code. + */ static async requestAuthCode() { await this.requestMutex.runExclusive(async () => { const callbackUrl = import.meta.env.DEV @@ -157,9 +156,9 @@ class APS { } /** - * Refreshes the access token using our refresh token. - * @param {string} refresh_token - The refresh token from our auth data - */ + * Refreshes the access token using our refresh token. + * @param {string} refresh_token - The refresh token from our auth data + */ static async refreshAuthToken(refresh_token: string) { await this.requestMutex.runExclusive(async () => { try { @@ -199,9 +198,9 @@ class APS { } /** - * Fetches the auth data from Autodesk using the auth code. - * @param {string} code - The auth code - */ + * Fetches the auth data from Autodesk using the auth code. + * @param {string} code - The auth code + */ static async convertAuthToken(code: string) { let retry_login = false try { @@ -237,9 +236,9 @@ class APS { } /** - * Fetches user information using the auth data. See {@link APSAuth} - * @param {APSAuth} auth - The auth data - */ + * Fetches user information using the auth data. See {@link APSAuth} + * @param {APSAuth} auth - The auth data + */ static async loadUserInfo(auth: APSAuth) { console.log("Loading user information") try { @@ -272,8 +271,8 @@ class APS { } /** - * Fetches the code challenge from our server for requesting the auth code. - */ + * Fetches the code challenge from our server for requesting the auth code. + */ static async codeChallenge() { try { const res = await fetch(ENDPOINT_SYNTHESIS_CHALLENGE) diff --git a/fission/src/mirabuf/MirabufSceneObject.ts b/fission/src/mirabuf/MirabufSceneObject.ts index 22a579147f..15d8f4b119 100644 --- a/fission/src/mirabuf/MirabufSceneObject.ts +++ b/fission/src/mirabuf/MirabufSceneObject.ts @@ -19,19 +19,19 @@ interface RnDebugMeshes { } class MirabufSceneObject extends SceneObject { - private _assemblyName: string; - private _mirabufInstance: MirabufInstance; - private _mechanism: Mechanism; - private _brain: SynthesisBrain | undefined; + private _assemblyName: string + private _mirabufInstance: MirabufInstance + private _mechanism: Mechanism + private _brain: SynthesisBrain | undefined - private _debugBodies: Map | null; - private _physicsLayerReserve: LayerReserve | undefined = undefined; + private _debugBodies: Map | null + private _physicsLayerReserve: LayerReserve | undefined = undefined public constructor(mirabufInstance: MirabufInstance, assemblyName: string) { super() this._mirabufInstance = mirabufInstance - this._assemblyName = assemblyName; + this._assemblyName = assemblyName this._mechanism = World.PhysicsSystem.CreateMechanismFromParser(this._mirabufInstance.parser) if (this._mechanism.layerReserve) { @@ -63,10 +63,10 @@ class MirabufSceneObject extends SceneObject { } // Simulation - World.SimulationSystem.RegisterMechanism(this._mechanism); - const simLayer = World.SimulationSystem.GetSimulationLayer(this._mechanism)!; - this._brain = new SynthesisBrain(this._mechanism, this._assemblyName); - simLayer.SetBrain(this._brain); + World.SimulationSystem.RegisterMechanism(this._mechanism) + const simLayer = World.SimulationSystem.GetSimulationLayer(this._mechanism)! + this._brain = new SynthesisBrain(this._mechanism, this._assemblyName) + simLayer.SetBrain(this._brain) } public Update(): void { @@ -111,16 +111,16 @@ class MirabufSceneObject extends SceneObject { World.PhysicsSystem.DestroyMechanism(this._mechanism) this._mirabufInstance.Dispose(World.SceneRenderer.scene) this._debugBodies?.forEach(x => { - World.SceneRenderer.scene.remove(x.colliderMesh, x.comMesh); - x.colliderMesh.geometry.dispose(); - x.comMesh.geometry.dispose(); - (x.colliderMesh.material as THREE.Material).dispose(); - (x.comMesh.material as THREE.Material).dispose(); - }); - this._debugBodies?.clear(); - this._physicsLayerReserve?.Release(); - - this._brain?.clearControls(); + World.SceneRenderer.scene.remove(x.colliderMesh, x.comMesh) + x.colliderMesh.geometry.dispose() + x.comMesh.geometry.dispose() + ;(x.colliderMesh.material as THREE.Material).dispose() + ;(x.comMesh.material as THREE.Material).dispose() + }) + this._debugBodies?.clear() + this._physicsLayerReserve?.Release() + + this._brain?.clearControls() } private CreateMeshForShape(shape: Jolt.Shape): THREE.Mesh { @@ -163,8 +163,8 @@ export async function CreateMirabuf(assembly: mirabuf.Assembly): Promise; - public constraints: Array; - public stepListeners: Array; - public layerReserve: LayerReserve | undefined; - public controllable: boolean; + public rootBody: string + public nodeToBody: Map + public constraints: Array + public stepListeners: Array + public layerReserve: LayerReserve | undefined + public controllable: boolean - public constructor(rootBody: string, bodyMap: Map, controllable: boolean, layerReserve?: LayerReserve) { - this.rootBody = rootBody; - this.nodeToBody = bodyMap; - this.constraints = []; - this.stepListeners = []; - this.controllable = controllable; - this.layerReserve = layerReserve; + public constructor( + rootBody: string, + bodyMap: Map, + controllable: boolean, + layerReserve?: LayerReserve + ) { + this.rootBody = rootBody + this.nodeToBody = bodyMap + this.constraints = [] + this.stepListeners = [] + this.controllable = controllable + this.layerReserve = layerReserve } public AddConstraint(mechConstraint: MechanismConstraint) { diff --git a/fission/src/systems/physics/PhysicsSystem.ts b/fission/src/systems/physics/PhysicsSystem.ts index 7d9bce0944..5f050f97d8 100644 --- a/fission/src/systems/physics/PhysicsSystem.ts +++ b/fission/src/systems/physics/PhysicsSystem.ts @@ -191,11 +191,11 @@ class PhysicsSystem extends WorldSystem { public CreateMechanismFromParser(parser: MirabufParser): Mechanism { const layer = parser.assembly.dynamic ? new LayerReserve() : undefined - const bodyMap = this.CreateBodiesFromParser(parser, layer); - const rootBody = parser.rootNode; - const mechanism = new Mechanism(rootBody, bodyMap, parser.assembly.dynamic, layer); - this.CreateJointsFromParser(parser, mechanism); - return mechanism; + const bodyMap = this.CreateBodiesFromParser(parser, layer) + const rootBody = parser.rootNode + const mechanism = new Mechanism(rootBody, bodyMap, parser.assembly.dynamic, layer) + this.CreateJointsFromParser(parser, mechanism) + return mechanism } /** diff --git a/fission/src/systems/scene/SceneRenderer.ts b/fission/src/systems/scene/SceneRenderer.ts index c37f9bccbd..c22ba885f9 100644 --- a/fission/src/systems/scene/SceneRenderer.ts +++ b/fission/src/systems/scene/SceneRenderer.ts @@ -5,9 +5,9 @@ import WorldSystem from "../WorldSystem" import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js" import MirabufSceneObject from "@/mirabuf/MirabufSceneObject" -import vertexShader from '@/shaders/vertex.glsl'; -import fragmentShader from '@/shaders/fragment.glsl'; -import { Theme } from '@/ui/ThemeContext'; +import vertexShader from "@/shaders/vertex.glsl" +import fragmentShader from "@/shaders/fragment.glsl" +import { Theme } from "@/ui/ThemeContext" const CLEAR_COLOR = 0x121212 const GROUND_COLOR = 0x73937e @@ -15,11 +15,10 @@ const GROUND_COLOR = 0x73937e let nextSceneObjectId = 1 class SceneRenderer extends WorldSystem { - - private _mainCamera: THREE.PerspectiveCamera; - private _scene: THREE.Scene; - private _renderer: THREE.WebGLRenderer; - private _skybox: THREE.Mesh; + private _mainCamera: THREE.PerspectiveCamera + private _scene: THREE.Scene + private _renderer: THREE.WebGLRenderer + private _skybox: THREE.Mesh private _sceneObjects: Map @@ -104,7 +103,7 @@ class SceneRenderer extends WorldSystem { }) // Adding spherical skybox mesh - const geometry = new THREE.SphereGeometry(1000); + const geometry = new THREE.SphereGeometry(1000) const material = new THREE.ShaderMaterial({ vertexShader: vertexShader, fragmentShader: fragmentShader, @@ -113,12 +112,12 @@ class SceneRenderer extends WorldSystem { rColor: { value: 1.0 }, gColor: { value: 1.0 }, bColor: { value: 1.0 }, - } - }); - this._skybox = new THREE.Mesh(geometry, material); - this._skybox.receiveShadow = false; - this._skybox.castShadow = false; - this.scene.add(this._skybox); + }, + }) + this._skybox = new THREE.Mesh(geometry, material) + this._skybox.receiveShadow = false + this._skybox.castShadow = false + this.scene.add(this._skybox) } public UpdateCanvasSize() { @@ -146,9 +145,9 @@ class SceneRenderer extends WorldSystem { // tc.rotation.copy(tc.object!.rotation); }) - this._skybox.position.copy(this._mainCamera.position); + this._skybox.position.copy(this._mainCamera.position) - this._renderer.render(this._scene, this._mainCamera); + this._renderer.render(this._scene, this._mainCamera) } public Destroy(): void { @@ -296,14 +295,13 @@ class SceneRenderer extends WorldSystem { * @param currentTheme: current theme from ThemeContext.useTheme() */ public updateSkyboxColors(currentTheme: Theme) { - if (!this._skybox) return; + if (!this._skybox) return if (this._skybox.material instanceof THREE.ShaderMaterial) { - this._skybox.material.uniforms.rColor.value = currentTheme['Background']['color']['r']; - this._skybox.material.uniforms.gColor.value = currentTheme['Background']['color']['g']; - this._skybox.material.uniforms.bColor.value = currentTheme['Background']['color']['b']; + this._skybox.material.uniforms.rColor.value = currentTheme["Background"]["color"]["r"] + this._skybox.material.uniforms.gColor.value = currentTheme["Background"]["color"]["g"] + this._skybox.material.uniforms.bColor.value = currentTheme["Background"]["color"]["b"] } } - } -export default SceneRenderer; +export default SceneRenderer diff --git a/fission/src/systems/simulation/behavior/ArcadeDriveBehavior.ts b/fission/src/systems/simulation/behavior/ArcadeDriveBehavior.ts index 5d6ad16647..3f2a96b0d1 100644 --- a/fission/src/systems/simulation/behavior/ArcadeDriveBehavior.ts +++ b/fission/src/systems/simulation/behavior/ArcadeDriveBehavior.ts @@ -4,19 +4,25 @@ import Behavior from "./Behavior" import InputSystem from "@/systems/input/InputSystem" class ArcadeDriveBehavior extends Behavior { - private leftWheels: WheelDriver[]; - private rightWheels: WheelDriver[]; - private _assemblyName: string; + private leftWheels: WheelDriver[] + private rightWheels: WheelDriver[] + private _assemblyName: string private _driveSpeed = 30 private _turnSpeed = 30 - constructor(leftWheels: WheelDriver[], rightWheels: WheelDriver[], leftStimuli: WheelRotationStimulus[], rightStimuli: WheelRotationStimulus[], assemblyName: string) { - super(leftWheels.concat(rightWheels), leftStimuli.concat(rightStimuli)); - - this.leftWheels = leftWheels; - this.rightWheels = rightWheels; - this._assemblyName = assemblyName; + constructor( + leftWheels: WheelDriver[], + rightWheels: WheelDriver[], + leftStimuli: WheelRotationStimulus[], + rightStimuli: WheelRotationStimulus[], + assemblyName: string + ) { + super(leftWheels.concat(rightWheels), leftStimuli.concat(rightStimuli)) + + this.leftWheels = leftWheels + this.rightWheels = rightWheels + this._assemblyName = assemblyName } // Sets the drivetrains target linear and rotational velocity @@ -29,10 +35,10 @@ class ArcadeDriveBehavior extends Behavior { } public Update(_: number): void { - const driveInput = InputSystem.getInput("arcadeDrive", this._assemblyName); - const turnInput = InputSystem.getInput("arcadeTurn", this._assemblyName); + const driveInput = InputSystem.getInput("arcadeDrive", this._assemblyName) + const turnInput = InputSystem.getInput("arcadeTurn", this._assemblyName) - this.DriveSpeeds(driveInput*this._driveSpeed, turnInput*this._turnSpeed); + this.DriveSpeeds(driveInput * this._driveSpeed, turnInput * this._turnSpeed) } } diff --git a/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts b/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts index d1af884b31..384e566a1c 100644 --- a/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts +++ b/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts @@ -1,39 +1,39 @@ -import Mechanism from "@/systems/physics/Mechanism"; -import Brain from "../Brain"; -import Behavior from "../behavior/Behavior"; -import World from "@/systems/World"; -import WheelDriver from "../driver/WheelDriver"; -import WheelRotationStimulus from "../stimulus/WheelStimulus"; -import ArcadeDriveBehavior from "../behavior/ArcadeDriveBehavior"; -import { SimulationLayer } from "../SimulationSystem"; -import Jolt from "@barclah/jolt-physics"; -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"; -import InputSystem, { AxisInput } from "@/systems/input/InputSystem"; -import DefaultInputs from "@/systems/input/DefaultInputs"; +import Mechanism from "@/systems/physics/Mechanism" +import Brain from "../Brain" +import Behavior from "../behavior/Behavior" +import World from "@/systems/World" +import WheelDriver from "../driver/WheelDriver" +import WheelRotationStimulus from "../stimulus/WheelStimulus" +import ArcadeDriveBehavior from "../behavior/ArcadeDriveBehavior" +import { SimulationLayer } from "../SimulationSystem" +import Jolt from "@barclah/jolt-physics" +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" +import InputSystem, { AxisInput } from "@/systems/input/InputSystem" +import DefaultInputs from "@/systems/input/DefaultInputs" class SynthesisBrain extends Brain { private _behaviors: Behavior[] = [] private _simLayer: SimulationLayer // Tracks how many joins have been made for unique controls - private _currentJointIndex = 1; + private _currentJointIndex = 1 - private static _currentRobotIndex = 0; + private static _currentRobotIndex = 0 // Tracks how many robots are spawned for control identification private _assemblyName: string public constructor(mechanism: Mechanism, assemblyName: string) { - super(mechanism); + super(mechanism) - this._simLayer = World.SimulationSystem.GetSimulationLayer(mechanism)!; - this._assemblyName = "[" + SynthesisBrain._currentRobotIndex.toString() + "] " + assemblyName; + this._simLayer = World.SimulationSystem.GetSimulationLayer(mechanism)! + this._assemblyName = "[" + SynthesisBrain._currentRobotIndex.toString() + "] " + assemblyName if (!this._simLayer) { console.log("SimulationLayer is undefined") @@ -42,12 +42,12 @@ class SynthesisBrain extends Brain { // Only adds controls to mechanisms that are controllable (ignores fields) if (mechanism.controllable) { - this.configureArcadeDriveBehavior(); - this.configureArmBehaviors(); - this.configureElevatorBehaviors(); - this.configureInputs(); + this.configureArcadeDriveBehavior() + this.configureArmBehaviors() + this.configureElevatorBehaviors() + this.configureInputs() - SynthesisBrain._currentRobotIndex++; + SynthesisBrain._currentRobotIndex++ } } @@ -62,13 +62,17 @@ class SynthesisBrain extends Brain { } public clearControls(): void { - InputSystem.allInputs.delete(this._assemblyName); + InputSystem.allInputs.delete(this._assemblyName) } // Creates an instance of ArcadeDriveBehavior and automatically configures it public configureArcadeDriveBehavior() { - const wheelDrivers: WheelDriver[] = this._simLayer.drivers.filter((driver) => driver instanceof WheelDriver) as WheelDriver[]; - const wheelStimuli: WheelRotationStimulus[] = this._simLayer.stimuli.filter((stimulus) => stimulus instanceof WheelRotationStimulus) as WheelRotationStimulus[]; + const wheelDrivers: WheelDriver[] = this._simLayer.drivers.filter( + driver => driver instanceof WheelDriver + ) as WheelDriver[] + const wheelStimuli: WheelRotationStimulus[] = this._simLayer.stimuli.filter( + stimulus => stimulus instanceof WheelRotationStimulus + ) as WheelRotationStimulus[] // Two body constraints are part of wheels and are used to determine which way a wheel is facing const fixedConstraints: Jolt.TwoBodyConstraint[] = this._mechanism.constraints @@ -101,57 +105,74 @@ class SynthesisBrain extends Brain { } } - this._behaviors.push(new ArcadeDriveBehavior(leftWheels, rightWheels, leftStimuli, rightStimuli, this._assemblyName)); + this._behaviors.push( + new ArcadeDriveBehavior(leftWheels, rightWheels, leftStimuli, rightStimuli, this._assemblyName) + ) } // Creates instances of ArmBehavior and automatically configures them public configureArmBehaviors() { - const hingeDrivers: HingeDriver[] = this._simLayer.drivers.filter((driver) => driver instanceof HingeDriver) as HingeDriver[]; - const hingeStimuli: HingeStimulus[] = this._simLayer.stimuli.filter((stimulus) => stimulus instanceof HingeStimulus) as HingeStimulus[]; + const hingeDrivers: HingeDriver[] = this._simLayer.drivers.filter( + driver => driver instanceof HingeDriver + ) as HingeDriver[] + const 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], this._currentJointIndex, this._assemblyName)); - this._currentJointIndex++; + this._behaviors.push( + new GenericArmBehavior(hingeDrivers[i], hingeStimuli[i], this._currentJointIndex, this._assemblyName) + ) + this._currentJointIndex++ } } // Creates instances of ElevatorBehavior and automatically configures them public configureElevatorBehaviors() { - const sliderDrivers: SliderDriver[] = this._simLayer.drivers.filter((driver) => driver instanceof SliderDriver) as SliderDriver[]; - const sliderStimuli: SliderStimulus[] = this._simLayer.stimuli.filter((stimulus) => stimulus instanceof SliderStimulus) as SliderStimulus[]; + const sliderDrivers: SliderDriver[] = this._simLayer.drivers.filter( + driver => driver instanceof SliderDriver + ) as SliderDriver[] + const 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], this._currentJointIndex, this._assemblyName)); - this._currentJointIndex++; + this._behaviors.push( + new GenericElevatorBehavior( + sliderDrivers[i], + sliderStimuli[i], + this._currentJointIndex, + this._assemblyName + ) + ) + this._currentJointIndex++ } } public configureInputs() { - const scheme = DefaultInputs.ALL_INPUT_SCHEMES[SynthesisBrain._currentRobotIndex]; + const scheme = DefaultInputs.ALL_INPUT_SCHEMES[SynthesisBrain._currentRobotIndex] - InputSystem.allInputs.set(this._assemblyName, {schemeName: this._assemblyName, usesGamepad: scheme?.usesGamepad ?? false, inputs: []}); - const inputList = InputSystem.allInputs.get(this._assemblyName)!.inputs; + InputSystem.allInputs.set(this._assemblyName, { + schemeName: this._assemblyName, + usesGamepad: scheme?.usesGamepad ?? false, + inputs: [], + }) + const inputList = InputSystem.allInputs.get(this._assemblyName)!.inputs if (scheme) { - const arcadeDrive = scheme.inputs.find(i => i.inputName === "arcadeDrive"); - if (arcadeDrive) - inputList.push(arcadeDrive.getCopy()); - else - inputList.push(new AxisInput("arcadeDrive")); - - const arcadeTurn = scheme.inputs.find(i => i.inputName === "arcadeTurn"); - if (arcadeTurn) - inputList.push(arcadeTurn.getCopy()); - else - inputList.push(new AxisInput("arcadeTurn")); + const arcadeDrive = scheme.inputs.find(i => i.inputName === "arcadeDrive") + if (arcadeDrive) inputList.push(arcadeDrive.getCopy()) + else inputList.push(new AxisInput("arcadeDrive")) + + const arcadeTurn = scheme.inputs.find(i => i.inputName === "arcadeTurn") + if (arcadeTurn) inputList.push(arcadeTurn.getCopy()) + else inputList.push(new AxisInput("arcadeTurn")) for (let i = 1; i < this._currentJointIndex; i++) { - const controlPreset = scheme.inputs.find(input => input.inputName == ("joint " + i)) + const controlPreset = scheme.inputs.find(input => input.inputName == "joint " + i) - if (controlPreset) - inputList.push(controlPreset.getCopy()); - else - inputList.push(new AxisInput("joint " + i)); + if (controlPreset) inputList.push(controlPreset.getCopy()) + else inputList.push(new AxisInput("joint " + i)) } } } diff --git a/fission/src/ui/components/Dropdown.tsx b/fission/src/ui/components/Dropdown.tsx index 96592caca2..742172a93a 100644 --- a/fission/src/ui/components/Dropdown.tsx +++ b/fission/src/ui/components/Dropdown.tsx @@ -30,12 +30,7 @@ type DropdownProps = { onSelect: (opt: string) => void } -const Dropdown: React.FC = ({ - label, - className, - options, - onSelect, -}) => { +const Dropdown: React.FC = ({ label, className, options, onSelect }) => { const [expanded, setExpanded] = useState(false) const [optionList, setOptionList] = useState(options) @@ -45,11 +40,7 @@ const Dropdown: React.FC = ({ className?: string } - const DropdownOption: React.FC = ({ - children, - value, - className, - }) => ( + const DropdownOption: React.FC = ({ children, value, className }) => ( { const newOptions = options.filter(item => item !== value) @@ -58,7 +49,13 @@ const Dropdown: React.FC = ({ if (onSelect) onSelect(value) }} className={`block relative duration-100 hover:backdrop-brightness-90 w-full h-full px-2 py-2 ${className}`} - style={{ maxWidth: '249px', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', paddingRight: '25px'}} + style={{ + maxWidth: "249px", + whiteSpace: "nowrap", + overflow: "hidden", + textOverflow: "ellipsis", + paddingRight: "25px", + }} > {children} diff --git a/fission/src/ui/components/Skybox.tsx b/fission/src/ui/components/Skybox.tsx index a01ac09b81..36fa060938 100644 --- a/fission/src/ui/components/Skybox.tsx +++ b/fission/src/ui/components/Skybox.tsx @@ -1,12 +1,12 @@ -import World from "@/systems/World"; -import { useTheme } from "../ThemeContext"; +import World from "@/systems/World" +import { useTheme } from "../ThemeContext" const Skybox = () => { - const { currentTheme, themes } = useTheme(); - if (World.SceneRenderer) { World.SceneRenderer.updateSkyboxColors(themes[currentTheme]) } - return ( - <> - ); + const { currentTheme, themes } = useTheme() + if (World.SceneRenderer) { + World.SceneRenderer.updateSkyboxColors(themes[currentTheme]) + } + return <> } -export default Skybox; \ No newline at end of file +export default Skybox diff --git a/fission/src/vite-env.d.ts b/fission/src/vite-env.d.ts index 007c4f0852..d812284398 100644 --- a/fission/src/vite-env.d.ts +++ b/fission/src/vite-env.d.ts @@ -3,8 +3,8 @@ interface ImportMetaEnv { readonly VITE_SYNTHESIS_SERVER_PATH: string // more env variables... - } - - interface ImportMeta { +} + +interface ImportMeta { readonly env: ImportMetaEnv - } \ No newline at end of file +} From 8ba2c18d151b1bb44af9ab3675dcabb5739646b0 Mon Sep 17 00:00:00 2001 From: PepperLola Date: Tue, 9 Jul 2024 10:57:17 -0700 Subject: [PATCH 2/7] set prettier end of line to auto --- fission/prettier.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fission/prettier.config.js b/fission/prettier.config.js index c71dcd95af..0e53cce152 100644 --- a/fission/prettier.config.js +++ b/fission/prettier.config.js @@ -18,7 +18,7 @@ const config = { }, }, ], - endOfLine: "lf", + endOfLine: "auto", } export default config From c97ff838deeab14a4eb0b2582a2835dac2e40219 Mon Sep 17 00:00:00 2001 From: PepperLola Date: Tue, 9 Jul 2024 11:04:11 -0700 Subject: [PATCH 3/7] consolidated run and check format steps --- .github/workflows/FissionESLintFormat.yml | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/.github/workflows/FissionESLintFormat.yml b/.github/workflows/FissionESLintFormat.yml index 091c81d765..6dc9a4b5f6 100644 --- a/.github/workflows/FissionESLintFormat.yml +++ b/.github/workflows/FissionESLintFormat.yml @@ -26,28 +26,12 @@ jobs: id: linter-validation run: | cd fission - npm run lint + npm run lint && echo "ESLint Validation Passed" || (echo "ESLint Validation Failed" && exit 1) continue-on-error: true - - name: Check EsLint - run: | - if [ ${{ steps.linter-validation.outcome }} == "success" ]; then - echo "EsLint Validation Passed" - else - echo "EsLint Validation Failed" - exit 1 - fi - name: Prettier id: prettier-validation run: | cd fission npx prettier --version - npm run prettier + npm run prettier && echo "Prettier Validation Passed" || (echo "Prettier Validation Failed" && exit 1) continue-on-error: true - - name: Check Prettier - run: | - if [ ${{ steps.prettier-validation.outcome }} == "success" ]; then - echo "Prettier Validation Passed" - else - echo "Prettier Validation Failed" - exit 1 - fi From 75cd1fcf7fcdc62242e90f93f58b0db11492d6ac Mon Sep 17 00:00:00 2001 From: PepperLola Date: Tue, 9 Jul 2024 11:04:25 -0700 Subject: [PATCH 4/7] intentionally bad format to test workflow --- fission/src/mirabuf/MirabufLoader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fission/src/mirabuf/MirabufLoader.ts b/fission/src/mirabuf/MirabufLoader.ts index 3b3ecd925b..95402060f7 100644 --- a/fission/src/mirabuf/MirabufLoader.ts +++ b/fission/src/mirabuf/MirabufLoader.ts @@ -2,7 +2,7 @@ import { mirabuf } from "@/proto/mirabuf" import Pako from "pako" const MIRABUF_LOCALSTORAGE_GENERATION_KEY = "Synthesis Nonce Key" -const MIRABUF_LOCALSTORAGE_GENERATION = "4543246" +const MIRABUF_LOCALSTORAGE_GENERATION = "4543246";;;; export type MirabufCacheID = string From bfec4be411919780392b48a91db5cde46ab2cfe2 Mon Sep 17 00:00:00 2001 From: PepperLola Date: Tue, 9 Jul 2024 11:08:30 -0700 Subject: [PATCH 5/7] add if always to workflow to show errors properly? --- .github/workflows/FissionESLintFormat.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/FissionESLintFormat.yml b/.github/workflows/FissionESLintFormat.yml index 6dc9a4b5f6..357455c4a4 100644 --- a/.github/workflows/FissionESLintFormat.yml +++ b/.github/workflows/FissionESLintFormat.yml @@ -24,14 +24,14 @@ jobs: npm install - name: Linter id: linter-validation + if: ${{ always() }} run: | cd fission npm run lint && echo "ESLint Validation Passed" || (echo "ESLint Validation Failed" && exit 1) - continue-on-error: true - name: Prettier id: prettier-validation + if: ${{ always() }} run: | cd fission npx prettier --version npm run prettier && echo "Prettier Validation Passed" || (echo "Prettier Validation Failed" && exit 1) - continue-on-error: true From d0c8dca8fbc15eea07b4f74d354ab64ab8bc6d94 Mon Sep 17 00:00:00 2001 From: PepperLola Date: Tue, 9 Jul 2024 11:10:18 -0700 Subject: [PATCH 6/7] fix format to test workflow --- fission/src/mirabuf/MirabufLoader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fission/src/mirabuf/MirabufLoader.ts b/fission/src/mirabuf/MirabufLoader.ts index 95402060f7..3b3ecd925b 100644 --- a/fission/src/mirabuf/MirabufLoader.ts +++ b/fission/src/mirabuf/MirabufLoader.ts @@ -2,7 +2,7 @@ import { mirabuf } from "@/proto/mirabuf" import Pako from "pako" const MIRABUF_LOCALSTORAGE_GENERATION_KEY = "Synthesis Nonce Key" -const MIRABUF_LOCALSTORAGE_GENERATION = "4543246";;;; +const MIRABUF_LOCALSTORAGE_GENERATION = "4543246" export type MirabufCacheID = string From 299da7f24c3e91178a9c7fb0ebadc042b06ad32a Mon Sep 17 00:00:00 2001 From: PepperLola Date: Tue, 9 Jul 2024 11:11:00 -0700 Subject: [PATCH 7/7] back to bun x --- fission/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fission/package.json b/fission/package.json index f1de5e1e78..a8849746a6 100644 --- a/fission/package.json +++ b/fission/package.json @@ -12,8 +12,8 @@ "test": "vitest", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives", "lint:fix": "eslint . --ext ts,tsx --report-unused-disable-directives --fix", - "prettier": "bunx prettier src --check || npx prettier src --check", - "prettier:fix": "bunx prettier src --write || npx prettier src --write", + "prettier": "bun x prettier src --check || npx prettier src --check", + "prettier:fix": "bun x prettier src --write || npx prettier src --write", "format": "(bun run prettier:fix && bun run lint:fix) || (npm run prettier:fix && npm run lint:fix)", "assetpack": "curl -o public/assetpack.zip https://synthesis.autodesk.com/Downloadables/assetpack.zip && tar -xf public/assetpack.zip -C public/", "playwright:install": "bun x playwright install || npx playwright install"