From de0ac2927230ce44fb92f362bfa7e4b4cb29bdd1 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 30 Jan 2021 09:56:16 -0500 Subject: Added party following movement --- src/consts.h | 1 + src/main.cpp | 8 +++++--- src/party.cpp | 21 +++++++++++++++++++-- src/party.h | 4 +++- src/sprite.cpp | 3 ++- src/sprite.h | 4 ++-- 6 files changed, 32 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/consts.h b/src/consts.h index 96176a4..d6bf90b 100644 --- a/src/consts.h +++ b/src/consts.h @@ -5,5 +5,6 @@ const int GAME_WIDTH = 640; const int GAME_HEIGHT = 480; const int MOVEMENT_SPEED = 4; +const int PARTY_FRAME_DELAY = 20;// / MOVEMENT_SPEED; #endif /* end of include guard: CONSTS_H_9561E49C */ diff --git a/src/main.cpp b/src/main.cpp index b282a2e..5a4373b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,12 +5,14 @@ void loop(Renderer& renderer) { Game game; - int playerSpriteId = game.addSprite(Sprite("../res/lucas.png", renderer)); - Input keystate; + int kumaSprite = game.addSprite(Sprite("../res/kumatora.png", renderer, 17, 31)); + int lucasSprite = game.addSprite(Sprite("../res/lucas.png", renderer, 17, 27)); + Party party; - party.addMember(playerSpriteId); + party.addMember(game, lucasSprite); + party.addMember(game, kumaSprite); renderer.render(game); diff --git a/src/party.cpp b/src/party.cpp index 559aacb..6c003b8 100644 --- a/src/party.cpp +++ b/src/party.cpp @@ -1,10 +1,20 @@ #include "party.h" #include "consts.h" -void Party::addMember(int spriteId) { +void Party::addMember(Game& game, int spriteId) { + int index = members_.size(); + PartyMember newMember; newMember.spriteId = spriteId; + if (index > 0) { + Sprite& sprite = game.getSprite(spriteId); + + for (int i = 0; i < PARTY_FRAME_DELAY * index; i++) { + newMember.nextPosition.push_back(sprite.loc()); + } + } + members_.push_back(std::move(newMember)); } @@ -36,7 +46,14 @@ void Party::move(Game& game, const Input& keystate) { pLoc.x() += MOVEMENT_SPEED; } - if (pLoc != p1.loc()) { + if (keystate.up || keystate.down || keystate.left || keystate.right) { p1.loc() = pLoc; + + for (int i = 1; i < members_.size(); i++) { + Sprite& pNext = game.getSprite(members_[i].spriteId); + members_[i].nextPosition.push_back(pLoc); + pNext.loc() = members_[i].nextPosition.front(); + members_[i].nextPosition.pop_front(); + } } } \ No newline at end of file diff --git a/src/party.h b/src/party.h index 18c57b5..2a6ffc9 100644 --- a/src/party.h +++ b/src/party.h @@ -1,13 +1,14 @@ #ifndef PARTY_H_826F91BA #define PARTY_H_826F91BA +#include #include #include "game.h" class Party { public: - void addMember(int spriteId); + void addMember(Game& game, int spriteId); void move(Game& game, const Input& keystate); @@ -15,6 +16,7 @@ private: struct PartyMember { int spriteId; + std::deque nextPosition; }; std::vector members_; diff --git a/src/sprite.cpp b/src/sprite.cpp index 0059f70..c8c4656 100644 --- a/src/sprite.cpp +++ b/src/sprite.cpp @@ -1,6 +1,7 @@ #include "sprite.h" #include -Sprite::Sprite(std::string_view filename, Renderer& renderer) { +Sprite::Sprite(std::string_view filename, Renderer& renderer, int width, int height) { textureId_ = renderer.loadImageFromFile(filename); + size_ = { width*4, height*4 }; } \ No newline at end of file diff --git a/src/sprite.h b/src/sprite.h index c45e208..1f917d9 100644 --- a/src/sprite.h +++ b/src/sprite.h @@ -8,7 +8,7 @@ class Sprite { public: - Sprite(std::string_view filename, Renderer& renderer); + Sprite(std::string_view filename, Renderer& renderer, int width, int height); int getTextureId() const { return textureId_; @@ -26,7 +26,7 @@ private: int textureId_; vec2i loc_ { 0, 0 }; - vec2i size_ { 17*4, 27 * 4 }; + vec2i size_; }; #endif /* end of include guard: SPRITE_H_70503825 */ -- cgit 1.4.1