// // AniSettingsLayer.cpp // Steve and Maggie Halloween // // Created by Katarzyna Kalinowska-Górska on 06/10/2019. // #include #include "AniSettingsLayer.h" #include "AniMiscUtils.h" #include "AniScalingUtils.h" #include "AniStrings.h" #include "AniSimpleButton.h" #include "AniKKGLinearLayout.h" AniSettingsLayer* AniSettingsLayer::create(float width, float height, std::function onLevelPickedCallback, std::function 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 onLevelPickedCallback, std::function 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 levelImagePaths = { "graphics/levels/level_1.png", "graphics/levels/level_2.png", "graphics/levels/level_3.png" }; _AniLevelPickerView = AniLevelPickerView::create(levelImagePaths, std::vector()); 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); 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); replayTutorialButton->setPosition(cocos2d::Point(getContentSize().width-paddingTop-replayTutorialButton->getContentSize().width/2*1.5, getContentSize().height - paddingTop - replayTutorialButton->getContentSize().height*1.5/2)); replayTutorialButton->setOnTouchEndedCallback([&, replayTutorialButton](std::string name, cocos2d::ui::Widget::TouchEventType eventType){ _onTutorialReset(); }); 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(); }); }