From 374abb27d3adfa50c48711e5576b285336c2c2e8 Mon Sep 17 00:00:00 2001 From: MontyTRC89 Date: Sat, 7 Dec 2024 05:02:09 +0100 Subject: [PATCH] Implemented mirrors in file format --- TombEngine/Renderer/RendererFrame.cpp | 7 ++-- .../Renderer/Structures/RendererMirror.h | 1 - TombEngine/Specific/level.cpp | 33 +++++++++++-------- TombEngine/Specific/level.h | 4 +-- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/TombEngine/Renderer/RendererFrame.cpp b/TombEngine/Renderer/RendererFrame.cpp index e42f1b387..63a9e9ec0 100644 --- a/TombEngine/Renderer/RendererFrame.cpp +++ b/TombEngine/Renderer/RendererFrame.cpp @@ -154,8 +154,11 @@ namespace TEN::Renderer { RendererMirror rendererMirror; rendererMirror.RoomNumber = mirror.RoomNumber; - rendererMirror.MirroredRoomNumber = mirror.MirroredRoomNumber; - rendererMirror.Plane = mirror.MirrorPlane; + rendererMirror.Plane = Plane( + Vector3(mirror.MirrorPlane.x, + mirror.MirrorPlane.y, + mirror.MirrorPlane.z), + mirror.MirrorPlane.w); rendererMirror.ReflectionMatrix = Matrix::CreateReflection(rendererMirror.Plane); renderView.Mirrors.push_back(rendererMirror); } diff --git a/TombEngine/Renderer/Structures/RendererMirror.h b/TombEngine/Renderer/Structures/RendererMirror.h index 42ed41064..b96f99272 100644 --- a/TombEngine/Renderer/Structures/RendererMirror.h +++ b/TombEngine/Renderer/Structures/RendererMirror.h @@ -9,7 +9,6 @@ namespace TEN::Renderer::Structures struct RendererMirror { short RoomNumber; - short MirroredRoomNumber; Plane Plane; Matrix ReflectionMatrix; }; diff --git a/TombEngine/Specific/level.cpp b/TombEngine/Specific/level.cpp index 35efad26c..2ec8bcf18 100644 --- a/TombEngine/Specific/level.cpp +++ b/TombEngine/Specific/level.cpp @@ -980,6 +980,7 @@ void FreeLevel(bool partial) g_Level.VolumeEventSets.resize(0); g_Level.GlobalEventSets.resize(0); g_Level.LoopedEventSetIndices.resize(0); + g_Level.Mirrors.resize(0); g_GameScript->FreeLevelScripts(); g_GameScriptEntities->FreeEntities(); @@ -1363,6 +1364,7 @@ bool LoadLevel(const std::string& path, bool partial) LoadSprites(); LoadBoxes(); + LoadMirrors(); LoadAnimatedTextures(); UpdateProgress(70); @@ -1408,20 +1410,6 @@ bool LoadLevel(const std::string& path, bool partial) UpdateProgress(100, partial); - // MIRROR: remove after TE changes - g_Level.Mirrors.clear(); - - MirrorInfo mirror; - mirror.RoomNumber = 17; - mirror.MirrorPlane = Plane(Vector3(BLOCK(10), 0, 0), Vector3(-1, 0, 0)); - g_Level.Mirrors.push_back(mirror); - - //mirror.MirrorPlane = Plane(Vector3(0, 0, 30000), Vector3(0, 0, -1)); - //g_Level.Mirrors.push_back(mirror); - - //mirror.MirrorPlane = Plane(Vector3(0, -2048, 0), Vector3(0,-1, 0)); - //g_Level.Mirrors.push_back(mirror); - TENLog("Level loading complete.", LogLevel::Info); loadedSuccessfully = true; @@ -1531,6 +1519,23 @@ void LoadBoxes() } } +void LoadMirrors() +{ + int mirrorCount = ReadCount(CUBE(1024)); + TENLog("Mirror count: " + std::to_string(mirrorCount), LogLevel::Info); + g_Level.Mirrors.reserve(mirrorCount); + for (int i = 0; i < mirrorCount; i++) + { + auto& mirror = g_Level.Mirrors.emplace_back(); + + mirror.RoomNumber = ReadInt16(); + mirror.MirrorPlane.x = ReadFloat(); + mirror.MirrorPlane.y = ReadFloat(); + mirror.MirrorPlane.z = ReadFloat(); + mirror.MirrorPlane.w = ReadFloat(); + } +} + bool LoadLevelFile(int levelIndex) { const auto& level = *g_GameFlow->GetLevel(levelIndex); diff --git a/TombEngine/Specific/level.h b/TombEngine/Specific/level.h index efb7ac3e9..4504bb6a2 100644 --- a/TombEngine/Specific/level.h +++ b/TombEngine/Specific/level.h @@ -88,8 +88,7 @@ struct MESH struct MirrorInfo { short RoomNumber; - short MirroredRoomNumber; - Plane MirrorPlane; + Vector4 MirrorPlane; }; // LevelData @@ -172,6 +171,7 @@ void LoadSoundSources(); void LoadAnimatedTextures(); void LoadEventSets(); void LoadAIObjects(); +void LoadMirrors(); void LoadPortal(ROOM_INFO& room);