#include "party.h" #include "consts.h" void Party::addMember(Game& game, int spriteId) { int index = members_.size(); PartyMember newMember; newMember.spriteId = spriteId; if (index > 0) { const Sprite& sprite = game.getSprite(spriteId); for (int i = 0; i < PARTY_FRAME_DELAY * index; i++) { newMember.nextPosition.push_back(sprite.loc()); newMember.nextDirection.push_back(sprite.getDirection()); } } members_.push_back(std::move(newMember)); game.setSpriteState(spriteId, "still"); } void Party::move(Game& game, const Input& keystate) { if (members_.empty()) { return; } const Sprite& p1 = game.getSprite(members_[0].spriteId); vec2i pLoc = p1.loc(); Direction dir = Direction::left; if (keystate.up) { pLoc.y() -= MOVEMENT_SPEED; dir = Direction::up; } else if (keystate.down) { pLoc.y() += MOVEMENT_SPEED; dir = Direction::down; } if (keystate.left) { pLoc.x() -= MOVEMENT_SPEED; if (dir == Direction::up) { dir = Direction::up_left; } else if (dir == Direction::down) { dir = Direction::down_left; } else { dir = Direction::left; } } else if (keystate.right) { pLoc.x() += MOVEMENT_SPEED; if (dir == Direction::up) { dir = Direction::up_right; } else if (dir == Direction::down) { dir = Direction::down_right; } else { dir = Direction::right; } } if (keystate.up || keystate.down || keystate.left || keystate.right) { for (int i = 0; i < members_.size(); i++) { game.setSpriteState(members_[i].spriteId, "walk"); } game.moveSprite(members_[0].spriteId, pLoc); game.setSpriteDirection(members_[0].spriteId, dir); for (int i = 1; i < members_.size(); i++) { const Sprite& pNext = game.getSprite(members_[i].spriteId); members_[i].nextPosition.push_back(pLoc); game.moveSprite(members_[i].spriteId, members_[i].nextPosition.front()); members_[i].nextPosition.pop_front(); members_[i].nextDirection.push_back(dir); game.setSpriteDirection(members_[i].spriteId, members_[i].nextDirection.front()); members_[i].nextDirection.pop_front(); } } else { for (int i = 0; i < members_.size(); i++) { game.setSpriteState(members_[i].spriteId, "still"); } } }