#pragma once #include #include "misc.h" #include "jdraw.h" #include // Flags que defineixen les capacitats de l'actor #define FLAG_NONE 0 #define FLAG_HERO 1 // Es el heroi #define FLAG_PUSHABLE 2 // Es pot espentar #define FLAG_REACTIVE 4 // Quan se li espenta, torna una espenta específica #define FLAG_MOVING 8 // Es mou #define FLAG_ANIMATED 16 // Te animació de frames #define FLAG_ORIENTABLE 32 // S'orienta cap on va #define FLAG_DEADLY 64 // Fa pupa #define FLAG_GRAVITY 128 // Li afecta la gravetat #define FLAG_PICKABLE 256 // Es pot agafar #define FLAG_SPECIAL 512 // Especial (habilitats, poders temporals i parts de l'excavadora) #define FLAG_NOEDITOR 1024 // No es seleccionable a l'editor (son les portes) #define FLAG_SENSIBLE 6 // PUSHABLE or REACTIVE #define FLAG_IGNORE 1025 // HERO or NOEDITOR // Direcció de espenta #define PUSH_NONE 0 #define PUSH_XP 1 #define PUSH_XN 2 #define PUSH_YP 4 #define PUSH_YN 8 #define PUSH_ZP 16 #define PUSH_ZN 32 #define PUSH_KILL 64 // Tipus de moviment de l'actor #define MOV_NONE 0 // Ningun #define MOV_X 1 // Es mou només en l'eix X i quan topeta en algo, torna per on venia #define MOV_Y 2 // Es mou només en l'eix Y i quan topeta en algo, torna per on venia #define MOV_Z 3 // Es mou només en l'eix Z i quan topeta en algo, torna per on venia #define MOV_CW 4 // Es mou en sentit de les agulles del rellotge #define MOV_CCW 5 // Es mou en sentit contrari a les agulles del rellotge #define MOV_RAND 6 // Es mou en direcció aleatòria #define MOV_HUNT 7 // Persegueix al heroi namespace actor { struct actor_t { char name[16]; draw::surface *surface; char bmp[16]; SDL_Rect bmp_rect; SDL_Point bmp_offset; vec3_t pos; vec3_t size; int orient; int anim_cycle; int anim_frame; int anim_wait; int anim_wait_count; int flags; int push; int react_mask; int react_push; int movement; int mov_push; actor_t *below; actor_t *above; actor_t *prev; actor_t *next; }; // Torna el primer actor de la llista actor_t *getFirst(); // Torna l'últim actor de la llista actor_t *getLast(); // Torna el actor seleccionat a l'editor actor_t *getSelected(); // Torna un nou actor actor_t *create(std::string name, vec3_t p, vec3_t s, std::string bmp, SDL_Rect r, SDL_Point o); actor_t *duplicate(actor_t *act); actor_t *createFromTemplate(const char *name); actor_t *createFromFile(char **buffer); void setUniqueName(actor_t *act); void saveToFile(FILE *f, actor_t *act); void setDirty(actor_t *act, const bool force=false); void select(actor_t *act); void reorder(); uint8_t push(actor_t *act, uint8_t push); void update(actor_t *act, const bool update_all=true); void updateEditor(actor_t *act, const bool update_all=true); void draw(actor_t *act, const bool draw_all=true); actor_t *find(std::string name); actor_t *find_at(const int x, const int y, const int z); actor_t *get_collision(actor_t *act); const bool check_collision(actor_t *obj1, actor_t *obj2); void remove(actor_t *act); void clear(); namespace templates { void load(); void save(); const int size(); actor_t *get(const int index); actor_t *getByName(const char *name); void copy(actor_t *dest, actor_t *source); void add(actor_t *act); } }