161 lines
4.8 KiB
C
161 lines
4.8 KiB
C
// -----------------------------------------------------------------------------
|
|
// sprites
|
|
|
|
typedef enum SPRITE_FLAGS {
|
|
SPRITE_PROJECTED = 1,
|
|
SPRITE_ADDITIVE = 2,
|
|
SPRITE_CENTERED = 4,
|
|
SPRITE_RESOLUTION_INDEPENDANT = 128,
|
|
} SPRITE_FLAGS;
|
|
|
|
// texture id, position(x,y,depth sort), tint color, rotation angle
|
|
API void sprite( texture_t texture, float position[3], float rotation /*0*/, unsigned color /*~0u*/, unsigned flags);
|
|
|
|
// texture id, rect(x,y,w,h) is [0..1] normalized, then: pos(xyz,z-index), (scale.xy,offset.xy), rotation (degrees), color (rgba)
|
|
API void sprite_rect( texture_t t, vec4 rect, vec4 pos, vec4 scaleoff, float tilt_deg, unsigned tint_rgba, unsigned flags);
|
|
|
|
// texture id, sheet(frameNumber,X,Y) (frame in a X*Y spritesheet), position(x,y,depth sort), rotation angle, offset(x,y), scale(x,y), is_additive, tint color
|
|
API void sprite_sheet( texture_t texture, float sheet[3], float position[3], float rotation, float offset[2], float scale[2], unsigned rgba, unsigned flags);
|
|
|
|
API void sprite_flush();
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// tilemaps
|
|
|
|
typedef struct tileset_t {
|
|
texture_t tex; // spritesheet
|
|
unsigned tile_w, tile_h; // dimensions per tile in pixels
|
|
unsigned cols, rows; // tileset num_cols, num_rows
|
|
unsigned selected; // active tile (while editing)
|
|
} tileset_t;
|
|
|
|
API tileset_t tileset(texture_t tex, unsigned tile_w, unsigned tile_h, unsigned cols, unsigned rows);
|
|
|
|
API int ui_tileset( tileset_t t );
|
|
|
|
typedef struct tilemap_t {
|
|
int blank_chr; // transparent tile
|
|
unsigned cols, rows; // map dimensions (in tiles)
|
|
array(int) map;
|
|
|
|
vec3 position; // x,y,scale
|
|
float zindex;
|
|
float tilt;
|
|
unsigned tint;
|
|
bool is_additive;
|
|
} tilemap_t;
|
|
|
|
API tilemap_t tilemap(const char *map, int blank_chr, int linefeed_chr);
|
|
API void tilemap_render( tilemap_t m, tileset_t style );
|
|
API void tilemap_render_ext( tilemap_t m, tileset_t style, float zindex, float xy_zoom[3], float tilt, unsigned tint, bool is_additive );
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// tiled maps
|
|
|
|
typedef struct tiled_t {
|
|
char *map_name;
|
|
unsigned first_gid, tilew, tileh, w, h;
|
|
|
|
bool parallax;
|
|
vec3 position;
|
|
array(bool) visible;
|
|
array(tilemap_t) layers;
|
|
array(tileset_t) sets;
|
|
array(char*) names;
|
|
} tiled_t;
|
|
|
|
API tiled_t tiled(const char *file_tmx);
|
|
API void tiled_render(tiled_t tmx, vec3 pos);
|
|
|
|
API void ui_tiled(tiled_t *t);
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// spines
|
|
|
|
typedef struct spine_t spine_t;
|
|
|
|
API spine_t*spine(const char *file_json, const char *file_atlas, unsigned flags);
|
|
API void spine_skin(spine_t *p, unsigned skin);
|
|
API void spine_render(spine_t *p, vec3 offset, unsigned flags);
|
|
API void spine_animate(spine_t *p, float delta);
|
|
|
|
API void ui_spine(spine_t *p);
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// atlas api
|
|
typedef struct atlas_frame_t {
|
|
unsigned delay;
|
|
vec4 sheet;
|
|
vec2 anchor; // @todo
|
|
array(vec3i) indices;
|
|
array(vec2) coords;
|
|
array(vec2) uvs;
|
|
} atlas_frame_t;
|
|
|
|
typedef struct atlas_anim_t {
|
|
unsigned name;
|
|
array(unsigned) frames;
|
|
} atlas_anim_t;
|
|
|
|
typedef struct atlas_slice_frame_t {
|
|
vec4 bounds;
|
|
bool has_9slice;
|
|
vec4 core;
|
|
vec2 pivot;
|
|
unsigned color;
|
|
char *text;
|
|
} atlas_slice_frame_t;
|
|
|
|
typedef struct atlas_slice_t {
|
|
unsigned name;
|
|
array(unsigned) frames;
|
|
} atlas_slice_t;
|
|
|
|
typedef struct atlas_t {
|
|
texture_t tex;
|
|
|
|
array(atlas_frame_t) frames;
|
|
array(atlas_anim_t) anims;
|
|
array(atlas_slice_t) slices;
|
|
array(atlas_slice_frame_t) slice_frames;
|
|
|
|
quarks_db db;
|
|
} atlas_t;
|
|
|
|
API atlas_t atlas_create(const char *inifile, unsigned flags);
|
|
API int ui_atlas(atlas_t *a);
|
|
API int ui_atlas_frame(atlas_frame_t *f);
|
|
API void atlas_destroy(atlas_t *a);
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// sprite v2 api
|
|
|
|
typedef struct sprite_t { OBJ
|
|
vec4 gamepad; // up,down,left,right
|
|
vec2 fire; // a,b
|
|
|
|
vec4 pos;
|
|
vec2 sca;
|
|
float tilt;
|
|
unsigned tint;
|
|
unsigned frame;
|
|
unsigned timer, timer_ms;
|
|
unsigned flip_, flipped;
|
|
unsigned play;
|
|
bool paused;
|
|
// array(unsigned) play_queue; or unsigned play_next;
|
|
struct atlas_t *a; // shared
|
|
//atlas_t own; // owned
|
|
} sprite_t;
|
|
|
|
OBJTYPEDEF(sprite_t,10);
|
|
API void sprite_ctor(sprite_t *s);
|
|
API void sprite_dtor(sprite_t *s);
|
|
API void sprite_tick(sprite_t *s);
|
|
API void sprite_draw(sprite_t *s);
|
|
API void sprite_edit(sprite_t *s);
|
|
|
|
API sprite_t*sprite_new(const char *ase, int bindings[6]);
|
|
API void sprite_del(sprite_t *s);
|
|
API void sprite_setanim(sprite_t *s, unsigned name);
|