character: save transform to character struct for easier handling by auxiliary helpers

This commit is contained in:
Sebastian Krzyszkowiak 2018-03-21 02:15:34 +01:00
parent d88162cab4
commit df536baa32
2 changed files with 14 additions and 9 deletions

View file

@ -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, &current);
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(&current);
}
@ -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;

View file

@ -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
};