diff --git a/fission/package.json b/fission/package.json index c8fb579c58..ea36086922 100644 --- a/fission/package.json +++ b/fission/package.json @@ -21,7 +21,7 @@ "playwright:install": "bun x playwright install || npx playwright install" }, "dependencies": { - "@barclah/jolt-physics": "^0.24.1", + "@barclah/jolt-physics": "^0.31.0", "@haensl/google-analytics": "^1.2.0", "@mui/base": "^5.0.0-beta.40", "@mui/icons-material": "^5.15.20", diff --git a/fission/src/mirabuf/EjectableSceneObject.ts b/fission/src/mirabuf/EjectableSceneObject.ts index b4e6c50dad..6f2161473d 100644 --- a/fission/src/mirabuf/EjectableSceneObject.ts +++ b/fission/src/mirabuf/EjectableSceneObject.ts @@ -7,6 +7,7 @@ import { JoltMat44_ThreeMatrix4, JoltQuat_ThreeQuaternion, ThreeQuaternion_JoltQuat, + ThreeVector3_JoltRVec3, ThreeVector3_JoltVec3, } from "@/util/TypeConversions" import * as THREE from "three" @@ -88,7 +89,7 @@ class EjectableSceneObject extends SceneObject { const rotation = new THREE.Quaternion(0, 0, 0, 1) bodyTransform.decompose(position, rotation, new THREE.Vector3(1, 1, 1)) - World.PhysicsSystem.SetBodyPosition(this._gamePieceBodyId, ThreeVector3_JoltVec3(position), false) + World.PhysicsSystem.SetBodyPosition(this._gamePieceBodyId, ThreeVector3_JoltRVec3(position), false) World.PhysicsSystem.SetBodyRotation(this._gamePieceBodyId, ThreeQuaternion_JoltQuat(rotation), false) } } diff --git a/fission/src/mirabuf/IntakeSensorSceneObject.ts b/fission/src/mirabuf/IntakeSensorSceneObject.ts index de33d2dc6d..91d53779bb 100644 --- a/fission/src/mirabuf/IntakeSensorSceneObject.ts +++ b/fission/src/mirabuf/IntakeSensorSceneObject.ts @@ -8,7 +8,7 @@ import { Array_ThreeMatrix4, JoltMat44_ThreeMatrix4, ThreeQuaternion_JoltQuat, - ThreeVector3_JoltVec3, + ThreeVector3_JoltRVec3, } from "@/util/TypeConversions" import { OnContactPersistedEvent } from "@/systems/physics/ContactEvents" @@ -70,7 +70,7 @@ class IntakeSensorSceneObject extends SceneObject { const rotation = new THREE.Quaternion(0, 0, 0, 1) bodyTransform.decompose(position, rotation, new THREE.Vector3(1, 1, 1)) - World.PhysicsSystem.SetBodyPosition(this._joltBodyId, ThreeVector3_JoltVec3(position)) + World.PhysicsSystem.SetBodyPosition(this._joltBodyId, ThreeVector3_JoltRVec3(position)) World.PhysicsSystem.SetBodyRotation(this._joltBodyId, ThreeQuaternion_JoltQuat(rotation)) } } diff --git a/fission/src/mirabuf/ScoringZoneSceneObject.ts b/fission/src/mirabuf/ScoringZoneSceneObject.ts index d6984bac73..8a456c64d9 100644 --- a/fission/src/mirabuf/ScoringZoneSceneObject.ts +++ b/fission/src/mirabuf/ScoringZoneSceneObject.ts @@ -2,7 +2,7 @@ import { Array_ThreeMatrix4, JoltMat44_ThreeMatrix4, ThreeQuaternion_JoltQuat, - ThreeVector3_JoltVec3, + ThreeVector3_JoltRVec3, } from "@/util/TypeConversions" import MirabufSceneObject, { RigidNodeAssociate } from "./MirabufSceneObject" import JOLT from "@/util/loading/JoltSyncLoader" @@ -84,7 +84,7 @@ class ScoringZoneSceneObject extends SceneObject { ) const props = DeltaFieldTransforms_PhysicalProp(this._deltaTransformation, fieldTransformation) - World.PhysicsSystem.SetBodyPosition(this._joltBodyId, ThreeVector3_JoltVec3(props.translation)) + World.PhysicsSystem.SetBodyPosition(this._joltBodyId, ThreeVector3_JoltRVec3(props.translation)) World.PhysicsSystem.SetBodyRotation(this._joltBodyId, ThreeQuaternion_JoltQuat(props.rotation)) const shapeSettings = new JOLT.BoxShapeSettings( new JOLT.Vec3(props.scale.x / 2, props.scale.y / 2, props.scale.z / 2) @@ -148,7 +148,7 @@ class ScoringZoneSceneObject extends SceneObject { ) const props = DeltaFieldTransforms_PhysicalProp(this._deltaTransformation, fieldTransformation) - World.PhysicsSystem.SetBodyPosition(this._joltBodyId, ThreeVector3_JoltVec3(props.translation)) + World.PhysicsSystem.SetBodyPosition(this._joltBodyId, ThreeVector3_JoltRVec3(props.translation)) World.PhysicsSystem.SetBodyRotation(this._joltBodyId, ThreeQuaternion_JoltQuat(props.rotation)) const shapeSettings = new JOLT.BoxShapeSettings( new JOLT.Vec3(props.scale.x / 2, props.scale.y / 2, props.scale.z / 2) diff --git a/fission/src/systems/physics/PhysicsSystem.ts b/fission/src/systems/physics/PhysicsSystem.ts index 5e8dfc3189..d02c58a7ff 100644 --- a/fission/src/systems/physics/PhysicsSystem.ts +++ b/fission/src/systems/physics/PhysicsSystem.ts @@ -1,9 +1,13 @@ import { + JoltRVec3_JoltVec3, + JoltVec3_JoltRVec3, JoltVec3_ThreeVector3, MirabufFloatArr_JoltFloat3, MirabufFloatArr_JoltVec3, + MirabufVector3_JoltRVec3, MirabufVector3_JoltVec3, ThreeMatrix4_JoltMat44, + ThreeVector3_JoltRVec3, ThreeVector3_JoltVec3, _JoltQuat, } from "../../util/TypeConversions" @@ -234,7 +238,7 @@ class PhysicsSystem extends WorldSystem { const shape = new JOLT.BoxShape(size, 0.1) JOLT.destroy(size) - const pos = position ? ThreeVector3_JoltVec3(position) : new JOLT.Vec3(0.0, 0.0, 0.0) + const pos = position ? ThreeVector3_JoltRVec3(position) : new JOLT.RVec3(0.0, 0.0, 0.0) const rot = _JoltQuat(rotation) const creationSettings = new JOLT.BodyCreationSettings( shape, @@ -269,7 +273,7 @@ class PhysicsSystem extends WorldSystem { position: THREE.Vector3 | undefined, rotation: THREE.Euler | THREE.Quaternion | undefined ) { - const pos = position ? ThreeVector3_JoltVec3(position) : new JOLT.Vec3(0.0, 0.0, 0.0) + const pos = position ? ThreeVector3_JoltRVec3(position) : new JOLT.RVec3(0.0, 0.0, 0.0) const rot = _JoltQuat(rotation) const creationSettings = new JOLT.BodyCreationSettings( shape, @@ -464,14 +468,14 @@ class PhysicsSystem extends WorldSystem { const hingeConstraintSettings = new JOLT.HingeConstraintSettings() const jointOrigin = jointDefinition.origin - ? MirabufVector3_JoltVec3(jointDefinition.origin as mirabuf.Vector3) - : new JOLT.Vec3(0, 0, 0) + ? MirabufVector3_JoltRVec3(jointDefinition.origin as mirabuf.Vector3) + : new JOLT.RVec3(0, 0, 0) // TODO: Offset transformation for robot builder. const jointOriginOffset = jointInstance.offset - ? MirabufVector3_JoltVec3(jointInstance.offset as mirabuf.Vector3) - : new JOLT.Vec3(0, 0, 0) + ? MirabufVector3_JoltRVec3(jointInstance.offset as mirabuf.Vector3) + : new JOLT.RVec3(0, 0, 0) - const anchorPoint = jointOrigin.Add(jointOriginOffset) + const anchorPoint = jointOrigin.AddRVec3(jointOriginOffset) hingeConstraintSettings.mPoint1 = hingeConstraintSettings.mPoint2 = anchorPoint const rotationalFreedom = jointDefinition.rotational!.rotationalFreedom! @@ -532,14 +536,14 @@ class PhysicsSystem extends WorldSystem { const sliderConstraintSettings = new JOLT.SliderConstraintSettings() const jointOrigin = jointDefinition.origin - ? MirabufVector3_JoltVec3(jointDefinition.origin as mirabuf.Vector3) - : new JOLT.Vec3(0, 0, 0) + ? MirabufVector3_JoltRVec3(jointDefinition.origin as mirabuf.Vector3) + : new JOLT.RVec3(0, 0, 0) // TODO: Offset transformation for robot builder. const jointOriginOffset = jointInstance.offset - ? MirabufVector3_JoltVec3(jointInstance.offset as mirabuf.Vector3) - : new JOLT.Vec3(0, 0, 0) + ? MirabufVector3_JoltRVec3(jointInstance.offset as mirabuf.Vector3) + : new JOLT.RVec3(0, 0, 0) - const anchorPoint = jointOrigin.Add(jointOriginOffset) + const anchorPoint = jointOrigin.AddRVec3(jointOriginOffset) sliderConstraintSettings.mPoint1 = sliderConstraintSettings.mPoint2 = anchorPoint const prismaticFreedom = jointDefinition.prismatic!.prismaticFreedom! @@ -594,13 +598,13 @@ class PhysicsSystem extends WorldSystem { const fixedSettings = new JOLT.FixedConstraintSettings() const jointOrigin = jointDefinition.origin - ? MirabufVector3_JoltVec3(jointDefinition.origin as mirabuf.Vector3) - : new JOLT.Vec3(0, 0, 0) + ? MirabufVector3_JoltRVec3(jointDefinition.origin as mirabuf.Vector3) + : new JOLT.RVec3(0, 0, 0) const jointOriginOffset = jointInstance.offset - ? MirabufVector3_JoltVec3(jointInstance.offset as mirabuf.Vector3) - : new JOLT.Vec3(0, 0, 0) + ? MirabufVector3_JoltRVec3(jointInstance.offset as mirabuf.Vector3) + : new JOLT.RVec3(0, 0, 0) - const anchorPoint = jointOrigin.Add(jointOriginOffset) + const anchorPoint = jointOrigin.AddRVec3(jointOriginOffset) fixedSettings.mPoint1 = fixedSettings.mPoint2 = anchorPoint const rotationalFreedom = jointDefinition.rotational!.rotationalFreedom! @@ -608,13 +612,13 @@ class PhysicsSystem extends WorldSystem { // No scaling, these are unit vectors const miraAxis = rotationalFreedom.axis! as mirabuf.Vector3 const miraAxisX: number = (versionNum < 5 ? -miraAxis.x : miraAxis.x) ?? 0 - const axis: Jolt.Vec3 = new JOLT.Vec3(miraAxisX, miraAxis.y ?? 0, miraAxis.z ?? 0) + const axis: Jolt.RVec3 = new JOLT.RVec3(miraAxisX, miraAxis.y ?? 0, miraAxis.z ?? 0) const bounds = bodyWheel.GetShape().GetLocalBounds() const radius = (bounds.mMax.GetY() - bounds.mMin.GetY()) / 2.0 const wheelSettings = new JOLT.WheelSettingsWV() - wheelSettings.mPosition = anchorPoint.Add(axis.Mul(0.1)) + wheelSettings.mPosition = JoltRVec3_JoltVec3(anchorPoint.AddRVec3(axis.Mul(0.1))) wheelSettings.mMaxSteerAngle = 0.0 wheelSettings.mMaxHandBrakeTorque = 0.0 wheelSettings.mRadius = radius * 1.05 @@ -733,7 +737,7 @@ class PhysicsSystem extends WorldSystem { const c = constraints[i] const hingeSettings = new JOLT.HingeConstraintSettings() hingeSettings.mMaxFrictionTorque = c.friction - hingeSettings.mPoint1 = hingeSettings.mPoint2 = anchorPoint + hingeSettings.mPoint1 = hingeSettings.mPoint2 = JoltVec3_JoltRVec3(anchorPoint) hingeSettings.mHingeAxis1 = hingeSettings.mHingeAxis2 = c.axis.Normalized() hingeSettings.mNormalAxis1 = hingeSettings.mNormalAxis2 = getPerpendicular(hingeSettings.mHingeAxis1) if (c.upper && c.lower) { @@ -1029,7 +1033,7 @@ class PhysicsSystem extends WorldSystem { const bodySettings = new JOLT.BodyCreationSettings( shape, - new JOLT.Vec3(0.0, 0.0, 0.0), + new JOLT.RVec3(0.0, 0.0, 0.0), new JOLT.Quat(0, 0, 0, 1), rn.isDynamic ? JOLT.EMotionType_Dynamic : JOLT.EMotionType_Static, rnLayer @@ -1162,7 +1166,7 @@ class PhysicsSystem extends WorldSystem { * @returns Either the hit results of the closest object in the ray's path, or undefined if nothing was hit. */ public RayCast(from: Jolt.Vec3, dir: Jolt.Vec3, ...ignoreBodies: Jolt.BodyID[]): RayCastHit | undefined { - const ray = new JOLT.RayCast(from, dir) + const ray = new JOLT.RRayCast(JoltVec3_JoltRVec3(from), dir) const raySettings = new JOLT.RayCastSettings() raySettings.mTreatConvexAsSolid = false @@ -1181,7 +1185,7 @@ class PhysicsSystem extends WorldSystem { if (!collector.HadHit()) return undefined const hitPoint = ray.GetPointOnRay(collector.mHit.mFraction) - return { data: collector.mHit, point: hitPoint, ray: ray } + return { data: collector.mHit, point: JoltRVec3_JoltVec3(hitPoint), ray: ray } } /** @@ -1287,7 +1291,7 @@ class PhysicsSystem extends WorldSystem { const rot = new JOLT.Quat(0, 0, 0, 1) const creationSettings = new JOLT.BodyCreationSettings( shape, - position, + JoltVec3_JoltRVec3(position), rot, JOLT.EMotionType_Dynamic, LAYER_GHOST @@ -1326,8 +1330,7 @@ class PhysicsSystem extends WorldSystem { this._bodies.push(ghostBodyId) const constraintSettings = new JOLT.PointConstraintSettings() - constraintSettings.set_mPoint1(anchorPoint) - constraintSettings.set_mPoint2(anchorPoint) + constraintSettings.mPoint1 = constraintSettings.mPoint2 = JoltVec3_JoltRVec3(anchorPoint) const constraint = constraintSettings.Create(ghostBody, body) this._joltPhysSystem.AddConstraint(constraint) this._constraints.push(constraint) @@ -1610,7 +1613,7 @@ function tryGetPerpendicular(vec: Jolt.Vec3, toCheck: Jolt.Vec3): Jolt.Vec3 | un export type RayCastHit = { data: Jolt.RayCastResult point: Jolt.Vec3 - ray: Jolt.RayCast + ray: Jolt.RRayCast } /** diff --git a/fission/src/systems/scene/GizmoSceneObject.ts b/fission/src/systems/scene/GizmoSceneObject.ts index 44dede21b8..aa8dce0906 100644 --- a/fission/src/systems/scene/GizmoSceneObject.ts +++ b/fission/src/systems/scene/GizmoSceneObject.ts @@ -5,7 +5,7 @@ import InputSystem from "../input/InputSystem" import World from "../World" import MirabufSceneObject from "@/mirabuf/MirabufSceneObject" import { Object3D, PerspectiveCamera } from "three" -import { ThreeQuaternion_JoltQuat, JoltMat44_ThreeMatrix4, ThreeVector3_JoltVec3 } from "@/util/TypeConversions" +import { ThreeQuaternion_JoltQuat, JoltMat44_ThreeMatrix4, ThreeVector3_JoltRVec3 } from "@/util/TypeConversions" import { RigidNodeId } from "@/mirabuf/MirabufParser" export type GizmoMode = "translate" | "rotate" | "scale" @@ -210,7 +210,7 @@ class GizmoSceneObject extends SceneObject { World.PhysicsSystem.SetBodyPositionAndRotation( jBodyId, - ThreeVector3_JoltVec3(position), + ThreeVector3_JoltRVec3(position), ThreeQuaternion_JoltQuat(rotation) ) } diff --git a/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts b/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts index 7464008c15..ce876776d0 100644 --- a/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts +++ b/fission/src/systems/simulation/synthesis_brain/SynthesisBrain.ts @@ -20,6 +20,7 @@ import MirabufSceneObject from "@/mirabuf/MirabufSceneObject" import IntakeDriver from "../driver/IntakeDriver" import EjectorDriver from "../driver/EjectorDriver" import GamepieceManipBehavior from "../behavior/synthesis/GamepieceManipBehavior" +import { JoltVec3_JoltRVec3 } from "@/util/TypeConversions" class SynthesisBrain extends Brain { public static brainIndexMap = new Map() @@ -128,14 +129,14 @@ class SynthesisBrain extends Brain { // Determines which wheels and stimuli belong to which side of the robot for (let i = 0; i < wheelDrivers.length; i++) { - const wheelPos = fixedConstraints[i].GetConstraintToBody1Matrix().GetTranslation() + const wheelPos = JoltVec3_JoltRVec3(fixedConstraints[i].GetConstraintToBody1Matrix().GetTranslation()) const robotCOM = World.PhysicsSystem.GetBody( this._mechanism.constraints[0].childBody - ).GetCenterOfMassPosition() as Jolt.Vec3 - const rightVector = new JOLT.Vec3(1, 0, 0) + ).GetCenterOfMassPosition() + const rightVector = new JOLT.RVec3(1, 0, 0) - const dotProduct = rightVector.Dot(wheelPos.Sub(robotCOM)) + const dotProduct = rightVector.Dot(wheelPos.SubRVec3(robotCOM)) if (dotProduct < 0) { rightWheels.push(wheelDrivers[i]) diff --git a/fission/src/test/PhysicsSystem.test.ts b/fission/src/test/PhysicsSystem.test.ts index ed2ea62bc5..70e75ca961 100644 --- a/fission/src/test/PhysicsSystem.test.ts +++ b/fission/src/test/PhysicsSystem.test.ts @@ -2,8 +2,8 @@ import { test, expect, describe, assert } from "vitest" import PhysicsSystem, { LayerReserve } from "../systems/physics/PhysicsSystem" import MirabufParser from "@/mirabuf/MirabufParser" import * as THREE from "three" -import Jolt from "@barclah/jolt-physics" import MirabufCachingService, { MiraType } from "@/mirabuf/MirabufLoader" +import { JoltRVec3_JoltVec3 } from "@/util/TypeConversions" describe("Physics Sansity Checks", () => { test("Convex Hull Shape (Cube)", () => { @@ -54,7 +54,10 @@ describe("GodMode", () => { test("Basic", () => { const system = new PhysicsSystem() const box = system.CreateBox(new THREE.Vector3(1, 1, 1), 1, new THREE.Vector3(0, 0, 0), undefined) - const [ghostObject, ghostConstraint] = system.CreateGodModeBody(box.GetID(), box.GetPosition() as Jolt.Vec3) + const [ghostObject, ghostConstraint] = system.CreateGodModeBody( + box.GetID(), + JoltRVec3_JoltVec3(box.GetPosition()) + ) assert(system.GetBody(ghostObject.GetID()) != undefined) assert(system.GetBody(box.GetID()) != undefined) diff --git a/fission/src/test/util/TypeConversions.test.ts b/fission/src/test/util/TypeConversions.test.ts index d18eff3fb5..ed5d1bad1b 100644 --- a/fission/src/test/util/TypeConversions.test.ts +++ b/fission/src/test/util/TypeConversions.test.ts @@ -217,7 +217,7 @@ describe("Mirabuf to Three Conversions", () => { }) describe("Jolt to Three Conversions", () => { - function compareMat(jM: Jolt.Mat44, tM: THREE.Matrix4) { + function compareMat(jM: Jolt.RMat44, tM: THREE.Matrix4) { const threeArr = tM.toArray() for (let c = 0; c < 4; c++) { @@ -253,7 +253,7 @@ describe("Jolt to Three Conversions", () => { } test("Jolt.Mat44 [Identity] -> THREE.Matrix4", () => { - const tmp = new JOLT.Mat44() + const tmp = new JOLT.RMat44() const joltMat = tmp.sIdentity() const threeMat = JoltMat44_ThreeMatrix4(joltMat) @@ -263,7 +263,7 @@ describe("Jolt to Three Conversions", () => { }) test("Jolt.Mat44 [+X Axis Rotation] -> THREE.Matrix4", () => { - const joltMat = new JOLT.Mat44() + const joltMat = new JOLT.RMat44() const c0 = new JOLT.Vec4(1, 0, 0, 0) const c1 = new JOLT.Vec4(0, 0, -1, 0) const c2 = new JOLT.Vec4(0, 1, 0, 0) @@ -285,7 +285,7 @@ describe("Jolt to Three Conversions", () => { }) test("Jolt.Mat44 [-X Axis Rotation] -> THREE.Matrix4", () => { - const joltMat = new JOLT.Mat44() + const joltMat = new JOLT.RMat44() const c0 = new JOLT.Vec4(1, 0, 0, 0) const c1 = new JOLT.Vec4(0, 0, 1, 0) const c2 = new JOLT.Vec4(0, -1, 0, 0) @@ -307,7 +307,7 @@ describe("Jolt to Three Conversions", () => { }) test("Jolt.Mat44 [X,Y Translation] -> THREE.Matrix4", () => { - const joltMat = new JOLT.Mat44() + const joltMat = new JOLT.RMat44() const c0 = new JOLT.Vec4(1, 0, 0, 0) const c1 = new JOLT.Vec4(0, 1, 0, 0) const c2 = new JOLT.Vec4(0, 0, 1, 0) diff --git a/fission/src/ui/panels/DebugPanel.tsx b/fission/src/ui/panels/DebugPanel.tsx index 3e39edbc34..c65b432829 100644 --- a/fission/src/ui/panels/DebugPanel.tsx +++ b/fission/src/ui/panels/DebugPanel.tsx @@ -14,11 +14,11 @@ import { usePanelControlContext } from "../PanelContext" import APS from "@/aps/APS" import PreferencesSystem from "@/systems/preferences/PreferencesSystem" import JOLT from "@/util/loading/JoltSyncLoader" -import Jolt from "@barclah/jolt-physics" import Label from "../components/Label" import { colorNameToVar } from "../ThemeContext" import { SynthesisIcons } from "../components/StyledComponents" import { Global_AddToast } from "../components/GlobalUIControls" +import { JoltRVec3_JoltVec3 } from "@/util/TypeConversions" const LabelStyled = styled(Label)({ fontWeight: 700, @@ -39,16 +39,19 @@ async function TestGodMode() { return } const robotPosition = World.PhysicsSystem.GetBody(rootNodeId).GetPosition() - const [ghostBody, _ghostConstraint] = World.PhysicsSystem.CreateGodModeBody(rootNodeId, robotPosition as Jolt.Vec3) + const [ghostBody, _ghostConstraint] = World.PhysicsSystem.CreateGodModeBody( + rootNodeId, + JoltRVec3_JoltVec3(robotPosition) + ) // Move ghostBody to demonstrate godMode movement await new Promise(f => setTimeout(f, 1000)) World.PhysicsSystem.SetBodyPosition( ghostBody.GetID(), - new JOLT.Vec3(robotPosition.GetX(), robotPosition.GetY() + 2, robotPosition.GetZ()) + new JOLT.RVec3(robotPosition.GetX(), robotPosition.GetY() + 2, robotPosition.GetZ()) ) await new Promise(f => setTimeout(f, 1000)) - World.PhysicsSystem.SetBodyPosition(ghostBody.GetID(), new JOLT.Vec3(2, 2, 2)) + World.PhysicsSystem.SetBodyPosition(ghostBody.GetID(), new JOLT.RVec3(2, 2, 2)) } const DebugPanel: React.FC = ({ panelId }) => { diff --git a/fission/src/ui/panels/PokerPanel.tsx b/fission/src/ui/panels/PokerPanel.tsx index ea496f770b..238305fd4f 100644 --- a/fission/src/ui/panels/PokerPanel.tsx +++ b/fission/src/ui/panels/PokerPanel.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from "react" import Panel, { PanelPropsImpl } from "@/components/Panel" import World from "@/systems/World" -import { ThreeVector3_JoltVec3 } from "@/util/TypeConversions" +import { JoltVec3_JoltRVec3, ThreeVector3_JoltVec3 } from "@/util/TypeConversions" import Checkbox from "@/ui/components/Checkbox" import Slider from "@/ui/components/Slider" import { SynthesisIcons } from "../components/StyledComponents" @@ -50,7 +50,7 @@ function affect( if (punch) { World.PhysicsSystem.GetBody(res.data.mBodyID).AddImpulse( ThreeVector3_JoltVec3(dir.normalize().multiplyScalar(punchForce)), - res.point + JoltVec3_JoltRVec3(res.point) ) } } diff --git a/fission/src/ui/panels/simulation/AutoTestPanel.tsx b/fission/src/ui/panels/simulation/AutoTestPanel.tsx index 463b4bd23a..4a187710d2 100644 --- a/fission/src/ui/panels/simulation/AutoTestPanel.tsx +++ b/fission/src/ui/panels/simulation/AutoTestPanel.tsx @@ -10,7 +10,7 @@ import Label from "@/ui/components/Label" import Button from "@/ui/components/Button" import Jolt from "@barclah/jolt-physics" import JOLT from "@/util/loading/JoltSyncLoader" -import { JoltMat44_ThreeMatrix4, ThreeQuaternion_JoltQuat, ThreeVector3_JoltVec3 } from "@/util/TypeConversions" +import { JoltMat44_ThreeMatrix4, ThreeQuaternion_JoltQuat, ThreeVector3_JoltRVec3 } from "@/util/TypeConversions" import * as THREE from "three" import { AllianceStation, RobotSimMode, SimDriverStation } from "@/systems/simulation/wpilib_brain/WPILibBrain" import { styled } from "@mui/system" @@ -137,7 +137,7 @@ function captureBodies(): BodyCapture[] { JoltMat44_ThreeMatrix4(transform).decompose(translation, rotation, new THREE.Vector3(1, 1, 1)) captures.push({ id: bodyId, - pos: ThreeVector3_JoltVec3(translation), + pos: ThreeVector3_JoltRVec3(translation), rot: ThreeQuaternion_JoltQuat(rotation), }) }) diff --git a/fission/src/util/TypeConversions.ts b/fission/src/util/TypeConversions.ts index d66ea08a6b..5e275d9d05 100644 --- a/fission/src/util/TypeConversions.ts +++ b/fission/src/util/TypeConversions.ts @@ -43,6 +43,10 @@ export function ThreeVector3_JoltVec3(vec: THREE.Vector3) { return new JOLT.Vec3(vec.x, vec.y, vec.z) } +export function ThreeVector3_JoltRVec3(vec: THREE.Vector3) { + return new JOLT.RVec3(vec.x, vec.y, vec.z) +} + export function ThreeMatrix4_JoltMat44(m: THREE.Matrix4) { const jMat = new JOLT.Mat44() const threeArr = m.toArray() @@ -71,6 +75,14 @@ export function JoltMat44_ThreeMatrix4(m: Jolt.RMat44): THREE.Matrix4 { ) } +export function JoltVec3_JoltRVec3(m: Jolt.Vec3): Jolt.RVec3 { + return new JOLT.RVec3(m.GetX(), m.GetY(), m.GetZ()) +} + +export function JoltRVec3_JoltVec3(m: Jolt.RVec3): Jolt.Vec3 { + return new JOLT.Vec3(m.GetX(), m.GetY(), m.GetZ()) +} + export function MirabufTransform_ThreeMatrix4(m: mirabuf.ITransform): THREE.Matrix4 { const arr = m.spatialMatrix! const pos = new THREE.Vector3(arr[3] * 0.01, arr[7] * 0.01, arr[11] * 0.01) @@ -88,6 +100,10 @@ export function MirabufVector3_JoltVec3(v: mirabuf.Vector3): Jolt.Vec3 { return new JOLT.Vec3(v.x / 100.0, v.y / 100.0, v.z / 100.0) } +export function MirabufVector3_JoltRVec3(v: mirabuf.Vector3): Jolt.RVec3 { + return new JOLT.RVec3(v.x / 100.0, v.y / 100.0, v.z / 100.0) +} + export function MirabufVector3_JoltFloat3(v: mirabuf.Vector3): Jolt.Float3 { return new JOLT.Float3(v.x / 100.0, v.y / 100.0, v.z / 100.0) }