#pragma once #include "Hitbox.hpp" #include "typedefs.hpp" #include "voxels/voxel.hpp" #include #include class Block; class Entities; class GlobalChunks; struct Sensor; class PhysicsSolver { public: PhysicsSolver(glm::vec3 gravity); void step( const GlobalChunks& chunks, float delta, uint substeps ); auto& getSensorsWriteable() { return sensors; } auto& getSolidHitboxesWriteable() { return solidHitboxes; } auto& getHitboxesWriteable() { return hitboxes; } void removeSensor(Sensor* sensor); private: glm::vec3 gravity; std::vector sensors; std::vector solidHitboxes; std::vector hitboxes; void calcCollisions( const GlobalChunks& chunks, Hitbox& hitbox, glm::vec3& vel, glm::vec3& pos, const glm::vec3& half, float stepHeight ); void calcSubstep( const GlobalChunks& chunks, Hitbox& hitbox, glm::vec3& vel, glm::vec3& pos, float dt, int substeps ); };