AniSettingsLayer.cpp 6.89 KB
//
//  AniSettingsLayer.cpp
//  Steve and Maggie Halloween
//
//  Created by Katarzyna Kalinowska-Górska on 06/10/2019.
//

#include <stdio.h>
#include "AniSettingsLayer.h"
#include "AniMiscUtils.h"
#include "AniScalingUtils.h"
#include "AniStrings.h"
#include "AniSimpleButton.h"
#include "AniKKGLinearLayout.h"
#include "AniAlertUtils.h"

AniSettingsLayer* AniSettingsLayer::create(float width, float height, std::function<void(int)> onLevelPickedCallback, std::function<void()> onTutorialResetPickedCallback){
    AniSettingsLayer * view = new (std::nothrow) AniSettingsLayer();
    if(view && view->init(width, height, onLevelPickedCallback, onTutorialResetPickedCallback))
    {
        view->autorelease();
        return view;
    }
    CC_SAFE_DELETE(view);
    return nullptr;
}

bool AniSettingsLayer::init(float width, float height, std::function<void(int)> onLevelPickedCallback, std::function<void()> onTutorialResetPickedCallback){
    
    if(!cocos2d::LayerColor::initWithColor(cocos2d::Color4B(0,0,0,230), width, height)){
        return false;
    }
    
    _isPresentingParentalGate = false;
    _onLevelPicked = onLevelPickedCallback;
    _onTutorialReset = onTutorialResetPickedCallback;

    AniKKGLinearLayout* container = AniKKGLinearLayout::create(AniKKGLinearLayout::LayoutType::VERTICAL,
                                                         AniKKGLinearLayout::Alignment::ACENTER,
                                                         AniKKGLinearLayout::Gravity::GCENTER);
    addChild(container);

    auto paddingTop = 50*AniScalingUtils::scaleAspectFillToDesignIpadProSize();

    std::vector<std::string> levelImagePaths = { "graphics/levels/level_1.png", "graphics/levels/level_2.png", "graphics/levels/level_3.png" };
    _AniLevelPickerView = AniLevelPickerView::create(levelImagePaths, std::vector<std::string>());
    container->addView(_AniLevelPickerView);
    _AniLevelPickerView->addOnLevelChangedCallback([&](int pickedLevel){
        AniMiscUtils::saveLastLevel(pickedLevel);
        _onLevelPicked(pickedLevel);
        _AniLevelPickerView->setEnabled(false);
    });
    _AniLevelPickerView->selectLevelIndex((int)AniMiscUtils::lastLevel(), false);
    _AniLevelPickerView->setAnchorPoint(cocos2d::Vec2(1, 0.5));

    auto menuItemColor = cocos2d::Color3B(140, 140, 140);
    cocos2d::MenuItemFont::setFontSize(120*AniScalingUtils::getScaleForFont()); //TODO MAGIC NUMBER
    cocos2d::MenuItemFont::setFontName("fonts/ComicSansMSBold.ttf");

    auto webLinkButton = AniSimpleButton::create();
    container->addView(webLinkButton);
    webLinkButton->setVisible(false);
    auto buttonTexturePath = "settings_buttons/steve_maggie.png";
    webLinkButton->loadTextures(buttonTexturePath, buttonTexturePath, buttonTexturePath);
    webLinkButton->setOnTouchEndedCallback([&, webLinkButton](std::string name, cocos2d::ui::Widget::TouchEventType eventType){
       presentParentalGate([&](){
            hideParentalGate();
            cocos2d::Application::getInstance()->openURL("https://www.steveandmaggie.com"); //TODO hardcoded
        }, [&](){
            hideParentalGate();
        });
    });



    auto replayTutorialButton = AniSimpleButton::create();
    addChild(replayTutorialButton);
    auto repTutButtonTexturePath = "settings_buttons/play_preview_again.png";
    replayTutorialButton->loadTextures(repTutButtonTexturePath, repTutButtonTexturePath, repTutButtonTexturePath);
    replayTutorialButton->setScale(1.5f);
    replayTutorialButton->setOriginalScale(1.5f);
    auto pos_x = getContentSize().width-paddingTop-replayTutorialButton->getContentSize().width/2*1.5;
    auto pos_y = getContentSize().height - paddingTop - replayTutorialButton->getContentSize().height*1.5/2;

    replayTutorialButton->setPosition(cocos2d::Point(pos_x - 400 ,pos_y));
    replayTutorialButton->setOnTouchEndedCallback([&, replayTutorialButton](std::string name, cocos2d::ui::Widget::TouchEventType eventType){
        _onTutorialReset();
    });


    auto appExitButton = AniSimpleButton::create();
    addChild(appExitButton);
    auto exitButtonTexturePath = "buttons/graphics/button_x.png";
    appExitButton->loadTextures(exitButtonTexturePath, exitButtonTexturePath, exitButtonTexturePath);
    appExitButton->setScale(1.5f);
    appExitButton->setOriginalScale(1.5f);
    appExitButton->setPosition(cocos2d::Point(getContentSize().width-paddingTop-appExitButton->getContentSize().width/2*1.5, pos_y));
    appExitButton->setOnTouchEndedCallback([&, appExitButton](std::string name, cocos2d::ui::Widget::TouchEventType eventType){
       AniAlertUtils::showAppCloseConfirmDialog([&](){
                        });
    });




    
    auto menuPadding = 30*AniScalingUtils::scaleAspectFillToDesignIpadProSize();//TODO magic number

    auto menuItemAbout = cocos2d::MenuItemFont::create("Terms of Use", CC_CALLBACK_1(AniSettingsLayer::aboutMenuButtonTapped, this));
    auto menuItemPrivacyPolicy = cocos2d::MenuItemFont::create("Privacy Policy", CC_CALLBACK_1(AniSettingsLayer::privacyPolicyMenuButtonTapped, this));
    
    auto menuCenter = cocos2d::Menu::create(menuItemAbout,menuItemPrivacyPolicy, NULL);
    menuCenter->setContentSize(cocos2d::Size(MAX(menuItemAbout->getBoundingBox().size.width, menuItemPrivacyPolicy->getBoundingBox().size.width), menuItemAbout->getBoundingBox().size.height + menuItemPrivacyPolicy->getBoundingBox().size.height + 3*menuPadding));
    menuCenter->setColor(menuItemColor);
    menuCenter->alignItemsVerticallyWithPadding(menuPadding);
    container->addView(menuCenter);//addChild(menuContainer, 3);

    container->setInterViewMargin(paddingTop);
    container->setCascadeOpacityEnabled(true);
    container->wrapContents();
    container->setPosition(getContentSize()/2);
    container->setAnchorPoint(cocos2d::Point::ONE/2);

    // adjust the weird menu post-layout // quick fix
    menuCenter->setPositionY(webLinkButton->getBoundingBox().getMinY() - menuItemAbout->getBoundingBox().size.height - paddingTop);

    return true;
}

void AniSettingsLayer::prepareForShowing(){
    _AniLevelPickerView->selectLevelIndex((int)(AniMiscUtils::lastLevel()), false);
    _AniLevelPickerView->setEnabled(true);
}

void AniSettingsLayer::aboutMenuButtonTapped(cocos2d::Ref* pSender){
    presentParentalGate([&](){
        hideParentalGate();
//        cocos2d::Application::getInstance()->openURL(AniStrings::LINK_TERMS_OF_SERVICE);
        cocos2d::Application::getInstance()->openURL("https://www.wattsenglish.com/steve-and-maggie-halloween/terms-of-use.html");
    }, [&](){
        hideParentalGate();
    });
}

void AniSettingsLayer::privacyPolicyMenuButtonTapped(cocos2d::Ref* pSender){
    presentParentalGate([&](){
        hideParentalGate();
//        cocos2d::Application::getInstance()->openURL(AniStrings::LINK_PRIVACY_POLICY);
        cocos2d::Application::getInstance()->openURL("https://www.wattsenglish.com/steve-and-maggie-halloween/principles-of-personal-data-processing.html");
    }, [&](){
        hideParentalGate();
    });
}