Untitled

 avatar
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