void OsuUIButton::draw(Graphics *g) { if (!m_bVisible) return; Image *buttonLeft = m_bDefaultSkin ? m_osu->getSkin()->getDefaultButtonLeft() : m_osu->getSkin()->getButtonLeft(); Image *buttonMiddle = m_bDefaultSkin ? m_osu->getSkin()->getDefaultButtonMiddle() : m_osu->getSkin()->getButtonMiddle(); Image *buttonRight = m_bDefaultSkin ? m_osu->getSkin()->getDefaultButtonRight() : m_osu->getSkin()->getButtonRight(); float leftScale = m_osu->getImageScaleToFitResolution(buttonLeft, m_vSize); float leftWidth = buttonLeft->getWidth()*leftScale; float rightScale = m_osu->getImageScaleToFitResolution(buttonRight, m_vSize); float rightWidth = buttonRight->getWidth()*rightScale; float middleWidth = m_vSize.x - leftWidth - rightWidth; char red = std::max((unsigned int)(COLOR_GET_Ri(m_color)*m_fBrightness), (unsigned int)(m_fAnim*255.0f)); char green = std::max((unsigned int)(COLOR_GET_Gi(m_color)*m_fBrightness), (unsigned int)(m_fAnim*255.0f)); char blue = std::max((unsigned int)(COLOR_GET_Bi(m_color)*m_fBrightness), (unsigned int)(m_fAnim*255.0f)); g->setColor(COLOR(255, red, green, blue)); buttonLeft->bind(); g->drawQuad((int)m_vPos.x, (int)m_vPos.y, (int)leftWidth, (int)m_vSize.y); buttonLeft->unbind(); buttonMiddle->bind(); g->drawQuad((int)m_vPos.x + (int)leftWidth, (int)m_vPos.y, (int)middleWidth, (int)m_vSize.y); buttonMiddle->unbind(); buttonRight->bind(); g->drawQuad((int)m_vPos.x + (int)leftWidth + (int)middleWidth, (int)m_vPos.y, (int)rightWidth, (int)m_vSize.y); buttonRight->unbind(); drawText(g); }
void OsuCircle::drawCircle(Graphics *g, OsuSkin *skin, Vector2 pos, float hitcircleDiameter, float numberScale, float overlapScale, int number, int colorCounter, int colorOffset, float approachScale, float alpha, float numberAlpha, bool drawNumber, bool overrideHDApproachCircle) { if (alpha <= 0.0f || !osu_draw_circles.getBool()) return; rainbowNumber = number; rainbowColorCounter = colorCounter; Color comboColor = skin->getComboColorForCounter(colorCounter, colorOffset); comboColor = COLOR(255, (int)(COLOR_GET_Ri(comboColor)*osu_circle_color_saturation.getFloat()), (int)(COLOR_GET_Gi(comboColor)*osu_circle_color_saturation.getFloat()), (int)(COLOR_GET_Bi(comboColor)*osu_circle_color_saturation.getFloat())); // approach circle ///drawApproachCircle(g, skin, pos, comboColor, hitcircleDiameter, approachScale, alpha, modHD, overrideHDApproachCircle); // they are now drawn separately in draw2() // circle const float circleImageScale = hitcircleDiameter / (128.0f * (skin->isHitCircle2x() ? 2.0f : 1.0f)); comboColor = skin->getComboColorForCounter(colorCounter, colorOffset); drawHitCircle(g, skin->getHitCircle(), pos, comboColor, circleImageScale, alpha); // overlay const float circleOverlayImageScale = hitcircleDiameter / skin->getHitCircleOverlay2()->getSizeBaseRaw().x; if (!skin->getHitCircleOverlayAboveNumber()) drawHitCircleOverlay(g, skin->getHitCircleOverlay2(), pos, circleOverlayImageScale, alpha); // number if (drawNumber) drawHitCircleNumber(g, skin, numberScale, overlapScale, pos, number, numberAlpha); // overlay if (skin->getHitCircleOverlayAboveNumber()) drawHitCircleOverlay(g, skin->getHitCircleOverlay2(), pos, circleOverlayImageScale, alpha); }
void OsuCircle::drawApproachCircle(Graphics *g, OsuBeatmapStandard *beatmap, Vector2 rawPos, int number, int colorCounter, int colorOffset, float approachScale, float alpha, bool overrideHDApproachCircle) { rainbowNumber = number; rainbowColorCounter = colorCounter; Color comboColor = beatmap->getSkin()->getComboColorForCounter(colorCounter, colorOffset); comboColor = COLOR(255, (int)(COLOR_GET_Ri(comboColor)*osu_circle_color_saturation.getFloat()), (int)(COLOR_GET_Gi(comboColor)*osu_circle_color_saturation.getFloat()), (int)(COLOR_GET_Bi(comboColor)*osu_circle_color_saturation.getFloat())); drawApproachCircle(g, beatmap->getSkin(), beatmap->osuCoords2Pixels(rawPos), comboColor, beatmap->getHitcircleDiameter(), approachScale, alpha, beatmap->getOsu()->getModHD(), overrideHDApproachCircle); }