vkmEngine 1.0.0
A C++ game engine · vkmengine.com
Loading...
Searching...
No Matches
rigidbody.h
1#pragma once
2
3#include <cstdint>
4
5#include <glm/glm.hpp>
6
7#include "core/reflect.h"
8
9namespace Vkm::Engine {
10
16enum class RigidbodyMotion : uint8_t {
17 Dynamic = 0,
18 Kinematic = 1,
19 Static = 2,
20 Count
21};
22
31struct Rigidbody {
32 glm::vec3 linearVelocity = {0.0f, 0.0f, 0.0f};
33 glm::vec3 angularVelocity = {0.0f, 0.0f, 0.0f};
34
42 RigidbodyMotion motion = RigidbodyMotion::Dynamic;
43
46 float mass = 1.0f;
47
48 float linearDamping = 0.01f;
49 float angularDamping = 0.05f;
50
51 float restitution = 0.2f;
52 float friction = 0.5f;
53
54 float gravityScale = 1.0f;
55
61 int layer = 1;
62
68 int collidesWith = ~0;
69
70 bool freezeRotation = false;
71 bool canSleep = true;
72 bool sleeping = false;
73
74 float sleepTimer = 0.0f;
75
83 glm::vec3 supportNormal = {0.0f, 1.0f, 0.0f};
84 bool supported = false;
85
91 glm::vec3 blockNormal = {0.0f, 1.0f, 0.0f};
92
100 static void wake(Rigidbody& rb) {
101 rb.sleeping = false;
102 rb.sleepTimer = 0.0f;
103 }
104};
105
106} // namespace Vkm::Engine
107
108VKM_ENUM_NAMES(::Vkm::Engine::RigidbodyMotion, "Dynamic", "Kinematic", "Static")
109
110// sleeping / sleepTimer / supported / supportNormal / blockNormal are runtime-only.
111VKM_REFLECT_BEGIN(::Vkm::Engine::Rigidbody)
112 VKM_F(linearVelocity)
113 VKM_F(angularVelocity)
114 VKM_F(motion)
115 VKM_F(mass)
116 VKM_F(linearDamping)
117 VKM_F(angularDamping)
118 VKM_F(restitution)
119 VKM_F(friction)
120 VKM_F(gravityScale)
121 VKM_F(layer)
122 VKM_F(collidesWith)
123 VKM_F(freezeRotation)
124 VKM_F(canSleep)
125VKM_REFLECT_END()
Dynamics state for a physics body: motion, material response and mass.
Definition rigidbody.h:31
RigidbodyMotion motion
How the solver moves it.
Definition rigidbody.h:42
float linearDamping
Per-second velocity bleed (drag)
Definition rigidbody.h:48
glm::vec3 blockNormal
The most horizontal normal among the same contacts: what blocks this body.
Definition rigidbody.h:91
int collidesWith
Which layers this body collides with, as a mask of their bits.
Definition rigidbody.h:68
glm::vec3 angularVelocity
World-space spin (rad/s, axis * speed)
Definition rigidbody.h:33
int layer
Which group this body belongs to, as a single bit; paired with collidesWith.
Definition rigidbody.h:61
float mass
Definition rigidbody.h:46
glm::vec3 supportNormal
Whether a resolved contact reached this body last tick, and the most upward normal among them.
Definition rigidbody.h:83
bool canSleep
False keeps a script-driven body responsive.
Definition rigidbody.h:71
float gravityScale
Multiplier on world gravity (0 = floats)
Definition rigidbody.h:54
bool freezeRotation
Contacts never torque the body (character controllers)
Definition rigidbody.h:70
bool sleeping
Rested long enough; skipped until disturbed.
Definition rigidbody.h:72
static void wake(Rigidbody &rb)
Wake a sleeping body so the next tick moves it.
Definition rigidbody.h:100
float angularDamping
Per-second spin bleed.
Definition rigidbody.h:49
float restitution
Bounciness [0,1].
Definition rigidbody.h:51
float sleepTimer
Runtime-only: seconds spent resting.
Definition rigidbody.h:74
glm::vec3 linearVelocity
World-space velocity (m/s)
Definition rigidbody.h:32
float friction
Coulomb coefficient [0,1+].
Definition rigidbody.h:52