mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-01 02:56:43 +01:00
character: add ability to specify spritesheet wide pixel offset
This commit is contained in:
parent
3c3730f9d5
commit
c337e3435f
2 changed files with 6 additions and 1 deletions
|
@ -240,6 +240,9 @@ SYMBOL_EXPORT void RegisterSpritesheet(struct Game* game, struct Character* char
|
||||||
s->pivotX = strtodnull(al_get_config_value(config, "pivot", "x"), 0.5);
|
s->pivotX = strtodnull(al_get_config_value(config, "pivot", "x"), 0.5);
|
||||||
s->pivotY = strtodnull(al_get_config_value(config, "pivot", "y"), 0.5);
|
s->pivotY = strtodnull(al_get_config_value(config, "pivot", "y"), 0.5);
|
||||||
|
|
||||||
|
s->offsetX = strtolnull(al_get_config_value(config, "offset", "x"), 0);
|
||||||
|
s->offsetY = strtolnull(al_get_config_value(config, "offset", "y"), 0);
|
||||||
|
|
||||||
s->frames = malloc(sizeof(struct SpritesheetFrame) * s->frameCount);
|
s->frames = malloc(sizeof(struct SpritesheetFrame) * s->frameCount);
|
||||||
|
|
||||||
for (int i = 0; i < s->frameCount; i++) {
|
for (int i = 0; i < s->frameCount; i++) {
|
||||||
|
@ -476,7 +479,7 @@ SYMBOL_EXPORT ALLEGRO_TRANSFORM GetCharacterTransform(struct Game* game, struct
|
||||||
al_scale_transform(&transform, ((character->flipX ^ character->spritesheet->flipX ^ character->frame->flipX) ? -1 : 1), ((character->flipY ^ character->spritesheet->flipY ^ character->frame->flipY) ? -1 : 1)); // flipping; FIXME: should it be here or later?
|
al_scale_transform(&transform, ((character->flipX ^ character->spritesheet->flipX ^ character->frame->flipX) ? -1 : 1), ((character->flipY ^ character->spritesheet->flipY ^ character->frame->flipY) ? -1 : 1)); // flipping; FIXME: should it be here or later?
|
||||||
al_translate_transform(&transform, w / 2.0, h / 2.0);
|
al_translate_transform(&transform, w / 2.0, h / 2.0);
|
||||||
|
|
||||||
al_translate_transform(&transform, character->spritesheet->frames[character->pos].x, character->spritesheet->frames[character->pos].y); // spritesheet frame offset
|
al_translate_transform(&transform, character->spritesheet->offsetX + character->spritesheet->frames[character->pos].x, character->spritesheet->offsetY + character->spritesheet->frames[character->pos].y); // spritesheet frame offset
|
||||||
al_translate_transform(&transform, -w * character->spritesheet->pivotX, -h * character->spritesheet->pivotY); // pivot
|
al_translate_transform(&transform, -w * character->spritesheet->pivotX, -h * character->spritesheet->pivotY); // pivot
|
||||||
al_scale_transform(&transform, character->scaleX, character->scaleY);
|
al_scale_transform(&transform, character->scaleX, character->scaleY);
|
||||||
al_rotate_transform(&transform, character->angle);
|
al_rotate_transform(&transform, character->angle);
|
||||||
|
|
|
@ -53,6 +53,8 @@ struct Spritesheet {
|
||||||
bool reversed;
|
bool reversed;
|
||||||
double pivotX;
|
double pivotX;
|
||||||
double pivotY;
|
double pivotY;
|
||||||
|
int offsetX;
|
||||||
|
int offsetY;
|
||||||
bool flipX;
|
bool flipX;
|
||||||
bool flipY;
|
bool flipY;
|
||||||
struct SpritesheetFrame* frames;
|
struct SpritesheetFrame* frames;
|
||||||
|
|
Loading…
Reference in a new issue