#ifndef thing_H_INCLUDED #define thing_H_INCLUDED #include "camera.h" #include "bump.h" #include "sprite.h" typedef struct Thing_ Thing; /* Thing types. Generally speaking, there are things that can move and those that cannot. Chipmunks treats them differently in the sense that static things will all use a single (or one of a few) static bodies, which does not need to be freed when the thing isn't needed anymore. */ #define THING_UNUSED -1 #define THING_WALL 1 #define THING_WATER 2 #define THING_STAIR 3 #define THING_ACTOR 4 #define THING_MOBILE 5 #define THING_ZONE 6 #define THING_SEARCH 10 #define THING_ATTACK 11 #define THING_EFFECT 12 #define THING_LINKED_MAX 16 enum Thingflags_ { THING_FLAGS_OWNBODY = 1, THING_FLAGS_OWNSHAPE = 2, /* Thing doesn't change direction even when moving. */ THING_FLAGS_LOCK_DIRECTION = 4, /* Persistent things are to be copied from one map to the next. Especially useful (and automatcical) for PCs. */ THING_FLAGS_PERSISTENT = 8, THING_FLAGS_NO_SHADOW = 16, /* > Thing does not cast a shadow. */ }; int thing_id(Thing * thing); int thing_id_(Thing * thing, int newid); Thing * thing_z_(Thing * self, int z); int thing_setflag(Thing * self, int flag); int thing_unsetflag(Thing * self, int flag); int thing_flag_(Thing * self, int flag, int set); int thing_flag(Thing * self, int flag); Thing * thing_done(Thing * self); Thing * thing_free(Thing * self); Thing * thing_alloc(); Sprite * thing_sprite_(Thing * thing, Sprite * sprite); Sprite * thing_sprite(Thing * thing); int thing_pose_(Thing * thing, int pose); int thing_direction_(Thing * thing, int direction); int thing_static_p(Thing * self); BeVec thing_p(Thing * self); int thing_x(Thing * self); int thing_y(Thing * self); int thing_w(Thing * self); int thing_h(Thing * self); int thing_cx(Thing * self); int thing_cy(Thing * self); int thing_z(Thing * self); BeVec thing_v(Thing * self); int thing_vx(Thing * self); int thing_vy(Thing * self); void thing_v_(Thing * self, BeVec v); void thing_vxy_(Thing * self, int vx, int vy); void thing_vx_(Thing * self, int vx); void thing_vy_(Thing * self, int vy); void thing_p_(Thing * self, BeVec p); void thing_deltap(Thing * self, BeVec delta); void thing_pxy_(Thing * self, int x, int y); void thing_x_(Thing * self, int x); void thing_y_(Thing * self, int y); void thing_applyforce(Thing * thing, const BeVec f); void thing_applyimpulse(Thing * thing, const BeVec f); void thing_resetforces(Thing * thing); BeVec thing_sdp(Thing * self); void thing_draw(Thing * self, Camera * camera); int thing_direction(Thing * self); int thing_pose(Thing * self); int thing_poseifold_(Thing * self, int oldpose, int newpose); void thing_update(Thing * self, double dt); int thing_compare_for_drawing(const void * p1, const void * p2); int thing_tint_layer(Thing * me, int layer_index, Color color); int thing_hide_layer(Thing * me, int layer, int hidden); int thing_is_layer_hidden(Thing * me, int layer); int thing_set_action_loop(Thing * me, int action, int loopmode); int thing_get_action_loop(Thing * me, int action); int thing_is_action_done(Thing * me, int action); int thing_set_pose_direction_loop(Thing * me, int pose, int direction, int loopmode); int thing_get_pose_direction_loop(Thing * me, int pose, int direction); /* This is declared here to avoid a cyclical dependency. */ Thing * camera_track_ (Camera * self , Thing * track ); BumpHull * thing_add_hull(Thing * me, int kind, int x, int y, int z, int w, int h); int thing_set_hull_flag(Thing * me, int flag); int thing_unset_hull_flag(Thing * me, int flag); int thing_hull_flags_(Thing * me, int flags); int thing_hull_flags(Thing * me); int thing_hull_group(Thing * me); int thing_hull_group_(Thing * me, int group); #endif