From 8a38699f399103d4ee003e6eb63dd62656115be2 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 30 Jan 2021 14:43:41 -0500 Subject: Sprite animations are more generic than still/walk now --- src/game.h | 4 ++-- src/party.cpp | 6 ++++-- src/sprite.cpp | 19 +++++-------------- src/sprite.h | 7 +++---- 4 files changed, 14 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/game.h b/src/game.h index a8626fa..274ef2e 100644 --- a/src/game.h +++ b/src/game.h @@ -40,8 +40,8 @@ public: void moveSprite(int id, vec2i newLoc); - void setSpriteWalking(int id, bool walking) { - sprites_[id].setWalking(walking); + void setSpriteState(int id, std::string state) { + sprites_[id].setState(std::move(state)); } void setSpriteDirection(int id, Direction dir) { diff --git a/src/party.cpp b/src/party.cpp index 371514b..28492a9 100644 --- a/src/party.cpp +++ b/src/party.cpp @@ -17,6 +17,8 @@ void Party::addMember(Game& game, int spriteId) { } members_.push_back(std::move(newMember)); + + game.setSpriteState(spriteId, "still"); } void Party::move(Game& game, const Input& keystate) { @@ -64,7 +66,7 @@ void Party::move(Game& game, const Input& keystate) { if (keystate.up || keystate.down || keystate.left || keystate.right) { for (int i = 0; i < members_.size(); i++) { - game.setSpriteWalking(members_[i].spriteId, true); + game.setSpriteState(members_[i].spriteId, "walk"); } game.moveSprite(members_[0].spriteId, pLoc); @@ -82,7 +84,7 @@ void Party::move(Game& game, const Input& keystate) { } } else { for (int i = 0; i < members_.size(); i++) { - game.setSpriteWalking(members_[i].spriteId, false); + game.setSpriteState(members_[i].spriteId, "still"); } } } \ No newline at end of file diff --git a/src/sprite.cpp b/src/sprite.cpp index cc196ae..c52807a 100644 --- a/src/sprite.cpp +++ b/src/sprite.cpp @@ -38,12 +38,7 @@ Sprite::Sprite(std::string_view filename, Renderer& renderer) { animations_.push_back(std::move(frames)); Direction dir = directionFromString(std::string(m[2])); - - if (m[1] == "still") { - stillAnims_[dir] = animId; - } else { - walkingAnims_[dir] = animId; - } + stateDirToAnim_[m[1]][dir] = animId; } updateAnimation(); @@ -56,19 +51,15 @@ void Sprite::setDirection(Direction dir) { } } -void Sprite::setWalking(bool walking) { - if (isWalking_ != walking) { - isWalking_ = walking; +void Sprite::setState(std::string state) { + if (state_ != state) { + state_ = state; updateAnimation(); } } void Sprite::updateAnimation() { - if (isWalking_) { - curAnim_ = walkingAnims_[curDir_]; - } else { - curAnim_ = stillAnims_[curDir_]; - } + curAnim_ = stateDirToAnim_[state_][curDir_]; curFrame_ = 0; } diff --git a/src/sprite.h b/src/sprite.h index 5e8003b..82ea90c 100644 --- a/src/sprite.h +++ b/src/sprite.h @@ -31,7 +31,7 @@ public: Direction getDirection() const { return curDir_; } - void setWalking(bool walking); + void setState(std::string state); void tickAnim(); @@ -43,12 +43,11 @@ private: vec2i loc_ { 0, 0 }; vec2i size_; Direction curDir_ = Direction::down; - bool isWalking_ = false; + std::string state_; int curAnim_ = 0; int curFrame_ = 0; std::vector> animations_; - std::map stillAnims_; - std::map walkingAnims_; + std::map> stateDirToAnim_; }; #endif /* end of include guard: SPRITE_H_70503825 */ -- cgit 1.4.1