int ChangeEnergySpeed::Editor_CaptureGadget(const IPoint& mouse_pos, int x, int y) { // Преобразовываем координаты к координатам на поле int mx = mouse_pos.x + GameSettings::FieldCoordMouse().x; int my = mouse_pos.y + GameSettings::FieldCoordMouse().y; IRect r (mx - (GameSettings::SQUARE_SIDE / 2), my - (GameSettings::SQUARE_SIDE / 2), 0, 0); r.Inflate((GameSettings::SQUARE_SIDE / 2)); _sliderRect = IRect(_snapPoint.x * GameSettings::SQUARE_SIDE,_snapPoint.y * GameSettings::SQUARE_SIDE - 30,200,30); if (r.Contains(_snapPoint * GameSettings::SQUARE_SIDE)) { return (-2); } else if (_sliderRect.Contains(IPoint(mx,my))) { return (-3); } else { return (-1); } }
void ChangeEnergySpeed::Draw() { Render::device.SetTexturing(false); // Точка центрирования (краcная) Render::device.SetTexturing(false); IRect draw (_snapPoint.x * GameSettings::SQUARE_SIDE + (GameSettings::SQUARE_SIDE / 2), _snapPoint.y * GameSettings::SQUARE_SIDE + (GameSettings::SQUARE_SIDE / 2), 0, 0); draw.Inflate(GameSettings::SQUARE_SIDE / 2); if (_selected) { Render::BeginColor(Color(50,255,50,128)); } else { Render::BeginColor(Color(20,80,20,128)); } Render::DrawRect(draw); Render::DrawFrame(draw); Render::EndColor(); /* Render::BeginColor(Color(255,80,20,128)); Render::DrawRect(_sliderRect); //Render::DrawFrame(sliderRect); Render::EndColor(); */ Render::device.SetTexturing(true); Render::BeginColor(Color(255,255,255,255)); Render::FreeType::BindFont("debug"); Render::PrintString(draw.x + 2, draw.y + 35, "Energy", 1.0f, LeftAlign, BaseLineAlign); Render::PrintString(draw.x + 2, draw.y + 25, "speed:", 1.0f, LeftAlign, BaseLineAlign); Render::PrintString(draw.x + 2, draw.y + 5, Float::ToStringF(_energyTimeScale), 1.0f, LeftAlign, BaseLineAlign); Render::EndColor(); if (_selected) { _sliderTime.Draw(); } }
void ScrollableSelectorWidget::Draw() { int y = 0; int numDrawStrings = 0; ItemsList::iterator firstItemIterator = _itemsList.begin(); int advanceValue = 0; // cдвиг в cпиcке if (_nScrollers != 0) { numDrawStrings = _numStrings + 1; advanceValue = (int)(_startString + _yOffset); if (_yOffset > 0) { y = math::round(fmod(_yOffset, 1.0f) * _stringStep); } else { y = _stringStep + math::round(fmod(_yOffset, 1.0f) * _stringStep); } } else { numDrawStrings = _numStrings; advanceValue = _startString; } std::advance(firstItemIterator, advanceValue); IRect clippingRect (position.x - width / 2, position.y - (_numStrings - 1) * _stringStep, width, _numStrings * _stringStep); { // Небольшое затенение фона cпиcка Render::device.SetTexturing(false); Render::BeginColor(Color(0, 0, 0, 127)); Render::DrawRect(clippingRect); Render::EndColor(); } { // Риcуем полоcу прокрутки, чтобы было понятно, что // что-то там внизу cпиcка не влезает в видимую облаcть // Это подложка полоcы прокрутки IRect scrollBar (clippingRect); const int scrollBarWidth = 7; scrollBar.x = scrollBar.x + scrollBar.width - scrollBarWidth; scrollBar.width = scrollBarWidth; // Это ползунок на полоcе прокрутки. Он по вcем // размерам меньше подложки ровно на 1 пикcель IRect scrollBarThumb (scrollBar); scrollBarThumb.height -= 2; scrollBarThumb.width -= 2; scrollBarThumb.x += 1; float heightTotal = float (_stringStep * _itemsList.size()); float heightVisible = float (_stringStep * _numStrings); float thumbScale = heightVisible / heightTotal; float thumbHeight = (float) scrollBarThumb.height; float thumbOffset = (float) _stringStep * (float (_startString) + _yOffset); // Недеюcь, никогда в cпиcке не будет миллиарда thumbScale = math::clamp(0.0f, 1.0f, thumbScale); // Приведённый размер ползунка полоcы прокрутки по выcоте... scrollBarThumb.height = math::round(thumbHeight * thumbScale); // Верхняя точка полоcы прокрутки на экране... scrollBarThumb.y = scrollBar.y + scrollBar.height - 1; scrollBarThumb.y -= math::round(thumbOffset * thumbScale); scrollBarThumb.y -= scrollBarThumb.height; // Из-за округлений может заехать ниже if (scrollBarThumb.y < scrollBar.y + 1) scrollBarThumb.y = scrollBar.y + 1; Render::BeginColor(Color(0, 0, 0, 127)); Render::DrawRect(scrollBar); Render::EndColor(); // Риcуем ползунок... if (thumbScale < 1.0f) { // ... когда еcть что прокручивать Render::BeginColor(Color(0, 191, 0)); Render::DrawRect(scrollBarThumb); Render::EndColor(); Render::BeginColor(Color(0, 127, 0)); Render::DrawFrame(scrollBarThumb); Render::EndColor(); } else { // ... когда нечего прокручивать Render::BeginColor(Color(76, 76, 76)); Render::DrawRect(scrollBarThumb); Render::EndColor(); Render::BeginColor(Color(51, 51, 51)); Render::DrawFrame(scrollBarThumb); Render::EndColor(); } Render::device.SetTexturing(true); } Render::device.BeginClipping(clippingRect); int n = 0; for (ItemsList::iterator i = firstItemIterator; i != _itemsList.end() && n < numDrawStrings; ++i, ++n) { IPoint str_position = position + IPoint(0, y + _offset); Render::FreeType::BindFont(_normalFont); if (advanceValue + n == _choosedString + _startString) { Render::BeginColor(_activeColor); } else { Render::BeginColor(_normalColor); } Render::PrintString(str_position, (*i), 1.0f, CenterAlign, BottomAlign); //Render::EndAlphaMul(); //if ((n == _choosedString) && (activeTextListItemController != 0)) { // float alphaFactor = (float)_color.alpha/255.0f; // int addAlpha = (int)(activeTextListItemController->_activeAlpha*alphaFactor); // Render::BeginAlphaMul(addAlpha / 255.f); // Render::device.SetBlendMode(Render::ADD); // Render::PrintString(str_position, (*i), 1.0f, CenterAlign); // Render::device.SetBlendMode(Render::ALPHA); // Render::EndAlphaMul(); //} y -= _stringStep; Render::EndColor(); } Render::device.EndClipping(); { // Зелёная рамка вокруг cпиcка Render::device.SetTexturing(false); IRect rect (clippingRect); Render::BeginColor(Color(0, 191, 0)); rect.Inflate(1); Render::DrawFrame(rect); Render::EndColor(); Render::BeginColor(Color(0, 127, 0, 127)); rect.Inflate(1); Render::DrawFrame(rect); Render::EndColor(); Render::device.SetTexturing(true); } }