Files
LNXSDK/lib/haxejolt/Sources/jolt/jolt.idl
2026-03-04 00:50:15 -08:00

408 lines
13 KiB
Plaintext

// Jolt Physics IDL for HashLink bindings
// Based on JoltPhysics.js IDL
// NOTE: Enums are defined in Jt.hx to avoid redefinition conflicts
// Vec3
interface Vec3 {
void Vec3();
void Vec3(float inX, float inY, float inZ);
[Value] Vec3 sZero();
[Value] Vec3 sOne();
[Value] Vec3 sAxisX();
[Value] Vec3 sAxisY();
[Value] Vec3 sAxisZ();
float GetX();
float GetY();
float GetZ();
void SetX(float inX);
void SetY(float inY);
void SetZ(float inZ);
void Set(float inX, float inY, float inZ);
float Length();
float LengthSq();
[Value] Vec3 Normalized();
[Value] Vec3 Cross([Const, Ref] Vec3 inRHS);
float Dot([Const, Ref] Vec3 inRHS);
[Operator="+=", Ref] Vec3 Add([Const, Ref] Vec3 inV);
[Operator="-=", Ref] Vec3 Sub([Const, Ref] Vec3 inV);
[Operator="*=", Ref] Vec3 Mul(float inV);
[Operator="/=", Ref] Vec3 Div(float inV);
};
// RVec3 (real/double precision)
interface RVec3 {
void RVec3();
void RVec3(double inX, double inY, double inZ);
[Value] RVec3 sZeroR();
double GetX();
double GetY();
double GetZ();
void SetX(double inX);
void SetY(double inY);
void SetZ(double inZ);
void Set(double inX, double inY, double inZ);
double Length();
double LengthSq();
[Value] RVec3 Normalized();
};
// Quat
interface Quat {
void Quat();
void Quat(float inX, float inY, float inZ, float inW);
[Value] Quat sIdentity();
[Value] Quat sRotation([Const, Ref] Vec3 inAxis, float inAngle);
[Value] Quat sEulerAngles([Const, Ref] Vec3 inInput);
float GetX();
float GetY();
float GetZ();
float GetW();
void SetX(float inX);
void SetY(float inY);
void SetZ(float inZ);
void SetW(float inW);
void Set(float inX, float inY, float inZ, float inW);
float Length();
[Value] Quat Normalized();
[Value] Vec3 GetEulerAngles();
[Value] Quat Conjugated();
[Value] Quat Inversed();
[Value] Quat MulQuat([Const, Ref] Quat inQ);
[Value] Vec3 MulVec3([Const, Ref] Vec3 inV);
[Value] Quat SLERP([Const, Ref] Quat inDestination, float inFraction);
};
// Mat44
interface Mat44 {
void Mat44();
[Value] Mat44 sIdentity();
[Value] Mat44 sZeroM();
[Value] Mat44 sRotation([Const, Ref] Quat inQ);
[Value] Mat44 sTranslation([Const, Ref] Vec3 inTranslation);
[Value] Mat44 sRotationTranslation([Const, Ref] Quat inRotation, [Const, Ref] Vec3 inTranslation);
[Value] Mat44 sScale(float inScale);
[Value] Vec3 GetAxisX();
[Value] Vec3 GetAxisY();
[Value] Vec3 GetAxisZ();
[Value] Vec3 GetTranslation();
[Value] Quat GetQuaternion();
[Value] Mat44 GetRotation();
[Value] Mat44 MulMat44([Const, Ref] Mat44 inM);
[Value] Vec3 MulVec3([Const, Ref] Vec3 inV);
[Value] Mat44 Inversed();
};
// BodyID
interface BodyID {
void BodyID();
long GetIndex();
long GetSequenceNumber();
boolean IsInvalid();
};
// Shape (base)
interface Shape {
long GetRefCount();
void AddRef();
void Release();
int GetType();
int GetSubType();
boolean MustBeStatic();
[Value] Vec3 GetCenterOfMass();
float GetInnerRadius();
long GetUserData();
void SetUserData(long inUserData);
};
// BoxShape
interface BoxShape {
void BoxShape([Const, Ref] Vec3 inHalfExtent);
[Value] Vec3 GetHalfExtent();
};
BoxShape implements Shape;
// SphereShape
interface SphereShape {
void SphereShape(float inRadius);
float GetRadius();
};
SphereShape implements Shape;
// CapsuleShape
interface CapsuleShape {
void CapsuleShape(float inHalfHeightOfCylinder, float inRadius);
float GetHalfHeightOfCylinder();
float GetRadius();
};
CapsuleShape implements Shape;
// CylinderShape
interface CylinderShape {
void CylinderShape(float inHalfHeight, float inRadius);
float GetHalfHeight();
float GetRadius();
};
CylinderShape implements Shape;
// Body
interface Body {
[Const, Value] BodyID GetID();
boolean IsActive();
boolean IsStatic();
boolean IsKinematic();
boolean IsDynamic();
boolean IsSensor();
void SetIsSensor(boolean inIsSensor);
int GetMotionType();
void SetMotionType(int inMotionType);
[Value] RVec3 GetPosition();
[Value] Quat GetRotation();
[Value] Mat44 GetWorldTransform();
[Value] RVec3 GetCenterOfMassPosition();
[Value] Mat44 GetCenterOfMassTransform();
[Value] Vec3 GetLinearVelocity();
[Value] Vec3 GetAngularVelocity();
void SetLinearVelocity([Const, Ref] Vec3 inLinearVelocity);
void SetAngularVelocity([Const, Ref] Vec3 inAngularVelocity);
void SetLinearVelocityClamped([Const, Ref] Vec3 inLinearVelocity);
void SetAngularVelocityClamped([Const, Ref] Vec3 inAngularVelocity);
[Value] Vec3 GetPointVelocity([Const, Ref] RVec3 inPoint);
void AddForce([Const, Ref] Vec3 inForce);
void AddForceAtPosition([Const, Ref] Vec3 inForce, [Const, Ref] RVec3 inPosition);
void AddTorque([Const, Ref] Vec3 inTorque);
void AddImpulse([Const, Ref] Vec3 inImpulse);
void AddImpulseAtPosition([Const, Ref] Vec3 inImpulse, [Const, Ref] RVec3 inPosition);
void AddAngularImpulse([Const, Ref] Vec3 inAngularImpulse);
void MoveKinematic([Const, Ref] RVec3 inTargetPosition, [Const, Ref] Quat inTargetRotation, float inDeltaTime);
[Value] Vec3 GetAccumulatedForce();
[Value] Vec3 GetAccumulatedTorque();
void ResetForce();
void ResetTorque();
void ResetMotion();
[Const] Shape GetShape();
float GetFriction();
void SetFriction(float inFriction);
float GetRestitution();
void SetRestitution(float inRestitution);
long GetUserData();
void SetUserData(long inUserData);
};
// MassProperties
interface MassProperties {
void MassProperties();
attribute float mMass;
void ScaleToMass(float inMass);
};
// BodyCreationSettings
interface BodyCreationSettings {
void BodyCreationSettings([Const] Shape inShape, [Const, Ref] RVec3 inPosition, [Const, Ref] Quat inRotation, int inMotionType, short inObjectLayer);
attribute float mFriction;
attribute float mRestitution;
attribute float mLinearDamping;
attribute float mAngularDamping;
attribute float mMaxLinearVelocity;
attribute float mMaxAngularVelocity;
attribute float mGravityFactor;
attribute boolean mAllowSleeping;
attribute boolean mIsSensor;
attribute int mMotionQuality;
attribute int mAllowedDOFs;
attribute int mOverrideMassProperties;
[Value] attribute MassProperties mMassPropertiesOverride;
attribute int mNumVelocityStepsOverride;
attribute int mNumPositionStepsOverride;
};
// BodyInterface
interface BodyInterface {
Body CreateBody([Const, Ref] BodyCreationSettings inSettings);
void DestroyBody([Const, Ref] BodyID inBodyID);
void AddBody([Const, Ref] BodyID inBodyID, int inActivationMode);
void RemoveBody([Const, Ref] BodyID inBodyID);
boolean IsAdded([Const, Ref] BodyID inBodyID);
void ActivateBody([Const, Ref] BodyID inBodyID);
void DeactivateBody([Const, Ref] BodyID inBodyID);
boolean IsActive([Const, Ref] BodyID inBodyID);
void SetMotionType([Const, Ref] BodyID inBodyID, int inMotionType, int inActivationMode);
int GetMotionType([Const, Ref] BodyID inBodyID);
void SetPosition([Const, Ref] BodyID inBodyID, [Const, Ref] RVec3 inPosition, int inActivationMode);
[Value] RVec3 GetPosition([Const, Ref] BodyID inBodyID);
[Value] RVec3 GetCenterOfMassPosition([Const, Ref] BodyID inBodyID);
void SetRotation([Const, Ref] BodyID inBodyID, [Const, Ref] Quat inRotation, int inActivationMode);
[Value] Quat GetRotation([Const, Ref] BodyID inBodyID);
void SetPositionAndRotation([Const, Ref] BodyID inBodyID, [Const, Ref] RVec3 inPosition, [Const, Ref] Quat inRotation, int inActivationMode);
void SetLinearVelocity([Const, Ref] BodyID inBodyID, [Const, Ref] Vec3 inLinearVelocity);
[Value] Vec3 GetLinearVelocity([Const, Ref] BodyID inBodyID);
void SetAngularVelocity([Const, Ref] BodyID inBodyID, [Const, Ref] Vec3 inAngularVelocity);
[Value] Vec3 GetAngularVelocity([Const, Ref] BodyID inBodyID);
void AddLinearVelocity([Const, Ref] BodyID inBodyID, [Const, Ref] Vec3 inLinearVelocity);
void AddLinearAndAngularVelocity([Const, Ref] BodyID inBodyID, [Const, Ref] Vec3 inLinearVelocity, [Const, Ref] Vec3 inAngularVelocity);
void AddForce([Const, Ref] BodyID inBodyID, [Const, Ref] Vec3 inForce);
void AddForceAtPosition([Const, Ref] BodyID inBodyID, [Const, Ref] Vec3 inForce, [Const, Ref] RVec3 inPosition);
void AddTorque([Const, Ref] BodyID inBodyID, [Const, Ref] Vec3 inTorque);
void AddImpulse([Const, Ref] BodyID inBodyID, [Const, Ref] Vec3 inImpulse);
void AddImpulseAtPosition([Const, Ref] BodyID inBodyID, [Const, Ref] Vec3 inImpulse, [Const, Ref] RVec3 inPosition);
void AddAngularImpulse([Const, Ref] BodyID inBodyID, [Const, Ref] Vec3 inAngularImpulse);
void MoveKinematic([Const, Ref] BodyID inBodyID, [Const, Ref] RVec3 inTargetPosition, [Const, Ref] Quat inTargetRotation, float inDeltaTime);
void SetShape([Const, Ref] BodyID inBodyID, [Const] Shape inShape, boolean inUpdateMassProperties, int inActivationMode);
[Const] Shape GetShape([Const, Ref] BodyID inBodyID);
void SetFriction([Const, Ref] BodyID inBodyID, float inFriction);
float GetFriction([Const, Ref] BodyID inBodyID);
void SetRestitution([Const, Ref] BodyID inBodyID, float inRestitution);
float GetRestitution([Const, Ref] BodyID inBodyID);
void SetGravityFactor([Const, Ref] BodyID inBodyID, float inGravityFactor);
float GetGravityFactor([Const, Ref] BodyID inBodyID);
void SetUserData([Const, Ref] BodyID inBodyID, long inUserData);
long GetUserData([Const, Ref] BodyID inBodyID);
[Value] Mat44 GetWorldTransform([Const, Ref] BodyID inBodyID);
[Value] Mat44 GetCenterOfMassTransform([Const, Ref] BodyID inBodyID);
};
// RayCast
interface RRayCast {
void RRayCast([Const, Ref] RVec3 inOrigin, [Const, Ref] Vec3 inDirection);
[Value] attribute RVec3 mOrigin;
[Value] attribute Vec3 mDirection;
};
interface RayCastResult {
void RayCastResult();
[Value] attribute BodyID mBodyID;
attribute float mFraction;
};
// NarrowPhaseQuery
interface NarrowPhaseQuery {
boolean CastRay([Const, Ref] RRayCast inRay, [Ref] RayCastResult ioHit);
};
// PhysicsSystem
interface PhysicsSystem {
void PhysicsSystem();
void Init(long inMaxBodies, long inNumBodyMutexes, long inMaxBodyPairs, long inMaxContactConstraints);
void OptimizeBroadPhase();
long Update(float inDeltaTime, long inCollisionSteps);
BodyInterface GetBodyInterface();
BodyInterface GetBodyInterfaceNoLock();
long GetNumBodies();
long GetNumActiveBodies();
long GetMaxBodies();
void SetGravity([Const, Ref] Vec3 inGravity);
[Value] Vec3 GetGravity();
[Const, Ref] NarrowPhaseQuery GetNarrowPhaseQuery();
void AddConstraint(Constraint inConstraint);
void RemoveConstraint(Constraint inConstraint);
};
// Constraint base
interface Constraint {
long GetRefCount();
void AddRef();
void Release();
void SetEnabled(boolean inEnabled);
boolean GetEnabled();
};
interface TwoBodyConstraint {
Body GetBody1();
Body GetBody2();
};
TwoBodyConstraint implements Constraint;
// FixedConstraintSettings
interface FixedConstraintSettings {
void FixedConstraintSettings();
attribute int mSpace;
attribute boolean mAutoDetectPoint;
[Value] attribute RVec3 mPoint1;
[Value] attribute RVec3 mPoint2;
[Value] attribute Vec3 mAxisX1;
[Value] attribute Vec3 mAxisY1;
[Value] attribute Vec3 mAxisX2;
[Value] attribute Vec3 mAxisY2;
TwoBodyConstraint Create(Body inBody1, Body inBody2);
};
// PointConstraintSettings
interface PointConstraintSettings {
void PointConstraintSettings();
attribute int mSpace;
[Value] attribute RVec3 mPoint1;
[Value] attribute RVec3 mPoint2;
TwoBodyConstraint Create(Body inBody1, Body inBody2);
};
// HingeConstraintSettings
interface HingeConstraintSettings {
void HingeConstraintSettings();
attribute int mSpace;
[Value] attribute RVec3 mPoint1;
[Value] attribute RVec3 mPoint2;
[Value] attribute Vec3 mHingeAxis1;
[Value] attribute Vec3 mHingeAxis2;
[Value] attribute Vec3 mNormalAxis1;
[Value] attribute Vec3 mNormalAxis2;
attribute float mLimitsMin;
attribute float mLimitsMax;
attribute float mMaxFrictionTorque;
TwoBodyConstraint Create(Body inBody1, Body inBody2);
};
// SliderConstraintSettings
interface SliderConstraintSettings {
void SliderConstraintSettings();
attribute int mSpace;
attribute boolean mAutoDetectPoint;
[Value] attribute RVec3 mPoint1;
[Value] attribute RVec3 mPoint2;
[Value] attribute Vec3 mSliderAxis1;
[Value] attribute Vec3 mSliderAxis2;
[Value] attribute Vec3 mNormalAxis1;
[Value] attribute Vec3 mNormalAxis2;
attribute float mLimitsMin;
attribute float mLimitsMax;
attribute float mMaxFrictionForce;
TwoBodyConstraint Create(Body inBody1, Body inBody2);
};
// DistanceConstraintSettings
interface DistanceConstraintSettings {
void DistanceConstraintSettings();
attribute int mSpace;
[Value] attribute RVec3 mPoint1;
[Value] attribute RVec3 mPoint2;
attribute float mMinDistance;
attribute float mMaxDistance;
TwoBodyConstraint Create(Body inBody1, Body inBody2);
};
// SixDOFConstraintSettings
interface SixDOFConstraintSettings {
void SixDOFConstraintSettings();
attribute int mSpace;
[Value] attribute RVec3 mPosition1;
[Value] attribute RVec3 mPosition2;
[Value] attribute Vec3 mAxisX1;
[Value] attribute Vec3 mAxisY1;
[Value] attribute Vec3 mAxisX2;
[Value] attribute Vec3 mAxisY2;
void MakeFreeAxis(int inAxis);
void MakeFixedAxis(int inAxis);
void SetLimitedAxis(int inAxis, float inMin, float inMax);
TwoBodyConstraint Create(Body inBody1, Body inBody2);
};
// ConeConstraintSettings
interface ConeConstraintSettings {
void ConeConstraintSettings();
attribute int mSpace;
[Value] attribute RVec3 mPoint1;
[Value] attribute RVec3 mPoint2;
[Value] attribute Vec3 mTwistAxis1;
[Value] attribute Vec3 mTwistAxis2;
attribute float mHalfConeAngle;
TwoBodyConstraint Create(Body inBody1, Body inBody2);
};