void Door::speakAction(Map * m, Player * p) { if(c_IsOpen) { c_Sprite.setTextureRect(sf::IntRect(512, 1536, 512, 512)); c_IsOpen = false; setWalkable(false); m->getCell(c_Position.x, c_Position.y)->stateTest(); std::cout << "Vous fermez la porte.\n"; } else { c_Sprite.setTextureRect(sf::IntRect(0, 1536, 512, 512)); c_IsOpen = true; setWalkable(true); m->getCell(c_Position.x, c_Position.y)->stateTest(); std::cout << "Vous ouvrez la porte.\n"; } }
void Archer::Move(sf::Vector2f pos) { if (numMovesRemaining > 0) { auto test = MapManager::GetInstance()->GetTileAtPosition(sf::Vector2f(pos.x + 1, pos.y + 1))->GetPosition(); auto test2 = std::sqrt((test.x - (sprite.getPosition().x - SPRITE_WIDTH)) * (test.x - (sprite.getPosition().x - SPRITE_WIDTH)) + (test.y - sprite.getPosition().y) * (test.y - sprite.getPosition().y)); if (test2 <= 112) {//if distance to point is less than 1 move check if it is an attack command auto temp = MapManager::GetInstance()->CheckForEnemyAtPosition(owningPlayer, sf::Vector2f(pos.x + SPRITE_WIDTH, pos.y)); if (temp) { switch (temp->getType()) { case UNITTYPES::SWORDSMAN: Fight(static_cast<Swordsman*>(temp)); break; case UNITTYPES::PIKEMAN: Fight(static_cast<Pikeman*>(temp)); break; case UNITTYPES::ARCHER: Fight(static_cast<Archer*>(temp)); break; case UNITTYPES::KNIGHT: Fight(static_cast<Knight*>(temp)); break; default: break; } numMovesRemaining = 0; return; } } auto Path = PathFinder::GetInstance()->FindPath(sprite.getPosition(), pos); if (Path == NULL) { std::cout << pos.x << "," << pos.y << std::endl; return; } auto temp = sprite.getPosition(); int directionX = Path->at(1).x - (sprite.getPosition().x - SPRITE_WIDTH); int directionY = Path->at(1).y - sprite.getPosition().y; if (directionX > 56 || directionX < -56) { int tempX = 1; if (directionX < 0) { tempX = -1; } if (directionX != 0) { directionX /= directionX; } directionX *= (56 * tempX); } if (directionY > 56 || directionY < -56) { int tempY = 1; if (directionY < 0) { tempY = -1; } if (directionY != 0) { directionY /= directionY; } directionY *= (56 * tempY); } auto oldNodePos = PathFinder::GetInstance()->GetNodeAtPosition(sprite.getPosition()); auto newNodePos = PathFinder::GetInstance()->GetNodeAtPosition(sf::Vector2f(sprite.getPosition().x + directionX, sprite.getPosition().y + directionY)); sprite.setPosition(sf::Vector2f(newNodePos->GetPosition().x + SPRITE_WIDTH, newNodePos->GetPosition().y)); strengthText.setPosition(sprite.getPosition().x + 14, sprite.getPosition().y + 40); oldNodePos->setWalkable(true); newNodePos->setWalkable(false); numMovesRemaining--; } }