mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-08 06:06:43 +01:00
character: save transform to character struct for easier handling by auxiliary helpers
This commit is contained in:
parent
d88162cab4
commit
df536baa32
2 changed files with 14 additions and 9 deletions
|
@ -428,19 +428,22 @@ SYMBOL_EXPORT void DrawCharacter(struct Game* game, struct Character* character)
|
|||
int w = character->spritesheet->width, h = character->spritesheet->height;
|
||||
|
||||
ALLEGRO_TRANSFORM current = *al_get_current_transform();
|
||||
ALLEGRO_TRANSFORM transform;
|
||||
// TODO: move to function, use in IsOnCharacter etc.
|
||||
al_identity_transform(&transform);
|
||||
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, character->spritesheet->frames[character->pos].x, character->spritesheet->frames[character->pos].y); // spritesheet frame offset
|
||||
al_translate_transform(&transform, -w * character->spritesheet->pivotX, -h * character->spritesheet->pivotY); // pivot
|
||||
al_scale_transform(&transform, character->scaleX, character->scaleY);
|
||||
al_rotate_transform(&transform, character->angle);
|
||||
al_identity_transform(&character->transform);
|
||||
al_translate_transform(&character->transform, GetCharacterX(game, character), GetCharacterY(game, character)); // position
|
||||
al_scale_transform(&character->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(&character->transform, character->spritesheet->frames[character->pos].x, character->spritesheet->frames[character->pos].y); // spritesheet frame offset
|
||||
al_translate_transform(&character->transform, -w * character->spritesheet->pivotX, -h * character->spritesheet->pivotY); // pivot
|
||||
al_scale_transform(&character->transform, character->scaleX, character->scaleY);
|
||||
al_rotate_transform(&character->transform, character->angle);
|
||||
|
||||
ALLEGRO_TRANSFORM transform;
|
||||
al_identity_transform(&transform);
|
||||
al_compose_transform(&transform, &character->transform);
|
||||
al_compose_transform(&transform, ¤t);
|
||||
al_use_transform(&transform);
|
||||
|
||||
al_draw_tinted_bitmap(character->frame->bitmap, character->tint, GetCharacterX(game, character), GetCharacterY(game, character), 0);
|
||||
al_draw_tinted_bitmap(character->frame->bitmap, character->tint, 0, 0, 0);
|
||||
|
||||
al_use_transform(¤t);
|
||||
}
|
||||
|
@ -483,7 +486,8 @@ SYMBOL_EXPORT bool IsOnCharacter(struct Game* game, struct Character* character,
|
|||
}
|
||||
|
||||
int w = character->spritesheet->width, h = character->spritesheet->height;
|
||||
float x1 = GetCharacterX(game, character), y1 = GetCharacterY(game, character);
|
||||
//float x1 = GetCharacterX(game, character), y1 = GetCharacterY(game, character);
|
||||
float x1 = 0, y1 = 0;
|
||||
float x2 = x1 + w, y2 = y1 + h;
|
||||
|
||||
/* float scalex = character->scaleX;
|
||||
|
|
|
@ -97,6 +97,7 @@ struct Character {
|
|||
void (*callback)(struct Game*, struct Character*, char* newAnim, char* oldAnim, void*);
|
||||
void* callbackData;
|
||||
bool shared; /*!< Marks the list of spritesheets as shared, so it won't be freed together with the character. */
|
||||
ALLEGRO_TRANSFORM transform;
|
||||
|
||||
// TODO: parents
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue