Skip to content

Commit a3b0550

Browse files
authored
README + Water -> Liquid (#22)
* Create README.md * Changed naming of water to liquid * Set start project to "Game" * Fixed minimizing and resizing * Update Engine submodule
1 parent 7baf8d0 commit a3b0550

18 files changed

+203
-124
lines changed

README.md

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
## What is Novus
2+
Novus is an MMO Engine.
3+
4+
Currently Novus is developing a game/server solution where our main focus is to be feature complete with the most popular MMOs out there.
5+
Long term, we hope to support many more features.
6+
7+
## The Novus Promise
8+
The project was made with the promise that we would always focus on reliability, redundancy, and performance over convenience. We achieve this through making use of experience, but also applying modern techniques and design patterns.
9+
10+
The end-goal is to provide a game/server setup, capable of tackling all of the limitations set by the current standard. Solving those issues are complicated, but we start by applying a proper foundation for our architecture to allow for better flow of information(data) and performance.
11+
12+
## Novus Discord
13+
The project has an official [Discord](https://discord.gg/gz6FMZa).
14+
You will find the developers to be active on the discord and always up for answering any questions you might have regarding the project. Despite Novus not currently being ready for production level use, we are always welcoming any users that want to try using it.
15+
16+
## Dependencies
17+
* [OpenSSL 1.1.0](https://www.openssl.org/source/)
18+
* [Premake5](https://premake.github.io/)
19+
* [Vulkan 1.1 (or higher)](https://vulkan.lunarg.com/)
20+
21+
## Libraries
22+
Here we include a honorable mention to all the libraries included directly into the source of Novus. You do not need to download these on your own, but we felt it was important to address these as without them, Novus would be a lot more time consuming to develop.
23+
* [All Libraries from Engine](https://github.com/novusengine/Engine)
24+
* [Jolt](https://github.com/jrouwe/JoltPhysics)
25+
26+
## How to build (Microsoft Visual 2022)
27+
>[!TIP]
28+
> It's recommended to fork, clone, and build [Engine](https://github.com/novusengine/Engine) first.
29+
1. Download the dependencies.
30+
2. Fork and clone the repositry
31+
3. Open the project folder and open a terminal within the project's directory.
32+
4. Use the command `premake5 vs2022`
33+
> [!NOTE]
34+
> You can change the files generated by using a different [action](https://premake.github.io/docs/using-premake) than `vs2022`.
35+
5. Open the new `Build` folder and double click the `Game.sln` file.
36+
6. Use `ctrl`+`shift`+`b` to build the solution or right click the solution and select `Build Solution`
37+
7. The solution builds to `../Build/Bin/Game/[BuildConfig]`
38+
39+
## How to use
40+
1. You must take the `Data` folder generated by the `AssetConverter.exe` (see [AssetConverter](https://github.com/novusengine/AssetConverter)) and place it in the `Game/Build/` folder if you plan to run the project from IDE or place it in the `Build/Bin/Game/[BuildConfig]` folder if you wish to directly run the `Game.exe`.
41+
>[!TIP]
42+
>It is highly recommended to [symlink](https://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html) the `Data` folder to avoid copying/moving a large (~16GB) folder.
43+
2. Either run the `Game.exe` or run the project from your IDE.

Source/Game/Game/Editor/MapSelector.cpp

+28
Original file line numberDiff line numberDiff line change
@@ -272,19 +272,47 @@ namespace Editor
272272
mapLoader->LoadMap(internalMapNameHash);
273273
}
274274

275+
if (ImGui::MenuItem("Unload"))
276+
{
277+
MapLoader* mapLoader = ServiceLocator::GetGameRenderer()->GetMapLoader();
278+
mapLoader->UnloadMap();
279+
}
280+
275281
ImGui::EndPopup();
276282
}
277283
else
278284
{
279285
popupMapID = std::numeric_limits<u32>().max();
280286
}
281287

288+
_currentSelectedMapID = currentMapIDSelected;
289+
282290
ImGui::PopID();
283291
}
284292
}
285293

286294
ImGui::EndListBox();
287295
}
296+
297+
f32 mapHandlerButtonWidth = ImGui::GetWindowSize().x * 0.5f - 19.5f; // Black Magic GUI Math
298+
299+
if (ImGui::Button("Load Map", ImVec2(mapHandlerButtonWidth, 50.0f)))
300+
{
301+
MapLoader* mapLoader = ServiceLocator::GetGameRenderer()->GetMapLoader();
302+
303+
const Definitions::Map& map = mapStorage.GetByID(_currentSelectedMapID);
304+
const std::string& internalName = mapStorage.GetString(map.internalName);
305+
306+
u32 internalMapNameHash = StringUtils::fnv1a_32(internalName.c_str(), internalName.length());
307+
mapLoader->LoadMap(internalMapNameHash);
308+
}
309+
310+
ImGui::SameLine();
311+
if (ImGui::Button("Unload Map", ImVec2(mapHandlerButtonWidth, 50.0f)))
312+
{
313+
MapLoader* mapLoader = ServiceLocator::GetGameRenderer()->GetMapLoader();
314+
mapLoader->UnloadMap();
315+
}
288316
}
289317

290318
void MapSelector::DrawImGui()

Source/Game/Game/Editor/MapSelector.h

+2
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,7 @@ namespace Editor
1919
private:
2020
void* _mapIcons[5] = { nullptr };
2121
vec2 _mapIconSizes[5];
22+
23+
u32 _currentSelectedMapID = 0;
2224
};
2325
}

Source/Game/Game/Editor/PerformanceDiagnostics.cpp

+13-13
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include <Game/Rendering/GameRenderer.h>
88
#include <Game/Rendering/Model/ModelRenderer.h>
99
#include <Game/Rendering/Terrain/TerrainRenderer.h>
10-
#include <Game/Rendering/Water/WaterRenderer.h>
10+
#include <Game/Rendering/Liquid/LiquidRenderer.h>
1111
#include <Game/Rendering/Debug/JoltDebugRenderer.h>
1212
#include <Game/Application/EnttRegistries.h>
1313
#include <Game/ECS/Singletons/EngineStats.h>
@@ -554,7 +554,7 @@ namespace Editor
554554
GameRenderer* gameRenderer = ServiceLocator::GetGameRenderer();
555555
TerrainRenderer* terrainRenderer = gameRenderer->GetTerrainRenderer();
556556
ModelRenderer* modelRenderer = gameRenderer->GetModelRenderer();
557-
WaterRenderer* waterRenderer = gameRenderer->GetWaterRenderer();
557+
LiquidRenderer* liquidRenderer = gameRenderer->GetLiquidRenderer();
558558
JoltDebugRenderer* joltDebugRenderer = gameRenderer->GetJoltDebugRenderer();
559559

560560
const std::string rightHeaderText = "Survived / Total (%)";
@@ -591,7 +591,7 @@ namespace Editor
591591
bool viewRendersTerrainCulling = true; // Only main view supports terrain culling so far
592592
bool viewRendersOpaqueModelsCulling = true;
593593
bool viewRendersTransparentModelsCulling = viewID == 0; // Only main view supports transparent cmodel culling so far
594-
bool viewRendersWaterCulling = viewID == 0; // Only main view supports mapObjectgs culling so far
594+
bool viewRendersLiquidCulling = viewID == 0; // Only main view supports mapObjectgs culling so far
595595
bool viewRendersJoltDebug = viewID == 0;
596596

597597
// Terrain
@@ -630,11 +630,11 @@ namespace Editor
630630
DrawCullingResourcesDrawCalls("Model (T)", viewID, cullingResources, viewSupportsOcclusionCulling, viewDrawCalls, viewDrawCallsSurvived);
631631
}
632632

633-
// Water
634-
if (viewRendersWaterCulling)
633+
// Liquid
634+
if (viewRendersLiquidCulling)
635635
{
636-
CullingResourcesBase& cullingResources = waterRenderer->GetCullingResources();
637-
DrawCullingResourcesDrawCalls("Water", viewID, cullingResources, viewSupportsOcclusionCulling, viewDrawCalls, viewDrawCallsSurvived);
636+
CullingResourcesBase& cullingResources = liquidRenderer->GetCullingResources();
637+
DrawCullingResourcesDrawCalls("Liquid", viewID, cullingResources, viewSupportsOcclusionCulling, viewDrawCalls, viewDrawCallsSurvived);
638638
}
639639

640640
// Jolt Debug
@@ -660,7 +660,7 @@ namespace Editor
660660
GameRenderer* gameRenderer = ServiceLocator::GetGameRenderer();
661661
TerrainRenderer* terrainRenderer = gameRenderer->GetTerrainRenderer();
662662
ModelRenderer* modelRenderer = gameRenderer->GetModelRenderer();
663-
WaterRenderer* waterRenderer = gameRenderer->GetWaterRenderer();
663+
LiquidRenderer* liquidRenderer = gameRenderer->GetLiquidRenderer();
664664
JoltDebugRenderer* joltDebugRenderer = gameRenderer->GetJoltDebugRenderer();
665665

666666
const std::string rightHeaderText = "Survived / Total (%)";
@@ -697,7 +697,7 @@ namespace Editor
697697
bool viewRendersTerrainCulling = true; // Only main view supports terrain culling so far
698698
bool viewRendersOpaqueModelsCulling = true;
699699
bool viewRendersTransparentModelsCulling = viewID == 0; // Only main view supports transparent cmodel culling so far
700-
bool viewRendersWaterCulling = viewID == 0; // Only main view supports water culling so far
700+
bool viewRendersLiquidCulling = viewID == 0; // Only main view supports liquid culling so far
701701
bool viewRendersJoltDebug = viewID == 0;
702702

703703
// Terrain
@@ -736,11 +736,11 @@ namespace Editor
736736
DrawCullingResourcesTriangle("Model (T)", viewID, cullingResources, true, viewSupportsOcclusionCulling, viewTriangles, viewTrianglesSurvived);
737737
}
738738

739-
// Water
740-
if (viewRendersWaterCulling)
739+
// Liquid
740+
if (viewRendersLiquidCulling)
741741
{
742-
CullingResourcesBase& cullingResources = waterRenderer->GetCullingResources();
743-
DrawCullingResourcesTriangle("Water", viewID, cullingResources, true, viewSupportsOcclusionCulling, viewTriangles, viewTrianglesSurvived);
742+
CullingResourcesBase& cullingResources = liquidRenderer->GetCullingResources();
743+
DrawCullingResourcesTriangle("Liquid", viewID, cullingResources, true, viewSupportsOcclusionCulling, viewTriangles, viewTrianglesSurvived);
744744
}
745745

746746
// Jolt Debug

Source/Game/Game/Gameplay/MapLoader.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "Game/Rendering/Terrain/TerrainLoader.h"
1010
#include "Game/Rendering/Model/ModelLoader.h"
1111
#include "Game/Rendering/Model/ModelRenderer.h"
12-
#include "Game/Rendering/Water/WaterLoader.h"
12+
#include "Game/Rendering/Liquid/LiquidLoader.h"
1313
#include "Game/Util/ServiceLocator.h"
1414

1515
#include <Base/Memory/Bytebuffer.h>
@@ -123,7 +123,7 @@ void MapLoader::ClearRenderersForMap()
123123
{
124124
_terrainLoader->Clear();
125125
_modelLoader->Clear();
126-
_waterLoader->Clear();
126+
_liquidLoader->Clear();
127127

128128
ServiceLocator::GetGameRenderer()->GetJoltDebugRenderer()->Clear();
129129

Source/Game/Game/Gameplay/MapLoader.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class MapLoader
1919
};
2020

2121
public:
22-
MapLoader(TerrainLoader* terrainLoader, ModelLoader* modelLoader, WaterLoader* waterLoader) : _terrainLoader(terrainLoader), _modelLoader(modelLoader), _waterLoader(waterLoader) { }
22+
MapLoader(TerrainLoader* terrainLoader, ModelLoader* modelLoader, LiquidLoader* liquidLoader) : _terrainLoader(terrainLoader), _modelLoader(modelLoader), _liquidLoader(liquidLoader) { }
2323

2424
void Update(f32 deltaTime);
2525

@@ -34,7 +34,7 @@ class MapLoader
3434
private:
3535
TerrainLoader* _terrainLoader = nullptr;
3636
ModelLoader* _modelLoader = nullptr;
37-
WaterLoader* _waterLoader = nullptr;
37+
LiquidLoader* _liquidLoader = nullptr;
3838

3939
u32 _currentMapIndex = std::numeric_limits<u32>().max();
4040
moodycamel::ConcurrentQueue<LoadDesc> _requests;

Source/Game/Game/Rendering/GameRenderer.cpp

+16-11
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
#include "Terrain/TerrainManipulator.h"
99
#include "Model/ModelRenderer.h"
1010
#include "Model/ModelLoader.h"
11-
#include "Water/WaterRenderer.h"
12-
#include "Water/WaterLoader.h"
11+
#include "Liquid/LiquidRenderer.h"
12+
#include "Liquid/LiquidLoader.h"
1313
#include "Material/MaterialRenderer.h"
1414
#include "Skybox/SkyboxRenderer.h"
1515
#include "Editor/EditorRenderer.h"
@@ -137,14 +137,14 @@ GameRenderer::GameRenderer(InputManager* inputManager)
137137
_modelLoader = new ModelLoader(_modelRenderer);
138138
_modelLoader->Init();
139139

140-
_waterRenderer = new WaterRenderer(_renderer, _debugRenderer);
141-
_waterLoader = new WaterLoader(_waterRenderer);
140+
_liquidRenderer = new LiquidRenderer(_renderer, _debugRenderer);
141+
_liquidLoader = new LiquidLoader(_liquidRenderer);
142142

143143
_terrainRenderer = new TerrainRenderer(_renderer, _debugRenderer);
144-
_terrainLoader = new TerrainLoader(_terrainRenderer, _modelLoader, _waterLoader);
144+
_terrainLoader = new TerrainLoader(_terrainRenderer, _modelLoader, _liquidLoader);
145145
_terrainManipulator = new TerrainManipulator(*_terrainRenderer, *_debugRenderer);
146146

147-
_mapLoader = new MapLoader(_terrainLoader, _modelLoader, _waterLoader);
147+
_mapLoader = new MapLoader(_terrainLoader, _modelLoader, _liquidLoader);
148148

149149
_materialRenderer = new MaterialRenderer(_renderer, _terrainRenderer, _modelRenderer);
150150
_skyboxRenderer = new SkyboxRenderer(_renderer, _debugRenderer);
@@ -182,8 +182,8 @@ void GameRenderer::UpdateRenderers(f32 deltaTime)
182182
_terrainManipulator->Update(deltaTime);
183183
_modelLoader->Update(deltaTime);
184184
_modelRenderer->Update(deltaTime);
185-
_waterLoader->Update(deltaTime);
186-
_waterRenderer->Update(deltaTime);
185+
_liquidLoader->Update(deltaTime);
186+
_liquidRenderer->Update(deltaTime);
187187
_materialRenderer->Update(deltaTime);
188188
_joltDebugRenderer->Update(deltaTime);
189189
_debugRenderer->Update(deltaTime);
@@ -197,7 +197,12 @@ f32 GameRenderer::Render()
197197
{
198198
// If the window is minimized we want to pause rendering
199199
if (_window->IsMinimized())
200+
{
201+
ImGui::End();
202+
ImGui::Render();
203+
200204
return 0.0f;
205+
}
201206

202207
Editor::EditorHandler* editorHandler = ServiceLocator::GetEditorHandler();
203208
bool isEditorMode = editorHandler->GetViewport()->IsEditorMode();
@@ -348,9 +353,9 @@ f32 GameRenderer::Render()
348353
_modelRenderer->AddTransparencyCullingPass(&renderGraph, _resources, _frameIndex);
349354
_modelRenderer->AddTransparencyGeometryPass(&renderGraph, _resources, _frameIndex);
350355

351-
_waterRenderer->AddCopyDepthPass(&renderGraph, _resources, _frameIndex);
352-
_waterRenderer->AddCullingPass(&renderGraph, _resources, _frameIndex);
353-
_waterRenderer->AddGeometryPass(&renderGraph, _resources, _frameIndex);
356+
_liquidRenderer->AddCopyDepthPass(&renderGraph, _resources, _frameIndex);
357+
_liquidRenderer->AddCullingPass(&renderGraph, _resources, _frameIndex);
358+
_liquidRenderer->AddGeometryPass(&renderGraph, _resources, _frameIndex);
354359

355360
_materialRenderer->AddMaterialPass(&renderGraph, _resources, _frameIndex);
356361

Source/Game/Game/Rendering/GameRenderer.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ class EditorRenderer;
3232
class DebugRenderer;
3333
class JoltDebugRenderer;
3434
class CanvasRenderer;
35-
class WaterLoader;
36-
class WaterRenderer;
35+
class LiquidLoader;
36+
class LiquidRenderer;
3737
class UIRenderer;
3838
class PixelQuery;
3939

@@ -56,13 +56,13 @@ class GameRenderer
5656

5757
TerrainRenderer* GetTerrainRenderer() { return _terrainRenderer; }
5858
ModelRenderer* GetModelRenderer() { return _modelRenderer; }
59-
WaterRenderer* GetWaterRenderer() { return _waterRenderer; }
59+
LiquidRenderer* GetLiquidRenderer() { return _liquidRenderer; }
6060
DebugRenderer* GetDebugRenderer() { return _debugRenderer; }
6161
JoltDebugRenderer* GetJoltDebugRenderer() { return _joltDebugRenderer; }
6262

6363
TerrainLoader* GetTerrainLoader() { return _terrainLoader; }
6464
ModelLoader* GetModelLoader() { return _modelLoader; }
65-
WaterLoader* GetWaterLoader() { return _waterLoader; }
65+
LiquidLoader* GetLiquidLoader() { return _liquidLoader; }
6666
MapLoader* GetMapLoader() { return _mapLoader; }
6767

6868
TerrainManipulator* GetTerrainManipulator() { return _terrainManipulator; }
@@ -103,8 +103,8 @@ class GameRenderer
103103
ModelRenderer* _modelRenderer = nullptr;
104104
ModelLoader* _modelLoader = nullptr;
105105

106-
WaterRenderer* _waterRenderer = nullptr;
107-
WaterLoader* _waterLoader = nullptr;
106+
LiquidRenderer* _liquidRenderer = nullptr;
107+
LiquidLoader* _liquidLoader = nullptr;
108108

109109
MapLoader* _mapLoader = nullptr;
110110

0 commit comments

Comments
 (0)