summaryrefslogtreecommitdiff
path: root/Runtime/Interfaces/IPhysics.h
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Interfaces/IPhysics.h')
-rw-r--r--Runtime/Interfaces/IPhysics.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/Runtime/Interfaces/IPhysics.h b/Runtime/Interfaces/IPhysics.h
new file mode 100644
index 0000000..d2497b4
--- /dev/null
+++ b/Runtime/Interfaces/IPhysics.h
@@ -0,0 +1,72 @@
+#pragma once
+
+#include "Runtime/Math/Vector3.h"
+#include "Runtime/Math/Quaternion.h"
+#include "Runtime/Utilities/NonCopyable.h"
+#include "Runtime/Scripting/ScriptingUtility.h"
+
+class Rigidbody;
+struct PhysicsStats;
+class NxTriangleMesh;
+class NxConvexMesh;
+class NxStream;
+class CapsuleCollider;
+struct Collision;
+namespace Unity { class SkinnedCloth; }
+class Collider;
+class MeshCollider;
+class NxConvexMeshDesc;
+class NxTriangleMeshDesc;
+class MemoryStream;
+class Mesh;
+class NxHeightField;
+class NxHeightFieldDesc;
+
+class EXPORT_COREMODULE IPhysics : public NonCopyable
+{
+public:
+ // Collision intersection
+ struct RigidBodyState
+ {
+ Vector3f position;
+ Quaternionf rotation;
+ Vector3f velocity;
+ Vector3f avelocity;
+ };
+
+ virtual void SetRigidBodyState( Rigidbody& rigidbody, const RigidBodyState& state ) = 0;
+ virtual void GetRigidBodyState( const Rigidbody& rigidbody, RigidBodyState* result) = 0;
+ virtual Vector3f GetRigidBodyVelocity( const Rigidbody& rigidbody) = 0;
+ virtual Vector3f GetGravity() = 0;
+
+ virtual void* CreateNxMeshFromNxStream(bool convex, const NxStream& stream) = 0;
+
+ virtual void ReleaseNxTriangleMesh(NxTriangleMesh& mesh) = 0;
+ virtual void ReleaseNxConvexMesh(NxConvexMesh& mesh) = 0;
+
+ virtual void CapsuleColliderSetHeight(CapsuleCollider& collider, float height) = 0;
+
+ virtual ScriptingObjectPtr ConvertContactToMono (Collision* input) = 0;
+ virtual int GetColliderMaterialInstanceID(Collider& collider) = 0;
+ virtual int GetColliderSharedMeshInstanceID(MeshCollider& collider) = 0;
+
+ virtual bool CreateNxStreamFromUnityMesh (Mesh* mesh, bool convex, const Matrix4x4f& scalematrix, TransformType transformType, MemoryStream& stream ) = 0;
+ virtual void* CreateNxMeshFromUnityMesh (Mesh* mesh, bool convex, const Matrix4x4f& scalematrix, TransformType transformType ) = 0;
+ virtual MemoryStream* CreateNxStreamFromUnityMesh(Mesh& meshData, bool convex) = 0;
+
+ virtual void DeleteMemoryStream(MemoryStream* memory) = 0;
+
+ virtual void ReleaseHeightField(NxHeightField& heightField) = 0;
+ virtual NxHeightField* CreateNxHeightField(NxHeightFieldDesc& desc) = 0;
+
+#if ENABLE_CLOTH
+ virtual void SetUpSkinnedBuffersOnSkinnedCloth (Unity::SkinnedCloth& cloth, void *vertices, void *normals, void *tangents, size_t bufferStride) = 0;
+#endif
+
+#if ENABLE_PROFILER
+ virtual void GetProfilerStats(PhysicsStats& stats) = 0;
+#endif
+};
+
+EXPORT_COREMODULE IPhysics* GetIPhysics();
+EXPORT_COREMODULE void SetIPhysics(IPhysics* physics); \ No newline at end of file