2#ifndef LIBSBX_PHYSICS_PHYSICS_MODULE_HPP_
3#define LIBSBX_PHYSICS_PHYSICS_MODULE_HPP_
10#include <unordered_map>
12#include <libsbx/utility/logger.hpp>
14#include <libsbx/core/engine.hpp>
15#include <libsbx/core/module.hpp>
17#include <libsbx/containers/octree.hpp>
20#include <libsbx/math/volume.hpp>
23#include <libsbx/scenes/scenes_module.hpp>
25#include <libsbx/scenes/components/global_transform.hpp>
26#include <libsbx/scenes/components/transform.hpp>
27#include <libsbx/scenes/components/id.hpp>
28#include <libsbx/scenes/components/tag.hpp>
29#include <libsbx/scenes/components/relationship.hpp>
31#include <libsbx/physics/shape_collider.hpp>
32#include <libsbx/physics/collision_detection.hpp>
33#include <libsbx/physics/rigidbody.hpp>
35namespace sbx::physics {
39 inline static const auto is_registered = register_module(stage::fixed, dependencies<scenes::scenes_module>{});
47 auto update() ->
void override;
60 struct contact_constraint {
66 std::float_t normal_mass{0.0f};
67 std::float_t tangent1_mass{0.0f};
68 std::float_t tangent2_mass{0.0f};
69 std::float_t bias{0.0f};
70 std::float_t normal_impulse{0.0f};
71 std::float_t tangent1_impulse{0.0f};
72 std::float_t tangent2_impulse{0.0f};
73 std::uint64_t last_seen{0};
76 struct solver_contact {
77 scenes::node node_a{};
78 scenes::node node_b{};
80 contact_constraint constraint{};
83 auto _integrate_velocities(std::float_t dt) -> void;
85 auto _integrate_positions(std::float_t dt) -> void;
87 auto _collision_broad_phase() -> std::vector<collision_pair_type>;
89 auto _collision_narrow_phase(
const std::vector<collision_pair_type>& pairs) -> std::vector<collision>;
91 auto _resolve_collisions(
const std::vector<collision>& collisions, std::float_t dt) -> void;
93 auto _update_character_controllers() -> void;
95 auto _update_cache(
const std::vector<solver_contact>& solver_contacts) -> void;
97 auto _positional_correction(
const std::vector<collision>& collisions) -> void;
99 std::unordered_map<std::size_t, contact_constraint> _contact_cache{};
100 std::uint64_t _solver_tick{0};
Definition: octree.hpp:23
Definition: module.hpp:92
Definition: vector3.hpp:23
Definition: physics_module.hpp:37
Matrix casting and decomposition utilities.
Definition: octree.hpp:133
Definition: collision_detection.hpp:28