void ImagerySection::removeTextComponent(const TextComponent& text) { for(TextList::iterator t = d_texts.begin(); t < d_texts.end(); ++t) if(t->getText() == text.getText() && t->getFont() == text.getFont()) d_texts.erase(t); }
void SystemView::populate() { mEntries.clear(); for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { const std::shared_ptr<ThemeData>& theme = (*it)->getTheme(); Entry e; e.name = (*it)->getName(); e.object = *it; // make logo if(theme->getElement("system", "logo", "image")) { ImageComponent* logo = new ImageComponent(mWindow); logo->setMaxSize(Eigen::Vector2f(logoSize().x(), logoSize().y())); logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, (logoSize().y() - logo->getSize().y()) / 2); // center e.data.logo = std::shared_ptr<GuiComponent>(logo); ImageComponent* logoSelected = new ImageComponent(mWindow); logoSelected->setMaxSize(Eigen::Vector2f(logoSize().x() * SELECTED_SCALE, logoSize().y() * SELECTED_SCALE * 0.70f)); logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logoSelected->setPosition((logoSize().x() - logoSelected->getSize().x()) / 2, (logoSize().y() - logoSelected->getSize().y()) / 2); // center e.data.logoSelected = std::shared_ptr<GuiComponent>(logoSelected); }else{ // no logo in theme; use text TextComponent* text = new TextComponent(mWindow, (*it)->getName(), Font::get(FONT_SIZE_LARGE), 0x000000FF, ALIGN_CENTER); text->setSize(logoSize()); e.data.logo = std::shared_ptr<GuiComponent>(text); TextComponent* textSelected = new TextComponent(mWindow, (*it)->getName(), Font::get((int)(FONT_SIZE_LARGE * SELECTED_SCALE)), 0x000000FF, ALIGN_CENTER); textSelected->setSize(logoSize()); e.data.logoSelected = std::shared_ptr<GuiComponent>(textSelected); } // make background extras e.data.backgroundExtras = std::shared_ptr<ThemeExtras>(new ThemeExtras(mWindow)); e.data.backgroundExtras->setExtras(ThemeData::makeExtras((*it)->getTheme(), "system", mWindow)); this->add(e); } }
GuiSettingsMenu::GuiSettingsMenu(Window* window) : GuiComponent(window), mList(window, Eigen::Vector2i(2, 3)), mDrawFramerateSwitch(window), mVolumeSlider(window, 0, 100, 1), mSaveLabel(window) { loadStates(); addChild(&mList); mList.setPosition(Renderer::getScreenWidth() / 4.0f, 0); using namespace Eigen; TextComponent* label = new TextComponent(mWindow); label->setText("Draw Framerate: "); label->setColor(0x0000FFFF); mList.setEntry(Vector2i(0, 0), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight, Matrix<bool, 1, 2>(true, true)); mLabels.push_back(label); //drawFramerate switch mList.setEntry(Vector2i(1, 0), Vector2i(1, 1), &mDrawFramerateSwitch, true, ComponentListComponent::AlignCenter, Matrix<bool, 1, 2>(true, true)); label = new TextComponent(mWindow); label->setText("System volume: "); label->setColor(0x0000FFFF); mList.setEntry(Vector2i(0, 1), Vector2i(1, 1), label, false, ComponentListComponent::AlignRight, Matrix<bool, 1, 2>(true, true)); //volume slider mList.setEntry(Vector2i(1, 1), Vector2i(1, 1), &mVolumeSlider, true, ComponentListComponent::AlignCenter, Matrix<bool, 1, 2>(true, true)); //save label mSaveLabel.setText("SAVE"); mSaveLabel.setColor(0x000000FF); mList.setEntry(Vector2i(0, 2), Vector2i(2, 1), &mSaveLabel, true, ComponentListComponent::AlignCenter, Matrix<bool, 1, 2>(false, true)); mList.setPosition(Renderer::getScreenWidth() / 2 - mList.getSize().x() / 2, 0); }
ActorComponent::ptr ActorFactory::createTextComponent() { TextComponent* comp = new TextComponent; comp->setId(++m_LastTextComponentId); return ActorComponent::ptr(comp); }
void renderLayerObject(GameObject* gameObject, Layer* layer) { #if 1 { std::vector<AnimatedSpriteComponent*> animatedSpriteComponents = gameObject->getComponents<AnimatedSpriteComponent>(); for (size_t i = 0; i < animatedSpriteComponents.size(); ++i) { Renderer_renderAnimatedSprite(animatedSpriteComponents[i], layer); } } { std::vector<SpriteSheetComponent*> spriteSheetComponents = gameObject->getComponents<SpriteSheetComponent>(); for (size_t i = 0; i < spriteSheetComponents.size(); ++i) { Renderer_renderSpriteSheet(spriteSheetComponents[i], layer); } } { std::vector<SpriteComponent*> spriteComponents = gameObject->getComponents<SpriteComponent>(); for (size_t i = 0; i < spriteComponents.size(); ++i) { Renderer_renderSprite(spriteComponents[i], layer); } } { std::vector<TileComponent*> tileComponents = gameObject->getComponents<TileComponent>(); for (size_t i = 0; i < tileComponents.size(); ++i) { Renderer_renderTile(tileComponents[i], layer); } } { std::vector < Text*> texts = gameObject->getComponents<Text>(); for (size_t i = 0; i < texts.size(); ++i) { Renderer_renderText(texts[i], layer); } } { std::vector < TextComponent*> texts = gameObject->getComponents<TextComponent>(); for (size_t i = 0; i < texts.size(); ++i) { Renderer_renderText(texts[i]->getText(), layer); } } #else { AnimatedSpriteComponent* go = dynamic_cast<AnimatedSpriteComponent*>(gameObject); if (go != 0) { Renderer_renderAnimatedSprite(go, layer); return; } } { SpriteSheetComponent* go = dynamic_cast<SpriteSheetComponent*>(gameObject); if (go != 0) { Renderer_renderSpriteSheet(go, layer); return; } } { SpriteComponent* go = dynamic_cast<SpriteComponent*>(gameObject); if (go != 0) { Renderer_renderSprite(go, layer); return; } } { TileComponent* go = dynamic_cast<TileComponent*>(gameObject); if (go != 0) { Renderer_renderTile(go, layer); return; } } { Text* go = dynamic_cast<Text*>(gameObject); if (go != 0) { Renderer_renderText(go, layer); return; } } { TextComponent* go = dynamic_cast<TextComponent*>(gameObject); if (go != 0) { Renderer_renderText(go->getText(), layer); return; } } #endif }
void SystemView::populate() { mEntries.clear(); for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) { const std::shared_ptr<ThemeData>& theme = (*it)->getTheme(); if(mViewNeedsReload) getViewElements(theme); if((*it)->isVisible()) { Entry e; e.name = (*it)->getName(); e.object = *it; // make logo const ThemeData::ThemeElement* logoElem = theme->getElement("system", "logo", "image"); if(logoElem) { std::string path = logoElem->get<std::string>("path"); std::string defaultPath = logoElem->has("default") ? logoElem->get<std::string>("default") : ""; if((!path.empty() && ResourceManager::getInstance()->fileExists(path)) || (!defaultPath.empty() && ResourceManager::getInstance()->fileExists(defaultPath))) { ImageComponent* logo = new ImageComponent(mWindow, false, false); logo->setMaxSize(mCarousel.logoSize * mCarousel.logoScale); logo->applyTheme(theme, "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); logo->setRotateByTargetSize(true); e.data.logo = std::shared_ptr<GuiComponent>(logo); } } if (!e.data.logo) { // no logo in theme; use text TextComponent* text = new TextComponent(mWindow, (*it)->getName(), Font::get(FONT_SIZE_LARGE), 0x000000FF, ALIGN_CENTER); text->setSize(mCarousel.logoSize * mCarousel.logoScale); text->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::FONT_SIZE | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE | ThemeFlags::LINE_SPACING | ThemeFlags::TEXT); e.data.logo = std::shared_ptr<GuiComponent>(text); if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) { text->setHorizontalAlignment(mCarousel.logoAlignment); text->setVerticalAlignment(ALIGN_CENTER); } else { text->setHorizontalAlignment(ALIGN_CENTER); text->setVerticalAlignment(mCarousel.logoAlignment); } } if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) { if (mCarousel.logoAlignment == ALIGN_LEFT) e.data.logo->setOrigin(0, 0.5); else if (mCarousel.logoAlignment == ALIGN_RIGHT) e.data.logo->setOrigin(1.0, 0.5); else e.data.logo->setOrigin(0.5, 0.5); } else { if (mCarousel.logoAlignment == ALIGN_TOP) e.data.logo->setOrigin(0.5, 0); else if (mCarousel.logoAlignment == ALIGN_BOTTOM) e.data.logo->setOrigin(0.5, 1); else e.data.logo->setOrigin(0.5, 0.5); } Vector2f denormalized = mCarousel.logoSize * e.data.logo->getOrigin(); e.data.logo->setPosition(denormalized.x(), denormalized.y(), 0.0); // delete any existing extras for (auto extra : e.data.backgroundExtras) delete extra; e.data.backgroundExtras.clear(); // make background extras e.data.backgroundExtras = ThemeData::makeExtras((*it)->getTheme(), "system", mWindow); // sort the extras by z-index std::stable_sort(e.data.backgroundExtras.begin(), e.data.backgroundExtras.end(), [](GuiComponent* a, GuiComponent* b) { return b->getZIndex() > a->getZIndex(); }); this->add(e); } } if (mEntries.size() == 0) { // Something is wrong, there is not a single system to show, check if UI mode is not full if (!UIModeController::getInstance()->isUIModeFull()) { Settings::getInstance()->setString("UIMode", "Full"); mWindow->pushGui(new GuiMsgBox(mWindow, "The selected UI mode has nothing to show,\n returning to UI mode: FULL", "OK", nullptr)); } } }