MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / CollectRooms

Method CollectRooms

TombEngine/Renderer/RendererFrame.cpp:33–192  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31 using TEN::Memory::LinearArrayBuffer;
32
33 void Renderer::CollectRooms(RenderView& renderView, bool onlyRooms)
34 {
35 constexpr auto VIEW_PORT = Vector4(-1.0f, -1.0f, 1.0f, 1.0f);
36
37 _visitedRoomsStack.clear();
38
39 for (int i = 0; i < g_Level.Rooms.size(); i++)
40 {
41 auto& room = _rooms[i];
42
43 room.ItemsToDraw.clear();
44 room.EffectsToDraw.clear();
45 room.StaticsToDraw.clear();
46 room.LightsToDraw.clear();
47 room.Decals.clear();
48 room.Visited = false;
49 room.ViewPort = VIEW_PORT;
50
51 for (auto& door : room.Doors)
52 {
53 door.Visited = false;
54 door.InvisibleFromCamera = false;
55 door.DotProduct = FLT_MAX;
56 }
57 }
58
59 GetVisibleRooms(NO_VALUE, renderView.Camera.RoomNumber, VIEW_PORT, false, 0, onlyRooms, renderView);
60
61 _invalidateCache = false;
62
63 bool laraFound = false;
64
65 for (auto* roomPtr : renderView.RoomsToDraw)
66 {
67 // Prepare real DX scissor test rectangle.
68 roomPtr->ClipBounds.Left = (roomPtr->ViewPort.x + 1.0f) * _screenWidth * 0.5f;
69 roomPtr->ClipBounds.Bottom = (1.0f - roomPtr->ViewPort.y) * _screenHeight * 0.5f;
70 roomPtr->ClipBounds.Right = (roomPtr->ViewPort.z + 1.0f) * _screenWidth * 0.5f;
71 roomPtr->ClipBounds.Top = (1.0f - roomPtr->ViewPort.w) * _screenHeight * 0.5f;
72
73 // Indicate that Lara object is found.
74 if (roomPtr->RoomNumber == LaraItem->RoomNumber)
75 laraFound = true;
76 }
77
78 // HACK: Force adding Lara's room to room list, in case she is in one of camera's neighbor rooms.
79 if (!laraFound && Contains(_rooms[renderView.Camera.RoomNumber].Neighbors, (int)LaraItem->RoomNumber))
80 {
81 renderView.RoomsToDraw.push_back(&_rooms[LaraItem->RoomNumber]);
82 CollectItems(LaraItem->RoomNumber, renderView);
83 }
84
85 // Collect fog bulbs.
86 std::vector<RendererFogBulb> tempFogBulbs;
87 tempFogBulbs.reserve(MAX_FOG_BULBS_DRAW);
88
89 for (auto& light : _dynamicLights[_dynamicLightList])
90 {

Callers

nothing calls this directly

Calls 13

ContainsFunction · 0.85
SphereInFrustumMethod · 0.80
ActiveMethod · 0.80
Vector4Function · 0.50
clearMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45
reserveMethod · 0.45
LengthMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
NormalizeMethod · 0.45

Tested by

no test coverage detected