Skip to content

File jolt_api.hpp

File List > atlas > physics > physics_3d > jolt > jolt_api.hpp

Go to the documentation of this file

#pragma once
#include <core/core.hpp>
#include <flecs.h>
#include <physics/physics_3d/physics_api.hpp>
#include <scene/components.hpp>
#include <physics/jolt-cpp/jolt_components.hpp>

namespace atlas::physics {
    class jolt_api : public physics_api {
    public:
        jolt_api(const jolt_config& p_config,
                 const ref<JPH::PhysicsSystem>& p_physics_system,
                 const flecs::world& p_registery);

    private:
        void retrieve_values() override;

        void return_values() override;

        void add_force(const glm::vec3& p_force,
                       const uint32_t& p_body_id) override;

        void add_linear_velocity(const glm::vec3& p_linear_velocity,
                                 const uint32_t& p_body_id) override;
        void add_angular_velocity(const glm::vec3& p_angular_velocity,
                                  const uint32_t& p_body_id) override;

        void set_linear_velocity(const glm::vec3& p_velocity,
                                 const uint32_t& p_body_id) override;

        void set_angular_velocity(const glm::vec3& p_angular_velocity,
                                  const uint32_t& p_body_id) override;

        jolt_config m_config;
        ref<JPH::PhysicsSystem> m_physics_system;
        flecs::world m_registery;

        flecs::query<transform, collider_body> m_read_transform;
        flecs::query<physics_body> m_read_body;

        flecs::query<transform, collider_body> m_query_transform;
        flecs::query<physics_body> m_query_body;
    };
};