#ifndef obj_h #define obj_h #include "rect.h" struct App; struct Map; struct Renderer; struct World; typedef enum { face_left, face_right } Face; #define specials_xmacro \ x(special_gun, 21, 0) typedef enum { #define x(name, x, y) name, specials_xmacro #undef x special_count } Special; typedef struct { int x, y, vx, vy; int frame; int anim; int grounded, headbutted, on_ramp, jumping; int cooldown, slashing; int inv, hp, charge; Face face; Rect rect; Special spec; } Player; void init_player(Player* p); void update_player( Player* p, struct World* w, const struct App* app, const struct Map* map ); void ren_player(const Player* p, struct Renderer* r); typedef struct { int x, y, w; int life; } Laser; void init_laser(Laser* l); void activate_laser(Laser* l, int x, int y); void update_laser(Laser* l); void ren_laser(const Laser* l, struct Renderer* r); typedef struct { int x, y; int frame, anim; int bmp; Rect rect; } Particle; void init_particle(Particle* p, int x, int y, int anim, int bmp); int update_particle(Particle* p); void ren_particle(const Particle* p, struct Renderer* r); #define effect_max 32 typedef struct { int x[effect_max]; int y[effect_max]; int vx[effect_max]; int vy[effect_max]; int c, life; } Effect; void init_effect(Effect* e, int x, int y, int vx, int vy, int c); int update_effect(Effect* e); void ren_effect(const Effect* e, struct Renderer* r); typedef enum { enemy_demon, enemy_fly } Enemy_Type; typedef struct { Enemy_Type t; int x, y, vx, vy; int hp, frame, anim; int grounded, headbutted, on_ramp; int state, inv, timer; Face face; Rect rect; } Enemy; void init_enemy(Enemy* e, Enemy_Type t, int x, int y); int update_enemy(Enemy* e, struct World* w); void ren_enemy(const Enemy* e, struct Renderer* r); void get_enemy_rect(Enemy_Type t, Rect* d); typedef struct { Rect r; int vx, vy; int hp, life, friendly; } Deathzone; void init_deathzone( Deathzone* d, const Rect* r, int vx, int vy, int hp, int life, int friendly ); int update_deathzone(Deathzone* d); void ren_hud(const struct World* w, struct Renderer* r); typedef struct { Rect r, s; int anim, frame; int x, y, vx, vy; } Projectile; void init_projectile( Projectile* p, int x, int y, const Rect* r, int anim ); int update_projectile( Projectile* p, const struct World* w ); void ren_projectile(const Projectile* p, struct Renderer* r); #endif