84 lines
2.7 KiB
C
84 lines
2.7 KiB
C
#ifndef __TERRAIN_ECSTYPES
|
|
#define __TERRAIN_ECSTYPES
|
|
|
|
#include "ecs2.h"
|
|
#include "haloo3d/haloo3d.h"
|
|
// #include "haloo3d/haloo3dex_easy.h"
|
|
|
|
// Baseline render context. When a pointer to this is attached as a component,
|
|
// it becomes a render target, and that entity will perform the precalcs
|
|
// necessary for later object rendering.
|
|
typedef struct {
|
|
// struct vec4 precalcs[H3D_OBJ_MAXVERTICES];
|
|
// haloo3d_facef outfaces[H3D_FACEF_MAXCLIP];
|
|
mfloat_t perspective[MAT4_SIZE];
|
|
mfloat_t precalc_screen[MAT4_SIZE];
|
|
haloo3d_fb window;
|
|
// Baseline render settings. Some of these settings will be applied to
|
|
// each object associated with this context
|
|
haloo3d_trirender rendersettings;
|
|
mfloat_t precalc_halfwidth; // Optimization for reducing calcs per tri
|
|
mfloat_t precalc_halfheight; // Optimization for reducing calcs per tri
|
|
} render_context;
|
|
|
|
// Associate this to some entity along with a placement and it will be the
|
|
// main "renderer" for a viewpoint
|
|
typedef render_context *ecs_rendercontext;
|
|
|
|
// All values which allow rendering of a 3d object
|
|
typedef struct {
|
|
struct vec3 scale; // how big the thing should be in world
|
|
struct vec3 *lighting; // a pointer to lighting, null for none
|
|
render_context *context; // What to render into
|
|
haloo3d_obj *model;
|
|
haloo3d_fb *texture;
|
|
uint8_t cullbackface; // Whether to cull backfaces (you probably should)
|
|
// Whether to automatically move lighting when models have a
|
|
// lookvec. This also normalizes the light
|
|
uint8_t autolightfix;
|
|
} ecs_object;
|
|
|
|
// Some placement within the world. Doesn't imply anything other than a
|
|
// position and a facing direction
|
|
typedef struct {
|
|
struct vec3 pos;
|
|
struct vec3 up;
|
|
struct vec3 lookvec;
|
|
} ecs_placement;
|
|
|
|
// typedef haloo3d_camera *ecs_camera;
|
|
// typedef haloo3d_obj_instance *ecs_object;
|
|
|
|
// // A billboard for OUR system, which does not look up or down at the target.
|
|
// As
|
|
// // such, no matter what the lookat is set to, y is always going to be equal
|
|
// to
|
|
// // the y of the instance, so it appears to be looking "straight"
|
|
// typedef struct {
|
|
// haloo3d_obj_instance *obj;
|
|
// struct vec3 *lookat;
|
|
// } ecs_billboard;
|
|
|
|
// // A component which allows an object instance to die
|
|
// // when the maze is initiailized.
|
|
// typedef struct {
|
|
// haloo3d_obj_instance *obj;
|
|
// haloo3d_easyrender *render;
|
|
// worldstate *ws;
|
|
// void (*diefunc)(haloo3d_obj_instance *);
|
|
// } ecs_dieoninit;
|
|
|
|
// Setup ECS system for our game
|
|
ECS_START(tecs)
|
|
ECS_COMPONENT(ecs_rendercontext);
|
|
ECS_COMPONENT(ecs_object);
|
|
ECS_COMPONENT(ecs_placement);
|
|
ECS_END(tecs)
|
|
|
|
// And then a copy of the components here... that sucksssss
|
|
ECS_CID(ecs_rendercontext, 0);
|
|
ECS_CID(ecs_object, 1);
|
|
ECS_CID(ecs_placement, 2);
|
|
|
|
#endif
|