Add initial prototype.

This commit is contained in:
Rod Kay
2022-07-31 17:34:54 +10:00
commit 54a53b2ac0
1421 changed files with 358874 additions and 0 deletions

View File

@@ -0,0 +1,234 @@
#include "bullet-shape.h"
#include "bullet-space.h"
#include <btBulletDynamicsCommon.h>
#include <BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h>
///////////
// Utility
//
btCollisionShape*
to_bullet (Shape* From)
{
return (btCollisionShape*) From;
}
Shape*
to_bt3 (btCollisionShape* From)
{
return (Shape*) From;
}
extern "C"
{
/////////
// Forge
//
Shape*
b3d_new_Box (Vector_3* half_Extents)
{
Shape* Self = (Shape*)(btCollisionShape*) (new btBoxShape (btVector3 (half_Extents->x,
half_Extents->y,
half_Extents->z)));
return Self;
}
Shape*
b3d_new_Capsule (Vector_2* Radii,
Real Height)
{
Shape* Self = (Shape*)(btCollisionShape*) (new btCapsuleShapeZ (Radii->x,
Height));
return Self;
}
Shape*
b3d_new_Cone (Real Radius,
Real Height)
{
Shape* Self = (Shape*)(btCollisionShape*) (new btConeShape (Radius, Height));
return Self;
}
Shape*
b3d_new_convex_Hull (Vector_3 Points[],
int point_Count)
{
btConvexHullShape* bt_Hull = new btConvexHullShape ();
for (int i = 0; i < point_Count; i++)
{
bt_Hull->addPoint (btVector3 (Points [i].x,
Points [i].y,
Points [i].z));
}
Shape* Self = (Shape*)(btCollisionShape*) bt_Hull;
return Self;
}
Shape*
b3d_new_Mesh (Vector_3 Points[],
int point_Count,
Triangle Triangles[],
int triangle_Count)
{
btTriangleMesh* mesh = new btTriangleMesh();
for (int i = 0; i < triangle_Count; i++)
{
btVector3 bV1, bV2, bV3;
bV1 [0] = Points [Triangles [i].a - 1].x;
bV1 [1] = Points [Triangles [i].a - 1].y;
bV1 [2] = Points [Triangles [i].a - 1].z;
bV2 [0] = Points [Triangles [i].b - 1].x;
bV2 [1] = Points [Triangles [i].b - 1].y;
bV2 [2] = Points [Triangles [i].b - 1].z;
bV3 [0] = Points [Triangles [i].c - 1].x;
bV3 [1] = Points [Triangles [i].c - 1].y;
bV3 [2] = Points [Triangles [i].c - 1].z;
mesh->addTriangle (bV1, bV2, bV3);
}
btBvhTriangleMeshShape* bt_Mesh = new btBvhTriangleMeshShape (mesh, true, true);
Shape* Self = (Shape*)(btCollisionShape*) bt_Mesh;
return Self;
}
Shape*
b3d_new_Cylinder (Vector_3* half_Extents)
{
Shape* Self = (Shape*)(btCollisionShape*) (new btCylinderShape (btVector3 (half_Extents->x,
half_Extents->y,
half_Extents->z)));
return Self;
}
Shape*
b3d_new_Heightfield (int Width,
int Depth,
Real Heights[],
Real min_Height,
Real max_Height,
Vector_3* Scale)
{
btCollisionShape* Self = (btCollisionShape*) (new btHeightfieldTerrainShape (Width, Depth,
Heights,
1.0,
min_Height, max_Height,
1, PHY_FLOAT, 0));
Self->setLocalScaling (btVector3 (Scale->x,
Scale->y,
Scale->z));
return (Shape*) Self;;
}
Shape*
b3d_new_multiSphere (Vector_3* Positions,
Real* Radii,
int sphere_Count)
{
btVector3 bt_Positions [sphere_Count];
for (int i=0; i < sphere_Count; i++)
{
bt_Positions [i][0] = Positions [i].x;
bt_Positions [i][1] = Positions [i].y;
bt_Positions [i][2] = Positions [i].z;
}
Shape* Self = (Shape*)(btCollisionShape*) (new btMultiSphereShape (bt_Positions,
Radii,
sphere_Count));
return Self;
}
Shape*
b3d_new_Plane (Vector_3* Normal,
Real Offset)
{
Shape* Self = (Shape*)(btCollisionShape*) (new btStaticPlaneShape (btVector3 (Normal->x,
Normal->y,
Normal->z),
Offset));
return Self;
}
Shape*
b3d_new_Sphere (Real Radius)
{
Shape* Self = (Shape*)(btCollisionShape*) (new btSphereShape (Radius));
return Self;
}
//////////////
// Attributes
//
void*
b3d_Shape_user_Data (Shape* Self)
{
btCollisionShape* the_Shape = to_bullet (Self);
return the_Shape->getUserPointer();
}
void
b3d_Shape_user_Data_is (Shape* Self, void* Now)
{
btCollisionShape* the_Shape = to_bullet (Self);
the_Shape->setUserPointer (Now);
}
} // extern "C"