Пример #1
0
void UIBox::resize(int width, int height) {
    //Renderable *renderable;
    float ratio = (width / (float)height);

    int bWidth  = (int)(_uiBorder * width),
        bHeight = (int)(_uiBorder * height * ratio);

    UIElement::resize(width, height);

    clearRenderables();

    // Add the center box
    Vec2f boxPosition(0, 0);
    Vec2f boxDimensions((float)_dimensions.x, (float)_dimensions.y);
    if(_uiBorder > 0) {
        // Subtract space for the border if there is a border that protrudes inwards
        boxPosition += Vec2f((float)bWidth, (float)bHeight);
        boxDimensions -= Vec2f(bWidth * 2.0f, bHeight * 2.0f);
    }
    addRenderable(Renderable::OrthoBox(boxPosition, boxDimensions, false, false, _material));

    if(_uiBorder != 0) {
        int bXOffset = 0, bYOffset = 0;
        if(_uiBorder < 0) {
            bXOffset = bWidth;
            bYOffset = bHeight;
        }
        
        // Top border
        addRenderable(Renderable::OrthoBox(Vec2f((float)bWidth, (float)_dimensions.h), Vec2f((float)(_dimensions.w - (bWidth * 2)), (float)-bHeight), false, false, _borderMaterial));

        // Bottom border
        addRenderable(Renderable::OrthoBox(Vec2f((float)bWidth, 0.0f), Vec2f((float)(_dimensions.w - (bWidth * 2)), (float)bHeight), false, false, _borderMaterial));
        
        // Left border
        addRenderable(Renderable::OrthoBox(Vec2f((float)bWidth, 0.0f), Vec2f((float)-bWidth, (float)_dimensions.y), false, false, _borderMaterial));

        // Right border
        addRenderable(Renderable::OrthoBox(Vec2f((float)_dimensions.w, 0.0f), Vec2f((float)-bWidth, (float)_dimensions.y), false, false, _borderMaterial));
    }
}
Пример #2
0
void MapBlockCornerNode::updateCorner() {
    clearRenderables();
    vn::c8 path[256];
    sprintf(path, "1002:/map.imgs|corner_%u_%u.png", m_corner->type.type , m_corner->type.value & 0xF);
    vn::PicturePtr pic = vn::PictureManager::instance().createPicture(path);
    Quad *quad = vnnew Quad();
    addRenderable(quad, false);
    
    if (m_corner->type.type == 4) {
        *quad << pic.ptr();
        switch (m_corner->type.value & 0xF) {
            // 1 1
            // 0 0
            case 3:
                setLocalBoundingBox(vn::aabox2f(-20, 0, 20, 20));
                break;
                
            // 0 1
            // 0 1
            case 6:
                setLocalBoundingBox(vn::aabox2f(-20, -20, 0, 20));
                break;
                
            // 0 0
            // 1 1
            case 12:
                
                setLocalBoundingBox(vn::aabox2f(-20, -20, 20, 0));
                break;
                
            // 1 0
            // 1 0
            case 9:
                setLocalBoundingBox(vn::aabox2f(0, -20, 20, 20));
                break;
                
            // 0 0
            // 0 1
            case 4:
                setLocalBoundingBox(vn::aabox2f(-20, -20, 20, 20));
                break;
                
            // 1 0
            // 0 0
            case 1:
                setLocalBoundingBox(vn::aabox2f(-20, -20, 20, 20));
                break;
                
            // 0 1
            // 0 0
            case 2:
                setLocalBoundingBox(vn::aabox2f(-20, -20, 20, 20));
                break;
                
            // 0 0
            // 1 0
            case 8:
                setLocalBoundingBox(vn::aabox2f(-20, -20, 20, 20));
                break;
                
            // 0 1
            // 1 1
            case 14:
                setLocalBoundingBox(vn::aabox2f(-20, -20, 0, 0));
                break;
                
            // 1 0
            // 1 1
            case 13:
                setLocalBoundingBox(vn::aabox2f(0, -20, 20, 0));
                break;
                
            // 1 1
            // 1 0
            case 11:
                setLocalBoundingBox(vn::aabox2f(0, 0, 20, 20));
                break;
                
            // 1 1
            // 0 1
            case 7:
                setLocalBoundingBox(vn::aabox2f(-20, 0, 0, 20));
                break;
                
        }
        *quad << getLocalBoundingBox();
        return ;
    }
    
    
    setLocalBoundingBox(vn::aabox2f(-20, -20, 20, 20));
    *quad << getLocalBoundingBox();
    if (!pic.null()) {
        if (pic->size > vn::vector2f(40, 40)) {
            vn::aabox2f rect(pic->texcoords[0], pic->texcoords[2]);
            vn::vector2f size = rect.size() / 3;
            int x = m_corner->position.x % 3;
            int y = m_corner->position.y % 3;
            rect.min_corner.x += x * size.x;
            rect.min_corner.y += y * size.y;
            rect.max_corner = rect.min_corner + size;
            pic->buildTexcoord(rect);
        }
        *quad << pic.ptr();
    }
}