3#include "pixelbullet/serialization/glm_node.h"
4#include "pixelbullet/serialization/node.h"
6#include <glm/gtc/quaternion.hpp>
12enum class ColliderShapeType
19enum class RigidBodyMotionType
30 [[nodiscard]]
explicit operator bool()
const noexcept
40 glm::vec3 position = glm::vec3(0.0f);
41 glm::quat rotation = glm::quat(1.0f, 0.0f, 0.0f, 0.0f);
43 [[nodiscard]]
bool operator==(
const PhysicsBodyPose&)
const noexcept =
default;
48 ColliderShapeType shape = ColliderShapeType::Box;
49 glm::vec3 box_half_extents = glm::vec3(0.5f);
50 float sphere_radius = 0.5f;
51 float capsule_radius = 0.5f;
52 float capsule_half_height = 0.5f;
53 glm::vec3 center = glm::vec3(0.0f);
54 float friction = 0.5f;
55 float restitution = 0.0f;
56 bool is_trigger =
false;
61enum class PhysicsTriggerEventType
71 PhysicsTriggerEventType type = PhysicsTriggerEventType::Enter;
80 bool has_rigid_body =
false;
81 RigidBodyMotionType motion_type = RigidBodyMotionType::Static;
83 float linear_damping = 0.05f;
84 float angular_damping = 0.05f;
85 float gravity_scale = 1.0f;
93 glm::vec3 position = glm::vec3(0.0f);
94 glm::vec3 normal = glm::vec3(0.0f, 1.0f, 0.0f);
95 float fraction = 0.0f;
96 float penetration_depth = 0.0f;
98 [[nodiscard]]
bool operator==(
const PhysicsSweepHit&)
const noexcept =
default;
104 glm::vec3 position = glm::vec3(0.0f);
105 float fraction = 0.0f;
107 [[nodiscard]]
bool operator==(
const PhysicsRayHit&)
const noexcept =
default;
110inline Node& operator<<(
Node& node,
const ColliderShapeType& value)
114 case ColliderShapeType::Box:
117 case ColliderShapeType::Sphere:
120 case ColliderShapeType::Capsule:
127inline const Node& operator>>(
const Node& node, ColliderShapeType& value)
129 std::string serialized;
131 if (serialized ==
"Sphere")
133 value = ColliderShapeType::Sphere;
135 else if (serialized ==
"Capsule")
137 value = ColliderShapeType::Capsule;
141 value = ColliderShapeType::Box;
146inline Node& operator<<(
Node& node,
const RigidBodyMotionType& value)
150 case RigidBodyMotionType::Static:
153 case RigidBodyMotionType::Kinematic:
156 case RigidBodyMotionType::Dynamic:
163inline const Node& operator>>(
const Node& node, RigidBodyMotionType& value)
165 std::string serialized;
167 if (serialized ==
"Kinematic")
169 value = RigidBodyMotionType::Kinematic;
171 else if (serialized ==
"Dynamic")
173 value = RigidBodyMotionType::Dynamic;
177 value = RigidBodyMotionType::Static;
Represents a hierarchical node capable of storing various data types and supporting YAML serializatio...
Definition node.h:45
Definition physics_types.h:77
Definition physics_types.h:27
Definition physics_types.h:39
Definition physics_types.h:47
Definition physics_types.h:102
Definition physics_types.h:91
Definition physics_types.h:68