3d movement

This commit is contained in:
Asuro
2025-02-13 01:58:03 +01:00
parent 137d8fa539
commit 6e82678ade
7 changed files with 429 additions and 468 deletions

View File

@@ -1,91 +1,90 @@
#pragma once
#include "Global.h"
#include "../engine/Shared.h"
#include "Global.h"
#include "Log.h"
#include <bgfx/bgfx.h>
namespace Game
{
typedef uint16_t CubeHandle;
struct Cube
{
int32_t TestX = -1;
int32_t TestY = -1;
Mat4 Transform;
uint16_t MaterialIdx = 0;
uint16_t ModelIdx = 0;
typedef uint16_t CubeHandle;
void Setup();
void Update();
};
struct Cube
{
int32_t TestX = -1;
int32_t TestY = -1;
Transform Transform;
uint16_t MaterialIdx = 0;
uint16_t ModelIdx = 0;
template<typename T, uint32_t C>
class EntityManager
{
public:
uint16_t Count = 0;
T* Data = nullptr;
uint32_t EntitySize = 0;
void Setup();
void Update();
};
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;
}
template <typename T, uint32_t C> class EntityManager
{
public:
uint16_t Count = 0;
T* Data = nullptr;
uint32_t EntitySize = 0;
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:
uint64_t Setup(void* ptr)
{
if (EntitySize != sizeof(T))
{
Count = 0;
}
EntitySize = sizeof(T);
Data = reinterpret_cast<T*>(ptr);
return C * sizeof(T);
}
public:
void Setup(GameData& data);
void Update();
};
}
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();
};
} // namespace Game