Untitled
unknown
c_cpp
5 months ago
8.6 kB
3
Indexable
// // BannerPopUp.cpp // HCR // // Created by Ivan Serdechenko on 05.11.2024. // #include "BannerPopUp.hpp" BannerPopUp::BannerPopUp() { float scale = Parameters::getInstance()->getGUIScale(); dialogWidth = 524 * 2 * scale; dialogHeight = 446 * 2 * scale; float maxHeight = dialogHeight + UIFactory::getUIButtonWidth() * 2 + 20 * scale; if(maxHeight > SCREEN_HEIGHT) { dialogHeight = SCREEN_HEIGHT - UIFactory::getUIButtonWidth() * 2 - 20 * scale; } dialogSize = Size(dialogWidth, dialogHeight); } BannerPopUp *BannerPopUp::create( string title, string message, string imageName, string primaryButtonText, string secondaryButtonText, function<void()> primaryButtonCallback, function<void()> secondaryButtonCallback ) { auto returnObject = new BannerPopUp(); returnObject->autorelease(); returnObject->init(); returnObject->createGUI(title, message, imageName, primaryButtonText, secondaryButtonText, true, primaryButtonCallback, secondaryButtonCallback); returnObject->setVisible(false); return returnObject; } BannerPopUp *BannerPopUp::create( string title, string message, string imageName, string primaryButtonText, function<void()> primaryButtonCallback ) { auto returnObject = new BannerPopUp(); returnObject->autorelease(); returnObject->init(); returnObject->createGUI(title, message, imageName, primaryButtonText, "", false, primaryButtonCallback, {}); returnObject->setVisible(false); return returnObject; } void BannerPopUp::createGUI( string title, string message, string imageName, string primaryButtonText, string secondaryButtonText, bool showSecondaryButton, function<void()> primaryButtonCallback, function<void()> secondaryButtonCallback ) { createActionButtons(primaryButtonText, secondaryButtonText, showSecondaryButton, primaryButtonCallback, secondaryButtonCallback); createImage(imageName); createLabels(title, message); aboba(); } void BannerPopUp::aboba() { auto layoutParameter = cocos2d::ui::LinearLayoutParameter::create(); layoutParameter->setGravity(cocos2d::ui::LinearLayoutParameter::LinearGravity::CENTER_VERTICAL); auto vBox = VBox::create(); // hBox->setContentSize({itemWidth, itemHeight}); // Locale //auto image = getImageForItem(locale); // Spacer auto spacer = Layout::create(); spacer->setContentSize(Size(30, 24*2)); // // // Language name // auto text = getTextForItem(locale); auto titleWidget = Widget::create(); titleWidget->setContentSize(title->getContentSize()); titleWidget->addChild(title); titleWidget->setLayoutParameter(layoutParameter); auto messageWidget = Widget::create(); messageWidget->setContentSize(message->getContentSize()); messageWidget->addChild(message); messageWidget->setLayoutParameter(layoutParameter); messageWidget->setLayoutParameter(layoutParameter); vBox->addChild(titleWidget); vBox->addChild(spacer); vBox->addChild(messageWidget); vBox->setContentSize(Size(title->getBoundingBox().size.width, title->getBoundingBox().size.height + message->getBoundingBox().size.height + spacer->getBoundingBox().size.height)); vBox->setAnchorPoint({0.5, 0.5}); vBox->setPosition(SCREEN_CENTER); contentLayer->addChild(vBox, guiZOrder); auto backgroundLayer = LayerColor::create(Color4B(255, 0, 0, 255), vBox->getContentSize().width, vBox->getContentSize().height); backgroundLayer->setContentSize(Size(vBox->getContentSize().width, vBox->getContentSize().height)); // Position the background layer (same position as VBox) backgroundLayer->setAnchorPoint(vBox->getAnchorPoint()); backgroundLayer->setPosition(SCREEN_CENTER); // Add the background layer to the parent of VBox before adding the VBox itself vBox->getParent()->addChild(backgroundLayer, vBox->getLocalZOrder() - 1); } void BannerPopUp::createLabels(string titleText, string messageText) { float labelScale = Parameters::getInstance()->getGUIScale(); float textScale = labelScale * 2; title = HCUtils::createLabel(titleText, MENU_FONT, 42 * 2); title->setDimensions(319 * 2, 0); title->setScale(labelScale); title->setColor(MENU_COLOR); float titlePositionY = 500 - 28 * textScale; // float titlePositionY = image->getBoundingBox().getMinY() - 28 * textScale; // title->setPosition(dialogPosition.x , titlePositionY); title->setPosition(0 ,0); // contentLayer->addChild(title, guiZOrder); message = HCUtils::createLabel(messageText, MENU_FONT, 22 * 2); message->setScale(labelScale); message->setColor(SETTINGS_COLOR); message->setDimensions(319 * 2, 0); float messagePositionY = primaryButton->getBoundingBox().getMaxY() + 50 * textScale; // message->setPosition(dialogPosition.x , messagePositionY); message->setPosition(0 , 0); // message->setAlignment(TextHAlignment::CENTER); // contentLayer->addChild(message, guiZOrder); } void BannerPopUp::createImage(string imageName) { // float scale = Parameters::getInstance()->getGUIScale() * 2; // // image = UIFactory::createUISpriteButton(imageName); // image->setContentSize(Size(192*2, 192*2)); // image->setScale(Parameters::getInstance()->getGUIScale()); // float maxY = dialogHeight / 2 + dialogPosition.y; // image->setAnchorPoint({0.5, 1.0}); // image->setPosition(Vec2(dialogPosition.x, maxY - 32 * scale)); // contentLayer->addChild(image, guiZOrder); } void BannerPopUp::onTap(Vec2 position) { if(primaryButton->containsPoint(position)) { if (this->primaryButtonCallback) { this->primaryButtonCallback(); } close(); return; } else if (showSecondaryButton && secondaryButton->getBoundingBox().containsPoint(position)) { if (this->secondaryButtonCallback) { this->secondaryButtonCallback(); } close(); return; } PopUp::onTap(position); } void BannerPopUp::createActionButtons(string primaryButtonText, string secondaryButtonText, bool showSecondaryButton, function<void()> primaryButtonCallback, function<void()> secondaryButtonCallback) { float buttonScale = Parameters::getInstance()->getGUIScale(); float textScale = buttonScale * 2; float buttonWidth = 226 * 2 * buttonScale; float buttonHeight = 58 * 2 * buttonScale; float buttonMargin = 24 * 2 * buttonScale; Size buttonSize = Size (buttonWidth, buttonHeight); float buttonY = dialogPosition.y - dialogHeight / 2 + 32 * textScale + buttonHeight/2; // primaryButton = ExtendableButton::create(buttonSize, ExtendableButtonType::GREEN_CLAY); primaryButton = ExtendableButton::create(primaryButtonText, MENU_FONT, FLAGS_FONT_SIZE, -1, ExtendableButtonType::WHITE_WITH_BORDER_AND_RADIOBUTTON); Color3B textColor = Color3B::WHITE; // primaryButton->setTouchEnabled(false); // primaryButton->setLabel(primaryButtonText, MENU_FONT, FLAGS_FONT_SIZE * buttonScale, textColor, textColor); contentLayer->addChild(primaryButton, guiZOrder); float primaryButtonPosX = 0; if (showSecondaryButton) { secondaryButton = Sprite::create(); secondaryButton->setScale(buttonScale); secondaryButton->setContentSize(Size(buttonWidth, buttonHeight)); secondaryButton->setColor(SETTINGS_COLOR); contentLayer->addChild(secondaryButton, guiZOrder); float secondaryButtonPosX = dialogPosition.x - dialogWidth / 2 + 24 * textScale + buttonWidth/2; secondaryButton->setPosition({ secondaryButtonPosX, buttonY }); Label* secondaryText = HCUtils::createLabel(secondaryButtonText, MENU_FONT, 44); secondaryText->setScale(scale); secondaryText->setColor(SETTINGS_COLOR); secondaryText->setPosition({secondaryButton->getPosition().x, secondaryButton->getPosition().y}); contentLayer->addChild(secondaryText, guiZOrder); primaryButtonPosX = dialogPosition.x + primaryButton->getBoundingBox().size.width / 2 + buttonMargin / 2; } else { primaryButtonPosX = dialogPosition.x; } primaryButton->setAnchorPoint({0.5, 0.5}); primaryButton->setPosition({ primaryButtonPosX, buttonY }); this->primaryButtonCallback = primaryButtonCallback; this->secondaryButtonCallback = secondaryButtonCallback; this->showSecondaryButton = showSecondaryButton; }
Editor is loading...
Leave a Comment