mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-08 06:06:43 +01:00
add SetCharacterPivotPoint function
This commit is contained in:
parent
b4c7edf335
commit
c34c13739d
2 changed files with 11 additions and 2 deletions
|
@ -148,6 +148,8 @@ SYMBOL_EXPORT struct Character* CreateCharacter(struct Game* game, char* name) {
|
||||||
character->pos_tmp = 0;
|
character->pos_tmp = 0;
|
||||||
character->x = -1;
|
character->x = -1;
|
||||||
character->y = -1;
|
character->y = -1;
|
||||||
|
character->pivotx = 0.5;
|
||||||
|
character->pivoty = 0.5;
|
||||||
character->spritesheets = NULL;
|
character->spritesheets = NULL;
|
||||||
character->spritesheet = NULL;
|
character->spritesheet = NULL;
|
||||||
character->successor = NULL;
|
character->successor = NULL;
|
||||||
|
@ -230,11 +232,16 @@ SYMBOL_EXPORT void SetCharacterPosition(struct Game* game, struct Character* cha
|
||||||
SetCharacterPositionF(game, character, x / (float)game->viewport.width, y / (float)game->viewport.height, angle);
|
SetCharacterPositionF(game, character, x / (float)game->viewport.width, y / (float)game->viewport.height, angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SYMBOL_EXPORT void SetCharacterPivotPoint(struct Game* game, struct Character* character, float x, float y) {
|
||||||
|
character->pivotx = x;
|
||||||
|
character->pivoty = y;
|
||||||
|
}
|
||||||
|
|
||||||
SYMBOL_EXPORT void DrawScaledCharacterF(struct Game* game, struct Character* character, ALLEGRO_COLOR tint, float scalex, float scaley, int flags) {
|
SYMBOL_EXPORT void DrawScaledCharacterF(struct Game* game, struct Character* character, ALLEGRO_COLOR tint, float scalex, float scaley, int flags) {
|
||||||
if (character->dead) { return; }
|
if (character->dead) { return; }
|
||||||
int spritesheetX = al_get_bitmap_width(character->bitmap) * (character->pos % character->spritesheet->cols);
|
int spritesheetX = al_get_bitmap_width(character->bitmap) * (character->pos % character->spritesheet->cols);
|
||||||
int spritesheetY = al_get_bitmap_height(character->bitmap) * (character->pos / character->spritesheet->cols);
|
int spritesheetY = al_get_bitmap_height(character->bitmap) * (character->pos / character->spritesheet->cols);
|
||||||
al_draw_tinted_scaled_rotated_bitmap_region(character->spritesheet->bitmap, spritesheetX, spritesheetY, al_get_bitmap_width(character->bitmap), al_get_bitmap_height(character->bitmap), tint, al_get_bitmap_width(character->bitmap) / 2, al_get_bitmap_height(character->bitmap) / 2, character->x * game->viewport.width + al_get_bitmap_width(character->bitmap) * scalex / 2, character->y * game->viewport.height + al_get_bitmap_height(character->bitmap) * scaley / 2, scalex, scaley, character->angle, flags);
|
al_draw_tinted_scaled_rotated_bitmap_region(character->spritesheet->bitmap, spritesheetX, spritesheetY, al_get_bitmap_width(character->bitmap), al_get_bitmap_height(character->bitmap), tint, al_get_bitmap_width(character->bitmap) * character->pivotx, al_get_bitmap_height(character->bitmap) * character->pivoty, character->x * game->viewport.width + al_get_bitmap_width(character->bitmap) * scalex * character->pivotx, character->y * game->viewport.height + al_get_bitmap_height(character->bitmap) * scaley * character->pivoty, scalex, scaley, character->angle, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
SYMBOL_EXPORT void DrawCharacterF(struct Game* game, struct Character* character, ALLEGRO_COLOR tint, int flags) {
|
SYMBOL_EXPORT void DrawCharacterF(struct Game* game, struct Character* character, ALLEGRO_COLOR tint, int flags) {
|
||||||
|
@ -245,7 +252,7 @@ SYMBOL_EXPORT void DrawScaledCharacter(struct Game* game, struct Character* char
|
||||||
if (character->dead) { return; }
|
if (character->dead) { return; }
|
||||||
int spritesheetX = al_get_bitmap_width(character->bitmap) * (character->pos % character->spritesheet->cols);
|
int spritesheetX = al_get_bitmap_width(character->bitmap) * (character->pos % character->spritesheet->cols);
|
||||||
int spritesheetY = al_get_bitmap_height(character->bitmap) * (character->pos / character->spritesheet->cols);
|
int spritesheetY = al_get_bitmap_height(character->bitmap) * (character->pos / character->spritesheet->cols);
|
||||||
al_draw_tinted_scaled_rotated_bitmap_region(character->spritesheet->bitmap, spritesheetX, spritesheetY, al_get_bitmap_width(character->bitmap), al_get_bitmap_height(character->bitmap), tint, al_get_bitmap_width(character->bitmap) / 2, al_get_bitmap_height(character->bitmap) / 2, (int)(character->x * game->viewport.width + al_get_bitmap_width(character->bitmap) * scalex / 2), (int)(character->y * game->viewport.height + al_get_bitmap_height(character->bitmap) * scaley / 2), scalex, scaley, character->angle, flags);
|
al_draw_tinted_scaled_rotated_bitmap_region(character->spritesheet->bitmap, spritesheetX, spritesheetY, al_get_bitmap_width(character->bitmap), al_get_bitmap_height(character->bitmap), tint, al_get_bitmap_width(character->bitmap) * character->pivotx, al_get_bitmap_height(character->bitmap) * character->pivoty, (int)(character->x * game->viewport.width + al_get_bitmap_width(character->bitmap) * scalex * character->pivotx), (int)(character->y * game->viewport.height + al_get_bitmap_height(character->bitmap) * scaley * character->pivoty), scalex, scaley, character->angle, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
SYMBOL_EXPORT void DrawCharacter(struct Game* game, struct Character* character, ALLEGRO_COLOR tint, int flags) {
|
SYMBOL_EXPORT void DrawCharacter(struct Game* game, struct Character* character, ALLEGRO_COLOR tint, int flags) {
|
||||||
|
|
|
@ -54,6 +54,7 @@ struct Character {
|
||||||
float x; /*!< Horizontal position of character. */
|
float x; /*!< Horizontal position of character. */
|
||||||
float y; /*!< Vertical position of character. */
|
float y; /*!< Vertical position of character. */
|
||||||
float angle; /*!< Characters display angle (radians). */
|
float angle; /*!< Characters display angle (radians). */
|
||||||
|
float pivotx, pivoty; /*!< Pivot point, relative of character's size. */
|
||||||
void* data; /*!< Additional, custom character data (HP etc.). */
|
void* data; /*!< Additional, custom character data (HP etc.). */
|
||||||
int repeat;
|
int repeat;
|
||||||
bool shared;
|
bool shared;
|
||||||
|
@ -80,6 +81,7 @@ void MoveCharacter(struct Game* game, struct Character* character, float x, floa
|
||||||
void MoveCharacterF(struct Game* game, struct Character* character, float x, float y, float angle);
|
void MoveCharacterF(struct Game* game, struct Character* character, float x, float y, float angle);
|
||||||
void SetCharacterPosition(struct Game* game, struct Character* character, float x, float y, float angle);
|
void SetCharacterPosition(struct Game* game, struct Character* character, float x, float y, float angle);
|
||||||
void SetCharacterPositionF(struct Game* game, struct Character* character, float x, float y, float angle);
|
void SetCharacterPositionF(struct Game* game, struct Character* character, float x, float y, float angle);
|
||||||
|
void SetCharacterPivotPoint(struct Game* game, struct Character* character, float x, float y);
|
||||||
|
|
||||||
int GetCharacterX(struct Game* game, struct Character* character);
|
int GetCharacterX(struct Game* game, struct Character* character);
|
||||||
int GetCharacterY(struct Game* game, struct Character* character);
|
int GetCharacterY(struct Game* game, struct Character* character);
|
||||||
|
|
Loading…
Reference in a new issue