123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- #ifndef sprite_H_INCLUDED
- #define sprite_H_INCLUDED
- #include "eruta.h"
- #include "image.h"
- typedef struct SpriteCell_ SpriteCell;
- typedef struct SpriteFrame_ SpriteFrame;
- typedef struct SpriteAction_ SpriteAction;
- typedef struct Sprite_ Sprite;
- typedef struct SpriteLayout_ SpriteLayout;
- typedef struct SpriteState_ SpriteState;
- /* Flags of a Sprite, frame or layer. */
- enum SpriteFlags_ {
- /* Zero flag means sprite , frame, etc not in use. */
- SPRITE_EMPTY = 0,
- /* Sprite element is in use if this is set, not if not. */
- SPRITE_ACTIVE = 1,
- /* Sprite element does not need to be updated. */
- SPRITE_FREEZE = 2,
- /* Direction flags */
- SPRITE_NO_DIRECTION = 0,
- SPRITE_SOUTH = 1 << 8,
- SPRITE_EAST = 1 << 9,
- SPRITE_NORTH = 1 << 10,
- SPRITE_WEST = 1 << 11,
- SPRITE_ALL = SPRITE_SOUTH + SPRITE_EAST + SPRITE_NORTH + SPRITE_WEST
- };
- /* Type of the sprite action. The numbers correspond with the
- * row in the liberated pixel cup sprite sheet compilation divided by 4,
- * which is used placeholder art now. The real art will have the same structure
- * for it's sprite sheets.
- *
- * To limit art requirements, emotions will be showed with emoticons and through
- * the character portraits in the dialogues.
- *
- */
- enum SpriteActionType_ {
- SPRITE_CAST = 0,
- SPRITE_STAB = 1,
- SPRITE_WALK = 2,
- SPRITE_SLASH = 3,
- SPRITE_SHOOT = 4,
- SPRITE_DOWN = 5,
-
- /* The positions below are not in the LPC
- * sprite sheet but could be synthesized or used in the real art. */
- SPRITE_RUN = 6,
- SPRITE_HURT = 7,
- SPRITE_STAND = 8,
- SPRITE_DEFEND = 9,
- };
- /* Sprite layer suggested uses. For Eruta the game,
- * knives, blades, staves, claws, guns and cannons are used,
- * but not bows and polearms */
- enum SpriteLayerKind_ {
- SPRITELAYER_BEHINDBODY = 1,
- SPRITELAYER_BODY = 3,
- SPRITELAYER_HEAD = 5,
- SPRITELAYER_EYES = 7,
- SPRITELAYER_EARS = 9,
- SPRITELAYER_HAIR = 10,
- SPRITELAYER_HANDS = 13,
- SPRITELAYER_FEET = 15,
- SPRITELAYER_LEGS = 17,
- SPRITELAYER_TORSO = 19,
- SPRITELAYER_BELT = 21,
- SPRITELAYER_ACCESSORY = 23,
- SPRITELAYER_BLADE = 25,
- SPRITELAYER_KNIFE = 27,
- SPRITELAYER_CLAW = 29,
- SPRITELAYER_STAFF = 31,
- SPRITELAYER_GUN = 33,
- SPRITELAYER_CANNON = 35,
- SPRITELAYER_POLEARM = 37,
- SPRITELAYER_BOW = 39,
- };
- /* Load type of sprites. */
- enum SpriteLoadType_ {
- SPRITE_LOAD_ULPCSS_NORMAL = 0,
- SPRITE_LOAD_ULPCSS_OVERSIZED_SLASH = 1,
- SPRITE_LOAD_ULPCSS_OVERSIZED_STAB = 2,
- };
- /* Amount of potential actions that a sprite has by default at creation. */
- #define SPRITE_NACTIONS_DEFAULT 32
- /* Amount of potential frame that a spriteaction has by default at creation. */
- #define SPRITEACTION_NFRAMES_DEFAULT 32
- /* Amount of potential layers that a spriteframe has by default at creation. */
- #define SPRITEFRAME_NLAYERS_DEFAULT 64
- int spriteframe_maxlayers(SpriteFrame * self);
- SpriteCell * spriteframe_cell(SpriteFrame * self, int index);
- int sprite_maxactions(Sprite *self);
- SpriteAction * sprite_action(Sprite *self, int index);
- SpriteAction * sprite_action_(Sprite *self, int index, SpriteAction * action);
- int sprite_frames(Sprite *self, int action);
- SpriteFrame * sprite_frame(Sprite *self, int action, int index);
- Sprite * sprite_initall(Sprite * self, int index, int nactions);
- Sprite * sprite_init(Sprite * self, int index);
- Sprite * sprite_done(Sprite * self);
- Sprite * sprite_free(Sprite * self);
- Sprite * sprite_alloc();
- Sprite * sprite_new(int index);
- /** Sprite cleanup walker decaration, needed for spritelist.c */
- void * sprite_cleanup_walker(void * data, void * extra);
- void sprite_draw(Sprite * self, Point * at);
- Sprite * sprite_now_(Sprite * self, int actionnow, int framenow);
- void sprite_update(Sprite * self, double dt);
- SpriteAction * sprite_action_for(Sprite * me, int pose, int direction);
- int sprite_action_index_for(Sprite * me, int pose, int direction);
- SpriteFrame * spriteaction_newframe
- (SpriteAction * self, int index, double duration);
- SpriteAction * sprite_newaction
- (Sprite * self, int actionindex, int type, int flags);
- SpriteCell * sprite_load_cell_from
- (Sprite * self, int pose, int direction, int layeri,
- Image * source, Point size, Point where, Point offset, double duration);
- SpriteFrame * sprite_newframe
- (Sprite * self, int actionindex, int frameindex, double duration);
- Sprite * sprite_loadlayer_vpath
- (Sprite * self, SpriteLayout * layout, int layerindex, char * vpath);
- Sprite * sprite_loadlayer_ulpcss_vpath
- (Sprite * self, int layerindex, char * vpath, int oversized);
- int sprite_framesused(Sprite * self, int actionindex);
- double spriteframe_duration(SpriteFrame * me);
- int spriteaction_is_pose(SpriteAction * self, int pose, int direction);
- int spriteaction_matches_pose(SpriteAction * self, int pose, int direction);
- void spritecell_draw_tinted(SpriteCell * self, Point * at, Color tint);
- void spritecell_draw(SpriteCell * self, Point * at);
-
- int sprite_id(Sprite * sprite);
- Point spritecell_real_position(SpriteCell * self, Point * at);
- #endif
|