From 6ccf25476c0fc973581e2114dd659792146af227 Mon Sep 17 00:00:00 2001 From: Safariminer Date: Sat, 7 Jun 2025 22:45:30 -0400 Subject: [PATCH] THE FUCKING COLLISION MATHS ARE CORRECT \o/ --- ProjectMorault/Morault_Player.cpp | 87 ++++++++++++++++++------------- ProjectMorault/main.cpp | 2 + 2 files changed, 54 insertions(+), 35 deletions(-) diff --git a/ProjectMorault/Morault_Player.cpp b/ProjectMorault/Morault_Player.cpp index ae7feef..589464f 100644 --- a/ProjectMorault/Morault_Player.cpp +++ b/ProjectMorault/Morault_Player.cpp @@ -54,52 +54,69 @@ bool qColl(float obesity, Vector3 futurePos, Morault::Maps::Map* map, float rend for (int i = 0; i < map->MapTriangles.size(); i++) { // check wall collisions - if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, 300.0f, Vector2Multiply(map->MapTriangles[i].a, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].b, { renderScale,renderScale })) || CheckCollisionCircleLine({ futurePos.x, futurePos.z }, 300.0f, Vector2Multiply(map->MapTriangles[i].b, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].c, { renderScale,renderScale })) || CheckCollisionCircleLine({ futurePos.x, futurePos.z }, 300.0f, Vector2Multiply(map->MapTriangles[i].c, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].a, { renderScale,renderScale }))) { + if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, 100.0f, Vector2Multiply(map->MapTriangles[i].a, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].b, { renderScale,renderScale })) || CheckCollisionCircleLine({ futurePos.x, futurePos.z }, 300.0f, Vector2Multiply(map->MapTriangles[i].b, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].c, { renderScale,renderScale })) || CheckCollisionCircleLine({ futurePos.x, futurePos.z }, 300.0f, Vector2Multiply(map->MapTriangles[i].c, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].a, { renderScale,renderScale }))) { - if ( - (map->MapTriangles[i].wallAB != "pms:none" || - (map->MapTriangles[currsec].heightFloor < map->MapTriangles[i].heightFloor - ? -(abs(map->MapTriangles[currsec].heightFloor) - abs(map->MapTriangles[i].heightFloor)) < 10 : false)) - && Vector2DotProduct({ -(map->MapTriangles[i].b.y - map->MapTriangles[i].a.y), (map->MapTriangles[i].b.x - map->MapTriangles[i].a.x) }, normalizedVelocity) > 0) { - - int highestFloor = map->MapTriangles[i].heightFloor < map->MapTriangles[currsec].heightFloor ? map->MapTriangles[currsec].heightFloor : map->MapTriangles[i].heightFloor; - if (futurePos.y - 5 >= highestFloor * renderScale && map->MapTriangles[i].wallAB == "pms:none") {} - - else if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, obesity, Vector2Multiply(map->MapTriangles[i].a, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].b, { renderScale,renderScale }))) { + if (map->MapTriangles[i].wallAB != "pms:none") { + if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, obesity, Vector2Multiply(map->MapTriangles[i].a, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].b, { renderScale,renderScale }))) { // futurePos = camera.position; - - // check which is highest - return true; } } - if ( - (map->MapTriangles[i].wallBC != "pms:none" || - (map->MapTriangles[currsec].heightFloor < map->MapTriangles[i].heightFloor - ? -(abs(map->MapTriangles[currsec].heightFloor) - abs(map->MapTriangles[i].heightFloor)) < 10 : false)) - && Vector2DotProduct({ -(map->MapTriangles[i].c.y - map->MapTriangles[i].b.y), (map->MapTriangles[i].c.x - map->MapTriangles[i].b.x) }, normalizedVelocity) > 0) { + if (map->MapTriangles[i].wallBC != "pms:none") { + if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, obesity, Vector2Multiply(map->MapTriangles[i].b, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].c, { renderScale,renderScale }))) { + + return true; + } + } + if (map->MapTriangles[i].wallCA != "pms:none") { + if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, obesity, Vector2Multiply(map->MapTriangles[i].c, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].a, { renderScale,renderScale }))) { + + return true; + } + } + if (map->MapTriangles[i].heightFloor > map->MapTriangles[currsec].heightFloor) { int highestFloor = map->MapTriangles[i].heightFloor < map->MapTriangles[currsec].heightFloor ? map->MapTriangles[currsec].heightFloor : map->MapTriangles[i].heightFloor; - if (futurePos.y - 5 >= highestFloor * renderScale && map->MapTriangles[i].wallAB == "pms:none") {} + if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, obesity, Vector2Multiply(map->MapTriangles[i].a, { renderScale, renderScale }), Vector2Multiply(map->MapTriangles[i].b, { renderScale, renderScale }))) { + if (Vector2DotProduct({ -(map->MapTriangles[i].b.y - map->MapTriangles[i].a.y), (map->MapTriangles[i].b.x - map->MapTriangles[i].a.x) }, normalizedVelocity) > 0) { + + } + else { - else if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, obesity, Vector2Multiply(map->MapTriangles[i].b, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].c, { renderScale,renderScale }))) { - // check which is highest - return true; + if (futurePos.y - 5 > highestFloor * renderScale) { + + } + else return true; + } + } + if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, obesity, Vector2Multiply(map->MapTriangles[i].b, { renderScale, renderScale }), Vector2Multiply(map->MapTriangles[i].c, { renderScale, renderScale }))) { + if (Vector2DotProduct({ -(map->MapTriangles[i].c.y - map->MapTriangles[i].b.y), (map->MapTriangles[i].c.x - map->MapTriangles[i].b.x) }, normalizedVelocity) > 0) { + + } + else { + + + if (futurePos.y - 5 > highestFloor * renderScale) { + + } + else return true; + } + } + if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, obesity, Vector2Multiply(map->MapTriangles[i].c, { renderScale, renderScale }), Vector2Multiply(map->MapTriangles[i].a, { renderScale, renderScale }))) { + if (Vector2DotProduct({ -(map->MapTriangles[i].a.y - map->MapTriangles[i].c.y), (map->MapTriangles[i].a.x - map->MapTriangles[i].c.x) }, normalizedVelocity) > 0) { + + } + else { + + + if (futurePos.y - 5 > highestFloor * renderScale) { + + } + else return true; + } } } - if ( - (map->MapTriangles[i].wallCA != "pms:none" || - (map->MapTriangles[currsec].heightFloor < map->MapTriangles[i].heightFloor - ? -(abs(map->MapTriangles[currsec].heightFloor) - abs(map->MapTriangles[i].heightFloor)) < 10 : false)) - && Vector2DotProduct({ -(map->MapTriangles[i].a.y - map->MapTriangles[i].c.y), (map->MapTriangles[i].a.x - map->MapTriangles[i].c.x) }, normalizedVelocity) > 0) { - int highestFloor = map->MapTriangles[i].heightFloor < map->MapTriangles[currsec].heightFloor ? map->MapTriangles[currsec].heightFloor : map->MapTriangles[i].heightFloor; - if (futurePos.y - 5 >= highestFloor * renderScale && map->MapTriangles[i].wallAB == "pms:none") {} - else if (CheckCollisionCircleLine({ futurePos.x, futurePos.z }, obesity, Vector2Multiply(map->MapTriangles[i].c, { renderScale,renderScale }), Vector2Multiply(map->MapTriangles[i].a, { renderScale,renderScale }))) { - // check which is highest - return true; - } - } } } diff --git a/ProjectMorault/main.cpp b/ProjectMorault/main.cpp index 26a3a70..5eec2e6 100644 --- a/ProjectMorault/main.cpp +++ b/ProjectMorault/main.cpp @@ -74,6 +74,7 @@ int main(int argc, char** argv) { switch(eState){ case GAME: { + if (IsKeyPressed(KEY_E)) { eState = EDITOR; EnableCursor(); @@ -82,6 +83,7 @@ int main(int argc, char** argv) { BeginDrawing(); ClearBackground(BLACK); + DrawRectangleGradientV(0, 0, GetScreenWidth(), GetScreenHeight(), SKYBLUE, BLUE); BeginMode3D(player.controller.camera); // DrawGrid(100, 10);