#include "physics.h" #include "game.h" #include "utils.h" extern Game game; void MoveAndSlide(Entity* e, float deltaTime) { Vector2 velocity = e->velocity; Rectangle physicsCollider = GetPhysicsColliderGlobal(e); physicsCollider.x += e->velocity.x * deltaTime; for (int i = 0; i < MAX_ENTITY_COUNT; i++) { Entity* other = &game.entities[i]; if(!PhysicsEnabled(other) || SameEntity(other, e)) continue; Rectangle otherCollider = GetPhysicsColliderGlobal(other); if(CheckCollisionRecs(physicsCollider, otherCollider)) { if (velocity.x > 0) { physicsCollider.x = otherCollider.x - physicsCollider.width; } else { physicsCollider.x = otherCollider.x + otherCollider.width; } } } physicsCollider.y += e->velocity.y * deltaTime; for (int i = 0; i < MAX_ENTITY_COUNT; i++) { Entity* other = &game.entities[i]; if(!PhysicsEnabled(other) || SameEntity(other, e)) continue; Rectangle otherCollider = GetPhysicsColliderGlobal(other); if(CheckCollisionRecs(physicsCollider, otherCollider)) { if (velocity.y > 0) { physicsCollider.y = otherCollider.y - physicsCollider.height; } else { physicsCollider.y = otherCollider.y + otherCollider.height; } } } e->position.x = physicsCollider.x; e->position.y = physicsCollider.y; } #ifdef BEATEMUP_DEBUG void DebugHighlights(const Entity* e) { if (!PhysicsEnabled(e)) return; Rectangle dstRect = GetPhysicsColliderGlobal(e); Color colliderDrawColor = e->physicsColliderColor; colliderDrawColor.a = 170; DrawRectangle(dstRect.x, dstRect.y, dstRect.width, dstRect.height, colliderDrawColor); } #endif