#define BULLET_SIZE 2 #define ENTITY_SIZE 8 typedef struct { vec2 pos; vec2 size; vec2 vel; } Body; typedef struct { enum { EPLAYER, EGHOST, EBULLET, ETELEPORTER, LASTEntity, } type; bool active; Body body; float time; float life; bool alive; int telex, teley; } Entity; typedef struct { Entity *self; Entity *target; } EntityCollision; typedef void (EntityCollisionProc)(Entity *self, Entity *other); typedef void (EntityUpdateProc)(Entity *self, float delta); void entphysics(float delta); void entupdate(float delta); void entinit(void); void enqcoll(EntityCollision *c); EntityCollision *deqcoll(void); Entity *allocentity(void); void freeentity(Entity *); void entrestart(void); extern Entity entitybuffer[2048]; extern int ebufi; extern char map_data[]; extern int map_width, map_height; extern float player_x, player_y; extern int ghostcount; extern float ghostpositions[][2]; extern struct { int ftx, fty; int ttx, tty; } telemap[]; extern int telemapsize; extern struct { float x, y; } teles[]; extern int telessize; extern Entity *player; extern bool shot; extern int shotx, shoty; extern bool moveleft, moveright, moveup, movedown;