Tramway SDK
collisionshape.h
Go to the documentation of this file.
1// Tramway Drifting and Dungeon Exploration Simulator SDK Runtime
2
3#ifndef TRAM_SDK_PHYSICS_COLLISIONSHAPE_H
4#define TRAM_SDK_PHYSICS_COLLISIONSHAPE_H
5
6#include <framework/math.h>
7
16namespace tram::Physics {
17
18enum Shape : uint32_t {
26};
27
30};
31
34
35 union {
36 struct {
37 union {
38 float radius;
39 float radius_x;
40 float extent_x;
41 };
42
43 union {
44 float height;
45 float extent_y;
46 };
47
48 union {
49 float extent_z;
50 float radius_z;
51 };
52 };
53
54 struct {
56 size_t hull_size;
57 };
58
59 struct {
61 size_t mesh_size;
62 };
63 };
64
65 static inline CollisionShape Sphere(float radius);
66 static inline CollisionShape Cylinder(float radius, float height);
67 static inline CollisionShape Capsule(float radius, float height);
68 static inline CollisionShape Cone(float radius, float height);
69 static inline CollisionShape Box(vec3 dimensions);
70 static inline CollisionShape Hull(vec3* points, size_t size);
71 static inline CollisionShape Mesh(CollisionTriangle* triangles, size_t size);
72};
73
76 return {SHAPE_SPHERE, radius, 0.0f, 0.0f};
77}
78
80CollisionShape CollisionShape::Cylinder(float radius, float height) {
82}
83
85CollisionShape CollisionShape::Capsule(float radius, float height) {
86 return {SHAPE_CAPSULE, radius, height, 0.0f};
87}
88
90CollisionShape CollisionShape::Cone(float radius, float height) {
91 return {SHAPE_CONE, radius, height, 0.0f};
92}
93
96 return {SHAPE_BOX, dimensions.x, dimensions.y, dimensions.z};
97}
98
103 return CollisionShape {.type = SHAPE_HULL, .hull_points = points, .hull_size = size};
104}
105
110 return CollisionShape {.type = SHAPE_MESH, .mesh_triangles = triangles, .mesh_size = size};
111}
112
113}
114
115#endif // TRAM_SDK_PHYSICS_COLLISIONSHAPE_H
Shape
Definition: collisionshape.h:18
@ SHAPE_CONE
Definition: collisionshape.h:22
@ SHAPE_SPHERE
Definition: collisionshape.h:19
@ SHAPE_CAPSULE
Definition: collisionshape.h:21
@ SHAPE_MESH
Definition: collisionshape.h:25
@ SHAPE_BOX
Definition: collisionshape.h:23
@ SHAPE_HULL
Definition: collisionshape.h:24
@ SHAPE_CYLINDER
Definition: collisionshape.h:20
glm::vec3 vec3
Definition: math.h:11
Shape for a collider.
Definition: collisionshape.h:32
float radius_x
Definition: collisionshape.h:39
static CollisionShape Cylinder(float radius, float height)
Creates a cylinder.
Definition: collisionshape.h:80
static CollisionShape Sphere(float radius)
Creates a sphere.
Definition: collisionshape.h:75
float height
Definition: collisionshape.h:44
static CollisionShape Box(vec3 dimensions)
Creates a box.
Definition: collisionshape.h:95
float radius
Definition: collisionshape.h:38
float extent_x
Definition: collisionshape.h:40
size_t hull_size
Definition: collisionshape.h:56
vec3 * hull_points
Definition: collisionshape.h:55
static CollisionShape Cone(float radius, float height)
Creates a cone.
Definition: collisionshape.h:90
CollisionTriangle * mesh_triangles
Definition: collisionshape.h:60
float extent_z
Definition: collisionshape.h:49
static CollisionShape Hull(vec3 *points, size_t size)
Creates a convex hull.
Definition: collisionshape.h:102
float radius_z
Definition: collisionshape.h:50
float extent_y
Definition: collisionshape.h:45
static CollisionShape Mesh(CollisionTriangle *triangles, size_t size)
Creates a triangle mesh.
Definition: collisionshape.h:109
Shape type
Definition: collisionshape.h:33
size_t mesh_size
Definition: collisionshape.h:61
static CollisionShape Capsule(float radius, float height)
Creates a capsule.
Definition: collisionshape.h:85
Definition: collisionshape.h:28
vec3 p2
Definition: collisionshape.h:29
vec3 p1
Definition: collisionshape.h:29
vec3 p0
Definition: collisionshape.h:29