コード例 #1
0
ファイル: Obstacle.cpp プロジェクト: LightningAmal/MEUPORG
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";
    }
}
コード例 #2
0
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--;
    }
}