entity system!

This commit is contained in:
Asuro
2025-02-09 19:30:18 +01:00
parent d1270c47a9
commit 90bc5753a9
19 changed files with 306 additions and 67 deletions

91
src/game/Level.h Normal file
View File

@@ -0,0 +1,91 @@
#pragma once
#include "Global.h"
#include "../engine/Shared.h"
#include "Log.h"
#include <bgfx/bgfx.h>
namespace Game
{
typedef uint16_t CubeHandle;
struct Cube
{
int32_t TestX = 0;
int32_t TestY = 0;
Mat4 Transform;
uint16_t MaterialIdx = 0;
uint16_t ModelIdx = 0;
void Setup();
void Update();
};
template<typename T, uint32_t C>
class EntityManager
{
public:
uint16_t Count = 0;
T* Data = nullptr;
uint32_t EntitySize = 0;
public:
uint64_t Setup(void* ptr)
{
if (EntitySize != sizeof(T))
{
Count = 0;
}
EntitySize = sizeof(T);
Data = reinterpret_cast<T*>(ptr);
return C*sizeof(T);
}
T* New()
{
if (Data == nullptr)
{
Log("Accessed EntityManager before setup!");
return nullptr;
}
if (Count >= C)
{
Log("Too many entities!");
return nullptr;
}
Data[Count] = {};
Data[Count].Setup();
T* result = &Data[Count];
++Count;
return result;
}
T* Get(uint16_t idx)
{
if (idx > Count)
{
Log("OOB Access!");
return nullptr;
}
return &Data[idx];
}
void Update()
{
for (uint32_t i = 0; i < Count; ++i)
{
Data[i].Update();
}
}
};
class Level
{
public:
EntityManager<Cube, 1024> Cubes;
public:
void Setup(GameData& data);
void Update();
};
}