forked from LeenkxTeam/LNXSDK
408 lines
13 KiB
Plaintext
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);
|
|
};
|