3d movement
This commit is contained in:
155
src/game/Level.h
155
src/game/Level.h
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user