Improving entity manager and entity support for a simpler version, made some cleanup on the road to support serialization of world
This commit is contained in:
+38
-9
@@ -1,12 +1,13 @@
|
||||
#include <game.h>
|
||||
#include <game.h>
|
||||
|
||||
#include <Controller/DebugCameraController.h>
|
||||
#include <Core/Common/serialization.h>
|
||||
#include <Core/HAL/Filesystem/Filesystem.h>
|
||||
#include <Core/HAL/Keyboard/Keyboard.h>
|
||||
#include <Core/JulietInit.h>
|
||||
#include <Core/Logging/LogManager.h>
|
||||
#include <Core/Memory/MemoryArena.h>
|
||||
#include <Data/StaticMesh.h>
|
||||
#include <Data/World.h>
|
||||
#include <Entity/Entity.h>
|
||||
#include <Entity/EntityManager.h>
|
||||
#include <Graphics/Camera.h>
|
||||
@@ -15,8 +16,20 @@
|
||||
|
||||
#if JULIET_DEBUG
|
||||
#include <Debug/DebugTopBar.h>
|
||||
#include <UnitTest/WorldUnitTest.h>
|
||||
#endif
|
||||
|
||||
// namespace
|
||||
// {
|
||||
// void serialize_test(archive* ar, void* payload)
|
||||
// {
|
||||
// SerializedEntityTest* test = reinterpret_cast<SerializedEntityTest*>(payload);
|
||||
// serialize_elem(ar, test->A);
|
||||
// }
|
||||
// } // namespace
|
||||
//
|
||||
// DEFINE_ENTITY_SERIALIZED(SerializedEntityTest, serialize_test)
|
||||
|
||||
namespace
|
||||
{
|
||||
GameState* gGameState = nullptr;
|
||||
@@ -31,13 +44,16 @@ extern "C" JULIET_API void __cdecl GameShutdown()
|
||||
{
|
||||
printf("Shutting down game...\n");
|
||||
|
||||
if (gGameState && gGameState->World)
|
||||
{
|
||||
ShutdownWorld(gGameState->World);
|
||||
}
|
||||
|
||||
ShutdownEntityManager();
|
||||
}
|
||||
|
||||
extern "C" JULIET_API void __cdecl GameUpdate(GameData* params, [[maybe_unused]] float deltaTime)
|
||||
{
|
||||
|
||||
gGameState = params->GameState;
|
||||
if (!gGameState)
|
||||
{
|
||||
@@ -55,20 +71,29 @@ extern "C" JULIET_API void __cdecl GameUpdate(GameData* params, [[maybe_unused]]
|
||||
ReserveCamera(4);
|
||||
|
||||
// Bootstrap world
|
||||
auto* worldArena = ArenaAllocate({ .ReserveSize = Megabytes(1), .Name = "World Arena" });
|
||||
World* world = ArenaPushStruct<World>(worldArena JULIET_DEBUG_PARAM("World"));
|
||||
gameState->World = world;
|
||||
gameState->World->WorldArena = worldArena;
|
||||
auto* worldArena = ArenaAllocate({ .ReserveSize = Megabytes(1), .Name = "World Arena" });
|
||||
World* world = ArenaPushStruct<World>(worldArena JULIET_DEBUG_PARAM("World"));
|
||||
gameState->World = world;
|
||||
InitWorld(gameState->World, worldArena);
|
||||
|
||||
#if JULIET_DEBUG
|
||||
UnitTest::WorldUnitTest();
|
||||
#endif
|
||||
|
||||
// Entity Use case
|
||||
InitEntityManager(gameState->World);
|
||||
auto& manager = GetEntityManager();
|
||||
|
||||
NonNullPtr mesh = MakeEntity<StaticMesh>(manager, 1.f, 2.f);
|
||||
NonNullPtr mesh = MakeEntity<Inert>(manager, 1.f, 2.f, 0.f);
|
||||
|
||||
MeshAssetID cubeAsset = GetCubePrimitiveMeshAssetID();
|
||||
MeshInstanceID meshInst = CreateMeshInstance(cubeAsset, 0, MatrixIdentity());
|
||||
mesh->Base->MeshInstance = meshInst;
|
||||
mesh->MeshInstance = meshInst;
|
||||
|
||||
NonNullPtr mesh2 = MakeEntity<Inert>(manager, 4.f, 0.f, 2.f);
|
||||
|
||||
MeshInstanceID meshInst2 = CreateMeshInstance(cubeAsset, 0, MatrixIdentity());
|
||||
mesh2->MeshInstance = meshInst2;
|
||||
|
||||
// Summer at 2pm lighting
|
||||
Vector3 sunDirection = { -0.2f, -0.9f, -0.3f };
|
||||
@@ -100,6 +125,10 @@ extern "C" JULIET_API void __cdecl GameUpdate(GameData* params, [[maybe_unused]]
|
||||
{
|
||||
gGameState->Mode = GameMode::Play;
|
||||
}
|
||||
|
||||
#if JULIET_EDITOR
|
||||
RenderWorldEditorUI(*gGameState->World);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (gGameState->Mode == GameMode::Play)
|
||||
|
||||
Reference in New Issue
Block a user