示例#1
0
void Missile::setPath(const Position& fromPosition, const Position& toPosition)
{
    Otc::Direction direction = fromPosition.getDirectionFromPosition(toPosition);

    if(direction == Otc::NorthWest) {
        m_xPattern = 0;
        m_yPattern = 0;
    }
    else if(direction == Otc::North) {
        m_xPattern = 1;
        m_yPattern = 0;
    }
    else if(direction == Otc::NorthEast) {
        m_xPattern = 2;
        m_yPattern = 0;
    }
    else if(direction == Otc::East) {
        m_xPattern = 2;
        m_yPattern = 1;
    }
    else if(direction == Otc::SouthEast) {
        m_xPattern = 2;
        m_yPattern = 2;
    }
    else if(direction == Otc::South) {
        m_xPattern = 1;
        m_yPattern = 2;
    }
    else if(direction == Otc::SouthWest) {
        m_xPattern = 0;
        m_yPattern = 2;
    }
    else if(direction == Otc::West) {
        m_xPattern = 0;
        m_yPattern = 1;
    }
    else {
        m_xPattern = 1;
        m_yPattern = 1;
    }

    m_pos = fromPosition;
    m_posDelta = toPosition - fromPosition;
    m_startTicks = g_clock.ticks();
    m_duration = 150 * std::sqrt(Point(m_posDelta.x, m_posDelta.y).length());
    m_posDelta.x *= Map::NUM_TILE_PIXELS;
    m_posDelta.y *= Map::NUM_TILE_PIXELS;

    // schedule removal
    auto self = asMissile();
    g_dispatcher.scheduleEvent([self]() {
        g_map.removeThing(self);
    }, m_duration);
}
示例#2
0
void Missile::setPath(const Position& fromPosition, const Position& toPosition)
{
    m_direction = fromPosition.getDirectionFromPosition(toPosition);

    m_position = fromPosition;
    m_delta = Point(toPosition.x - fromPosition.x, toPosition.y - fromPosition.y);
    m_duration = 150 * std::sqrt(m_delta.length());
    m_delta *= Otc::TILE_PIXELS;
    m_animationTimer.restart();

    // schedule removal
    auto self = asMissile();
    g_dispatcher.scheduleEvent([self]() { g_map.removeThing(self); }, m_duration);
}