diff --git a/src/character.c b/src/character.c index 0cff320..f066664 100644 --- a/src/character.c +++ b/src/character.c @@ -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; diff --git a/src/character.h b/src/character.h index ed2cb94..6f19d2f 100644 --- a/src/character.h +++ b/src/character.h @@ -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 };