add CopyCharacter util function

This commit is contained in:
Sebastian Krzyszkowiak 2018-11-27 04:43:58 +01:00
parent 97495fa2aa
commit 91180024a1
No known key found for this signature in database
GPG key ID: E8F235CF3BDBC3FF
3 changed files with 24 additions and 4 deletions

View file

@ -568,6 +568,25 @@ SYMBOL_EXPORT void DrawCharacter(struct Game* game, struct Character* character)
al_use_transform(&current); al_use_transform(&current);
} }
SYMBOL_EXPORT void CopyCharacter(struct Game* game, struct Character* from, struct Character* to) {
to->shared = true;
if (to->name) {
free(to->name);
}
to->name = from->name ? strdup(from->name) : NULL;
to->spritesheets = from->spritesheets;
to->spritesheet = from->spritesheet;
to->frame = from->frame;
to->delta = from->delta;
to->pos = from->pos;
to->predecessor = from->predecessor ? strdup(from->predecessor) : NULL;
to->repeats = from->repeats;
to->reversed = from->reversed;
to->reversing = from->reversing;
to->successor = from->successor ? strdup(from->successor) : NULL;
to->frame = &to->spritesheet->frames[to->pos];
}
SYMBOL_EXPORT void SetParentCharacter(struct Game* game, struct Character* character, struct Character* parent) { SYMBOL_EXPORT void SetParentCharacter(struct Game* game, struct Character* character, struct Character* parent) {
character->parent = parent; character->parent = parent;
} }
@ -630,9 +649,11 @@ SYMBOL_EXPORT bool IsOnCharacter(struct Game* game, struct Character* character,
SYMBOL_EXPORT void ShowCharacter(struct Game* game, struct Character* character) { SYMBOL_EXPORT void ShowCharacter(struct Game* game, struct Character* character) {
character->hidden = false; character->hidden = false;
} }
SYMBOL_EXPORT void HideCharacter(struct Game* game, struct Character* character) { SYMBOL_EXPORT void HideCharacter(struct Game* game, struct Character* character) {
character->hidden = true; character->hidden = true;
} }
SYMBOL_EXPORT bool IsCharacterHidden(struct Game* game, struct Character* character) { SYMBOL_EXPORT bool IsCharacterHidden(struct Game* game, struct Character* character) {
if (character->hidden) { if (character->hidden) {
return true; return true;

View file

@ -139,6 +139,8 @@ void SetCharacterConfines(struct Game* game, struct Character* character, int x,
void SetParentCharacter(struct Game* game, struct Character* character, struct Character* parent); void SetParentCharacter(struct Game* game, struct Character* character, struct Character* parent);
void CopyCharacter(struct Game* game, struct Character* from, struct Character* to);
float GetCharacterX(struct Game* game, struct Character* character); float GetCharacterX(struct Game* game, struct Character* character);
float GetCharacterY(struct Game* game, struct Character* character); float GetCharacterY(struct Game* game, struct Character* character);
int GetCharacterConfineX(struct Game* game, struct Character* character); int GetCharacterConfineX(struct Game* game, struct Character* character);

View file

@ -197,10 +197,7 @@ SYMBOL_EXPORT void EmitParticle(struct Game* game, struct ParticleBucket* bucket
bucket->particles[bucket->last].state = state; bucket->particles[bucket->last].state = state;
bucket->particles[bucket->last].data = data; bucket->particles[bucket->last].data = data;
bucket->particles[bucket->last].character->spritesheets = archetype->spritesheets; CopyCharacter(game, archetype, bucket->particles[bucket->last].character);
bucket->particles[bucket->last].character->spritesheet = archetype->spritesheet;
// TODO: move more state and avoid SelectSpritesheet; maybe add a function like CopyCharacter?
SelectSpritesheet(game, bucket->particles[bucket->last].character, bucket->particles[bucket->last].character->spritesheet->name);
bucket->active++; bucket->active++;
bucket->last++; bucket->last++;