void Label::draw() { Render* render = Render::getInstance(); Neo2DEngine* gui = Neo2DEngine::getInstance(); if (m_labelText == NULL) { m_labelText = render->createText(m_font.getSafeString(), m_fontSize); m_labelText->setAlign(m_alignment); } m_labelText->setText(m_label.c_str()); render->drawText(m_labelText, m_x + 0.5 * (float) m_width, m_y + 0.5 * m_labelText->getSize() + 0.5 * (float) m_height); }
int Game::run() { using namespace std::placeholders; if ( m_glfw == false ) { std::cerr << "Can't initialize GLFW" << std::endl; return 1; } try { Timer timer; Render render; Font font( m_config.fontSize ); Window window( m_config.windowWidth, m_config.windowHeight ); window.setClickHandler( std::bind( & Game::onWindowClick, this, _1, _2, _3 ) ); resetTarget(); for ( short frame = 0; window.shouldClose() == false; ++ frame ) { //! Двигаем цель m_target->move(); //! Проверяем выход за видимые границы if ( m_target->inBounds() == false ) { resetTarget(); } //! Проверяем переполнении счетчика кадров if ( frame < 0 ) { frame = 0; timer.reset(); } //! Определяем размер области для рисования auto size = std::make_pair( 0, 0 ); window.readViewportSize( size.first, size.second ); //! FPS = frame * 10^6 / microseconds const auto score = std::to_string( m_score ); const auto fps = std::to_string( int ( 1000000.0 * frame / timer.getDuration() ) ); //! Рисуем игровые объекты render.begin( size.first, size.second ); render.useColor( m_target->getColor().red, m_target->getColor().green, m_target->getColor().blue ); render.drawDisk( m_target->getX(), m_target->getY(), m_target->getRadius(), m_config.diskQuality ); render.useColor( 1.0, 1.0, 1.0 ); render.drawText( -0.9, -0.9, font, score ); render.drawText( 0.9 - fps.length() * font.getSize(), -0.9, font, fps ); render.end(); //! Обновляем окно window.update(); } } catch ( std::exception & exception ) { std::cerr << exception.what() << std::endl; return 1; } return 0; }