// // AniLevelPickerLayer.cpp // HalloweenSpaceInvaders-mobile // // Created by Katarzyna Kalinowska-Górska on 03/10/2019. // #include #include "AniLevelPickerLayer.h" #include "AniScalingUtils.h" #include "AniSimpleButton.h" #include "AniMiscUtils.h" AniLevelPickerLayer* AniLevelPickerLayer::create(float width, float height){ AniLevelPickerLayer * view = new (std::nothrow) AniLevelPickerLayer(); if(view && view->init(width, height)) { view->autorelease(); return view; } CC_SAFE_DELETE(view); return nullptr; } bool AniLevelPickerLayer::init(float width, float height){ if(!cocos2d::LayerColor::initWithColor(cocos2d::Color4B(0,0,0,220), width, height)){ return false; } setCascadeOpacityEnabled(true); // add the level picker std::vector levelImagePaths = { "graphics/levels/level_1.png", "graphics/levels/level_2.png", "graphics/levels/level_3.png" }; std::vector levelNames = { "EASY", "MEDIUM", "DIFFICULT" }; //TODO HARD CODED _AniLevelPickerView = AniLevelPickerView::create(levelImagePaths, levelNames); addChild(_AniLevelPickerView); _AniLevelPickerView->setAnchorPoint(cocos2d::Vec2(0.5, 0.5)); _AniLevelPickerView->setPosition(width/2, height/2); _AniLevelPickerView->addOnLevelChangedCallback([&](int pickedLevel){ AniMiscUtils::saveLastLevel(pickedLevel); _onLevelChangedCallback(pickedLevel); }); _AniLevelPickerView->selectLevelIndex((int)AniMiscUtils::lastLevel(), false); // add the instruction label auto instructionLabel = cocos2d::Label::createWithTTF("CHOOSE YOUR LEVEL:", "fonts/ComicSansMSBold.ttf", 120*AniScalingUtils::getScaleForFont()); //magic number addChild(instructionLabel); auto paddingTop = instructionLabel->getBoundingBox().size.height*1.5f; instructionLabel->setPosition(width/2, _AniLevelPickerView->getBoundingBox().getMaxY() + paddingTop); // add the go button auto buttonGo = AniSimpleButton::create(); auto goButtonTexturePath = "buttons/graphics/dark_green.png"; buttonGo->loadTextures(goButtonTexturePath, goButtonTexturePath, goButtonTexturePath); auto buttonBg = cocos2d::Sprite::create("buttons/graphics/button_go.png"); buttonGo->addChild(buttonBg); buttonBg->setPosition(cocos2d::Vec2(buttonGo->getContentSize().width/2,buttonGo->getContentSize().height/2)); addChild(buttonGo); auto paddingBottom = paddingTop; buttonGo->setAnchorPoint(cocos2d::Vec2(1, 0.5)); buttonGo->setPosition(cocos2d::Vec2(_AniLevelPickerView->getBoundingBox().getMaxX(), _AniLevelPickerView->getBoundingBox().getMinY() - paddingBottom)); buttonGo->setOnTouchEndedCallback([&, buttonGo](std::string name, cocos2d::ui::Widget::TouchEventType eventType){ buttonGo->setOpacity(150); buttonGo->setEnabled(false); _AniLevelPickerView->startAnimatingLevelPicture(_AniLevelPickerView->getPickedLevelIndex()); if(_onGoPressedCallback != nullptr){ _onGoPressedCallback(); } // AniMiscUtils::hideAndRemoveView(this, true); }); return true; } void AniLevelPickerLayer::addOnGoPressedCallback(std::function onGoPressed){ _onGoPressedCallback = onGoPressed; } void AniLevelPickerLayer::setOnLevelChangedCallback(std::function p_onLevelChangedCallback){ _onLevelChangedCallback = p_onLevelChangedCallback; }