#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