コード例 #1
0
ファイル: mapview.cpp プロジェクト: Riverlance/otclient
void MapView::setDrawMinimapColors(bool enable)
{
    if(m_drawMinimapColors == enable)
        return;
    m_drawMinimapColors = enable;
    updateGeometry(m_visibleDimension, m_optimizedSize);
    requestVisibleTilesCacheUpdate();
    m_smooth = !enable;
    m_framebuffer->setSmooth(m_smooth);
}
コード例 #2
0
ファイル: mapview.cpp プロジェクト: Xenioz/otclient
void MapView::move(int x, int y)
{
    m_moveOffset.x += x;
    m_moveOffset.y += y;

    int32_t tmp = m_moveOffset.x / 32;
    bool requestTilesUpdate = false;
    if(tmp != 0) {
        m_customCameraPosition.x += tmp;
        m_moveOffset.x %= 32;
        requestTilesUpdate = true;
    }

    tmp = m_moveOffset.y / 32;
    if(tmp != 0) {
        m_customCameraPosition.y += tmp;
        m_moveOffset.y %= 32;
        requestTilesUpdate = true;
    }

    if(requestTilesUpdate)
        requestVisibleTilesCacheUpdate();
}
コード例 #3
0
ファイル: mapview.cpp プロジェクト: Riverlance/otclient
void MapView::setCameraPosition(const Position& pos)
{
    m_follow = false;
    m_customCameraPosition = pos;
    requestVisibleTilesCacheUpdate();
}
コード例 #4
0
ファイル: mapview.cpp プロジェクト: Riverlance/otclient
void MapView::followCreature(const CreaturePtr& creature)
{
    m_follow = true;
    m_followingCreature = creature;
    requestVisibleTilesCacheUpdate();
}
コード例 #5
0
ファイル: mapview.cpp プロジェクト: Riverlance/otclient
void MapView::setViewMode(MapView::ViewMode viewMode)
{
    m_viewMode = viewMode;
    requestVisibleTilesCacheUpdate();
}
コード例 #6
0
ファイル: mapview.cpp プロジェクト: Riverlance/otclient
void MapView::unlockFirstVisibleFloor()
{
    m_lockedFirstVisibleFloor = -1;
    requestVisibleTilesCacheUpdate();
}
コード例 #7
0
ファイル: mapview.cpp プロジェクト: Riverlance/otclient
void MapView::lockFirstVisibleFloor(int firstVisibleFloor)
{
    m_lockedFirstVisibleFloor = firstVisibleFloor;
    requestVisibleTilesCacheUpdate();
}
コード例 #8
0
ファイル: mapview.cpp プロジェクト: Riverlance/otclient
void MapView::onMapCenterChange(const Position& pos)
{
    requestVisibleTilesCacheUpdate();
}
コード例 #9
0
ファイル: mapview.cpp プロジェクト: Riverlance/otclient
void MapView::onTileUpdate(const Position& pos)
{
    if(!m_drawMinimapColors)
        requestVisibleTilesCacheUpdate();
}
コード例 #10
0
ファイル: mapview.cpp プロジェクト: Riverlance/otclient
void MapView::updateGeometry(const Size& visibleDimension, const Size& optimizedSize)
{
    int tileSize = 0;
    Size bufferSize;

    if(!m_drawMinimapColors) {
        int possiblesTileSizes[] = {1,2,4,8,16,32};
        for(int candidateTileSize : possiblesTileSizes) {
            bufferSize = (visibleDimension + Size(3,3)) * candidateTileSize;
            if(bufferSize.width() > g_graphics.getMaxTextureSize() || bufferSize.height() > g_graphics.getMaxTextureSize())
                break;

            tileSize = candidateTileSize;
            if(optimizedSize.width() < bufferSize.width() - 3*candidateTileSize && optimizedSize.height() < bufferSize.height() - 3*candidateTileSize)
                break;
        }

        if(tileSize == 0) {
            g_logger.traceError("reached max zoom out");
            return;
        }
    } else {
        tileSize = 1;
        bufferSize = visibleDimension + Size(3,3);
    }

    Size drawDimension = visibleDimension + Size(3,3);
    Point virtualCenterOffset = (drawDimension/2 - Size(1,1)).toPoint();
    Point visibleCenterOffset = virtualCenterOffset;

    ViewMode viewMode = m_viewMode;
    if(m_autoViewMode) {
        if(tileSize >= 32 && visibleDimension.area() <= NEAR_VIEW_AREA)
            viewMode = NEAR_VIEW;
        else if(tileSize >= 16 && visibleDimension.area() <= MID_VIEW_AREA)
            viewMode = MID_VIEW;
        else if(tileSize >= 8 && visibleDimension.area() <= FAR_VIEW_AREA)
            viewMode = FAR_VIEW;
        else
            viewMode = HUGE_VIEW;

        if(viewMode >= FAR_VIEW)
            m_multifloor = false;
        else
            m_multifloor = true;
    }

    // draw actually more than what is needed to avoid massive recalculations on huge views
        /*
    if(viewMode >= HUGE_VIEW) {
        Size oldDimension = drawDimension;
        drawDimension = (m_framebuffer->getSize() / tileSize);
        virtualCenterOffset += (drawDimension - oldDimension).toPoint() / 2;
    }
    */


    m_viewMode = viewMode;
    m_visibleDimension = visibleDimension;
    m_drawDimension = drawDimension;
    m_tileSize = tileSize;
    m_virtualCenterOffset = virtualCenterOffset;
    m_visibleCenterOffset = visibleCenterOffset;
    m_optimizedSize = optimizedSize;
    m_framebuffer->resize(bufferSize);

    requestVisibleTilesCacheUpdate();
}
コード例 #11
0
ファイル: mapview.cpp プロジェクト: EvilSmock/otclient
void MapView::onTileUpdate(const Position& pos)
{
    requestVisibleTilesCacheUpdate();
}