You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.0 KiB
124 lines
2.0 KiB
#ifndef ENTITY_H
|
|
#define ENTITY_H
|
|
|
|
#include "linmath.h"
|
|
#include "num_types.h"
|
|
|
|
struct Material_Param;
|
|
|
|
enum Entity_Type
|
|
{
|
|
ET_PLAYER,
|
|
ET_ROOT,
|
|
ET_CAMERA,
|
|
ET_LIGHT,
|
|
ET_STATIC_MESH,
|
|
ET_SOUND_SOURCE,
|
|
ET_MAX
|
|
};
|
|
|
|
enum LightType
|
|
{
|
|
LT_SPOT = 0,
|
|
LT_DIR,
|
|
LT_POINT,
|
|
LT_INVALID,
|
|
LT_MAX
|
|
};
|
|
|
|
struct Transform
|
|
{
|
|
vec3 position;
|
|
vec3 scale;
|
|
quat rotation;
|
|
mat4 trans_mat;
|
|
int parent;
|
|
int* children;
|
|
bool is_modified;
|
|
};
|
|
|
|
struct Model
|
|
{
|
|
int geometry_index;
|
|
int material;
|
|
struct Material_Param* material_params;
|
|
};
|
|
|
|
struct Sound_Source
|
|
{
|
|
bool active;
|
|
bool relative;
|
|
uint al_source_handle;
|
|
uint al_buffer_handle;
|
|
};
|
|
|
|
struct Camera
|
|
{
|
|
mat4 proj_mat;
|
|
mat4 view_mat;
|
|
mat4 view_proj_mat;
|
|
float fov;
|
|
float aspect_ratio;
|
|
float nearz;
|
|
float farz;
|
|
bool ortho;
|
|
int fbo;
|
|
int render_tex;
|
|
int depth_tex;
|
|
vec4 clear_color;
|
|
vec4 frustum[6];
|
|
bool resizeable;
|
|
};
|
|
|
|
struct Light
|
|
{
|
|
float outer_angle;
|
|
float inner_angle;
|
|
float falloff;
|
|
float intensity;
|
|
vec3 color;
|
|
bool cast_shadow;
|
|
bool pcf_enabled;
|
|
bool valid;
|
|
int type;
|
|
int radius;
|
|
int shadow_map[4];
|
|
float depth_bias;
|
|
};
|
|
|
|
struct Entity
|
|
{
|
|
int id;
|
|
int type;
|
|
char* name;
|
|
bool is_listener; /* TODO: Replace all booleans with flags */
|
|
bool marked_for_deletion;
|
|
bool renderable;
|
|
struct Transform transform;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
struct Model model;
|
|
int health;
|
|
} Player;
|
|
|
|
struct Model model;
|
|
struct Camera camera;
|
|
struct Light light;
|
|
struct Sound_Source sound_source;
|
|
};
|
|
};
|
|
|
|
void entity_init(void);
|
|
void entity_cleanup(void);
|
|
void entity_remove(int index);
|
|
void entity_post_update(void);
|
|
struct Entity* entity_create(const char* name, const int type, int parent_id);
|
|
struct Entity* entity_get(int index);
|
|
struct Entity* entity_find(const char* name);
|
|
struct Entity* entity_get_all(void);
|
|
struct Entity* entity_get_parent(int node);
|
|
|
|
#endif
|
|
|