From 91180024a1fb8057f334588e40cf48eac8d3940a Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Tue, 27 Nov 2018 04:43:58 +0100 Subject: [PATCH] add CopyCharacter util function --- src/character.c | 21 +++++++++++++++++++++ src/character.h | 2 ++ src/particle.c | 5 +---- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/character.c b/src/character.c index d958ba9..a6385aa 100644 --- a/src/character.c +++ b/src/character.c @@ -568,6 +568,25 @@ SYMBOL_EXPORT void DrawCharacter(struct Game* game, struct Character* character) al_use_transform(¤t); } +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) { 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) { character->hidden = false; } + SYMBOL_EXPORT void HideCharacter(struct Game* game, struct Character* character) { character->hidden = true; } + SYMBOL_EXPORT bool IsCharacterHidden(struct Game* game, struct Character* character) { if (character->hidden) { return true; diff --git a/src/character.h b/src/character.h index 762dd16..1e67495 100644 --- a/src/character.h +++ b/src/character.h @@ -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 CopyCharacter(struct Game* game, struct Character* from, struct Character* to); + float GetCharacterX(struct Game* game, struct Character* character); float GetCharacterY(struct Game* game, struct Character* character); int GetCharacterConfineX(struct Game* game, struct Character* character); diff --git a/src/particle.c b/src/particle.c index f944c29..664f7a5 100644 --- a/src/particle.c +++ b/src/particle.c @@ -197,10 +197,7 @@ SYMBOL_EXPORT void EmitParticle(struct Game* game, struct ParticleBucket* bucket bucket->particles[bucket->last].state = state; bucket->particles[bucket->last].data = data; - bucket->particles[bucket->last].character->spritesheets = archetype->spritesheets; - 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); + CopyCharacter(game, archetype, bucket->particles[bucket->last].character); bucket->active++; bucket->last++;