Untitled
unknown
c_cpp
a year ago
8.6 kB
6
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