moved room changing code to collision_scene in its own function

This commit is contained in:
Weston Salinas 2023-03-22 15:32:11 -05:00
parent ac697d8114
commit e6ce03faef
2 changed files with 11 additions and 4 deletions

View file

@ -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);
}

View file

@ -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;