66 lines
1.5 KiB
C
66 lines
1.5 KiB
C
#include "../gfx/gfx.h"
|
|
#include "../lib/raymath.h"
|
|
|
|
DefineList(int32, Handle);
|
|
|
|
enum EntityFlags {
|
|
EntityFlags_None=0,
|
|
EntityFlags_Visible=1<<0,
|
|
EntityFlags_Dead=1<<1,
|
|
EntityFlags_Render=1<<2,
|
|
};
|
|
|
|
typedef struct Entity Entity;
|
|
struct Entity {
|
|
int32 graphNodeHandle;
|
|
uint64 flags;
|
|
RLVector4 color;
|
|
Mesh *mesh;
|
|
Texture *tex;
|
|
|
|
// Free list
|
|
int32 next;
|
|
};
|
|
DefineList(Entity, Entity);
|
|
|
|
typedef struct SceneGraphNode SceneGraphNode;
|
|
struct SceneGraphNode {
|
|
Matrix local;
|
|
Matrix world;
|
|
RLVector3 translation;
|
|
Quaternion rotation;
|
|
RLVector3 scale;
|
|
int32 entityHandle;
|
|
int32 parentHandle;
|
|
|
|
// Free list
|
|
int32 next;
|
|
|
|
// Children
|
|
int32 nextSibling;
|
|
int32 firstChild;
|
|
};
|
|
DefineList(SceneGraphNode, SceneGraphNode);
|
|
|
|
typedef struct Scene Scene;
|
|
struct Scene {
|
|
int32 sceneRoot;
|
|
EntityList entities;
|
|
int32 nextFreeEntity;
|
|
SceneGraphNodeList graphNodes;
|
|
int32 nextFreeNode;
|
|
};
|
|
|
|
int32 createEntity(Scene *s);
|
|
Entity *getEntity(Scene *s, int32 id);
|
|
SceneGraphNode *getSceneGraphNode(Scene *s, int32 id);
|
|
int32 createSceneGraphNode(Scene *s);
|
|
Scene createScene(Arena *arena);
|
|
void initGraphNode(SceneGraphNode *n);
|
|
void recalcSceneGraphNode(Scene *s, int32 parentHandle);
|
|
void recalcScene(Scene *s);
|
|
void removeEntity(Scene *s, int32 entityHandle);
|
|
void removeSceneGraphNode(Scene *s, int32 graphNodeHandle);
|
|
void sceneNodeAddNode(Scene *s, int32 recipientNodeHandle, int32 graphNodeHandle);
|
|
SceneGraphNode *getSceneGraphNodeForEntity(Scene *s, int32 entityHandle);
|