prosperon/source/engine/registry.c

77 lines
2.6 KiB
C
Raw Normal View History

2021-11-30 21:29:18 -06:00
#include "registry.h"
#include "gameobject.h"
#include "2dphysics.h"
2022-08-12 14:03:56 -05:00
#include "editor.h"
2021-11-30 21:29:18 -06:00
#include "sprite.h"
struct component components[MAXNAME] = { 0 };
int ncomponent = 0;
2022-08-17 00:01:51 -05:00
#define REGISTER_COMP(NAME) register_component(#NAME, sizeof(struct NAME), make_NAME, dbgdraw_NAME, NAME_gui, NAME_init,
2022-08-12 14:03:56 -05:00
2021-11-30 21:29:18 -06:00
void registry_init()
{
2022-08-12 14:03:56 -05:00
/*
REGISTER_COMP(sprite);
REGISTER_COMP(2d_circle);
REGISTER_COMP(2d_segment);
REGISTER_COMP(2d_box);
REGISTER_COMP(2d_polygon);
REGISTER_COMP(2d_edge);
*/
2022-08-28 22:34:33 -05:00
register_component("Sprite",
sizeof(struct sprite),
make_sprite,
2022-08-28 22:34:33 -05:00
sprite_delete,
sprite_io,
NULL,
sprite_gui,
sprite_init);
register_component("2D Circle Collider",
sizeof(struct phys2d_circle),
Make2DCircle,
phys2d_circledel,
NULL,
phys2d_dbgdrawcircle,
circle_gui,
phys2d_circleinit);
register_component("2D Segment", sizeof(struct phys2d_segment), phys2d_segdel, NULL, Make2DSegment, phys2d_dbgdrawseg, segment_gui, phys2d_seginit);
register_component("2D Box", sizeof(struct phys2d_box), Make2DBox, phys2d_boxdel, NULL, phys2d_dbgdrawbox, box_gui, phys2d_boxinit);
register_component("2D Polygon", sizeof(struct phys2d_poly), Make2DPoly, phys2d_polydel, NULL, phys2d_dbgdrawpoly, poly_gui,phys2d_polyinit);
register_component("2D Edge", sizeof(struct phys2d_edge), Make2DEdge, phys2d_edgedel, NULL, phys2d_dbgdrawedge, edge_gui, phys2d_edgeinit);
2021-11-30 21:29:18 -06:00
}
void register_component(const char *name, size_t size,
2022-11-19 17:13:57 -06:00
void (*make)(struct gameobject * go, struct component * c),
2022-08-28 22:34:33 -05:00
void (*delete)(void *data),
void (*io)(void *data, FILE *f, int read),
2021-11-30 21:29:18 -06:00
void(*draw_debug)(void *data),
void(*draw_gui)(void *data),
2022-11-19 17:13:57 -06:00
void(*init)(void *data, struct gameobject * go))
2021-11-30 21:29:18 -06:00
{
struct component *c = &components[ncomponent++];
c->name = name;
c->make = make;
2022-08-28 22:34:33 -05:00
c->io = io;
2021-11-30 21:29:18 -06:00
c->draw_debug = draw_debug;
c->draw_gui = draw_gui;
c->init = init;
c->data = NULL;
2022-08-28 22:34:33 -05:00
c->delete = delete;
2021-11-30 21:29:18 -06:00
c->id = ncomponent - 1;
c->datasize = size;
}
2022-06-21 15:21:00 -05:00
void comp_draw_debug(struct component *c) {
c->draw_debug(c->data);
}
void comp_draw_gui(struct component *c) {
c->draw_gui(c->data);
}