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)); } }
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(); } }