From 38b478bc8d85ae2607805c29c30d70401bc8a7cf Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 11 Mar 2026 22:13:41 +0300 Subject: [PATCH] cleanup --- src/physics/Hitbox.cpp | 2 -- src/physics/PhysicsSolver.cpp | 61 ++++++++++++++++++----------------- src/physics/PhysicsSolver.hpp | 2 ++ 3 files changed, 34 insertions(+), 31 deletions(-) diff --git a/src/physics/Hitbox.cpp b/src/physics/Hitbox.cpp index e9e18ce58..f49e0c2b8 100644 --- a/src/physics/Hitbox.cpp +++ b/src/physics/Hitbox.cpp @@ -1,7 +1,5 @@ #include "Hitbox.hpp" -#include - Hitbox::Hitbox( entityid_t entity, BodyType type, glm::vec3 position, glm::vec3 halfsize ) diff --git a/src/physics/PhysicsSolver.cpp b/src/physics/PhysicsSolver.cpp index cf44024f1..cc0986364 100644 --- a/src/physics/PhysicsSolver.cpp +++ b/src/physics/PhysicsSolver.cpp @@ -392,9 +392,8 @@ void PhysicsSolver::step( for (auto hitbox : hitboxes) { float linearDamping = hitbox->linearDamping * hitbox->friction; - glm::vec3& pos = hitbox->position; - glm::vec3& vel = hitbox->velocity; + glm::vec3& vel = hitbox->velocity; vel.x /= 1.0f + delta * linearDamping; vel.z /= 1.0f + delta * linearDamping; if (hitbox->verticalDamping > 0.0f) { @@ -406,39 +405,43 @@ void PhysicsSolver::step( hitbox->groundVelocity = {}; } - AABB aabb; - aabb.a = pos - hitbox->getHalfSize(); - aabb.b = pos + hitbox->getHalfSize(); - for (size_t i = 0; i < sensors.size(); i++) { - auto& sensor = *sensors[i]; - if (sensor.entity == hitbox->entity) { - continue; - } - bool triggered = false; - switch (sensor.type) { - case SensorType::AABB: - triggered = aabb.intersects(sensor.calculated.aabb); - break; - case SensorType::RADIUS: - triggered = glm::distance2( - pos, glm::vec3(sensor.calculated.radial)) - < sensor.calculated.radial.w; - break; - } - if (!triggered) { - continue; - } - if (sensor.prevEntered.find(hitbox->entity) == sensor.prevEntered.end()) { - sensor.enterCallback(sensor.entity, sensor.index, hitbox->entity); - } - sensor.nextEntered.insert(hitbox->entity); - } + updateSensors(*hitbox); hitbox->friction = glm::abs(hitbox->gravityScale <= 1e-7f) ? 8.0f : (!hitbox->prevGrounded ? 2.0f : 10.0f); } } + +void PhysicsSolver::updateSensors(Hitbox& hitbox) { + auto aabb = hitbox.getAABB(); + + for (size_t i = 0; i < sensors.size(); i++) { + auto& sensor = *sensors[i]; + if (sensor.entity == hitbox.entity) { + continue; + } + bool triggered = false; + switch (sensor.type) { + case SensorType::AABB: + triggered = aabb.intersects(sensor.calculated.aabb); + break; + case SensorType::RADIUS: + triggered = glm::distance2( + hitbox.position, glm::vec3(sensor.calculated.radial)) + < sensor.calculated.radial.w; + break; + } + if (!triggered) { + continue; + } + if (sensor.prevEntered.find(hitbox.entity) == sensor.prevEntered.end()) { + sensor.enterCallback(sensor.entity, sensor.index, hitbox.entity); + } + sensor.nextEntered.insert(hitbox.entity); + } +} + void PhysicsSolver::removeSensor(Sensor* sensor) { sensors.erase( std::remove(sensors.begin(), sensors.end(), sensor), sensors.end() diff --git a/src/physics/PhysicsSolver.hpp b/src/physics/PhysicsSolver.hpp index ee02f052b..3d167befd 100644 --- a/src/physics/PhysicsSolver.hpp +++ b/src/physics/PhysicsSolver.hpp @@ -58,4 +58,6 @@ private: float dt, int substeps ); + + void updateSensors(Hitbox& hitbox); };