From e6ce03faefc1830041daa6be84257964761ec49d Mon Sep 17 00:00:00 2001 From: Weston Salinas Date: Wed, 22 Mar 2023 15:32:11 -0500 Subject: [PATCH] moved room changing code to collision_scene in its own function --- src/physics/collision_scene.c | 11 +++++++++++ src/player/player.c | 4 ---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/physics/collision_scene.c b/src/physics/collision_scene.c index f2dcfbe..ba6a0f6 100644 --- a/src/physics/collision_scene.c +++ b/src/physics/collision_scene.c @@ -6,6 +6,7 @@ #include "contact_solver.h" #include "../util/memory.h" #include "../scene/portal.h" +#include "../levels/levels.h" struct CollisionScene gCollisionScene; @@ -570,7 +571,15 @@ void collisionSceneWalkBroadphase(struct CollisionScene* collisionScene, struct } } +void collisionSceneUpdateObjectCurrentRooms(struct Vector3* prevPosList){ + for (unsigned i = 0; i < gCollisionScene.dynamicObjectCount; ++i) { + int doorwayMask = worldCheckDoorwaySides(&gCurrentLevel->world, &prevPosList[i], gCollisionScene.dynamicObjects[i]->body->currentRoom); + gCollisionScene.dynamicObjects[i]->body->currentRoom = worldCheckDoorwayCrossings(&gCurrentLevel->world, &gCollisionScene.dynamicObjects[i]->body->transform.position, gCollisionScene.dynamicObjects[i]->body->currentRoom, doorwayMask); + } +} + void collisionSceneCollideDynamicPairs(struct CollisionScene* collisionScene, struct Vector3* prevPos, struct Box3D* sweptBB) { + struct DynamicBroadphase dynamicBroadphase; dynamicBroadphase.edges = stackMalloc(sizeof(union DynamicBroadphaseEdge) * collisionScene->dynamicObjectCount * 2); @@ -585,6 +594,8 @@ void collisionSceneCollideDynamicPairs(struct CollisionScene* collisionScene, st collisionSceneWalkBroadphase(collisionScene, &dynamicBroadphase, prevPos, sweptBB); + collisionSceneUpdateObjectCurrentRooms(prevPos); + stackMallocFree(dynamicBroadphase.objectsInCurrentRange); stackMallocFree(dynamicBroadphase.edges); } diff --git a/src/player/player.c b/src/player/player.c index 8916602..ead1d2a 100644 --- a/src/player/player.c +++ b/src/player/player.c @@ -728,11 +728,7 @@ void playerUpdate(struct Player* player, struct Transform* cameraTransform) { cameraTransform->position.y += DEAD_OFFSET; } - int prev_room = player->body.currentRoom; player->body.currentRoom = worldCheckDoorwayCrossings(&gCurrentLevel->world, &player->lookTransform.position, player->body.currentRoom, doorwayMask); - if (playerIsGrabbing(player) && prev_room != player->body.currentRoom){ - player->grabConstraint.object->body->currentRoom = player->body.currentRoom; - } dynamicSceneSetRoomFlags(player->dynamicId, ROOM_FLAG_FROM_INDEX(player->body.currentRoom)); float startTime = 0.0f;