#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(const GlobalChunks& chunks, 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: const GlobalChunks& chunks; glm::vec3 gravity; std::vector sensors; std::vector solidHitboxes; std::vector hitboxes; void calcCollisions( Hitbox& hitbox, glm::vec3& vel, glm::vec3& pos, const glm::vec3& half, float stepHeight, float dt ); void calcSubstep(Hitbox& hitbox, glm::vec3& vel, glm::vec3& pos, float dt); bool calcCollisionNegY(Hitbox& hitbox, const glm::vec3& half, float dt); void updateSensors(Hitbox& hitbox); };