// // LevelPickerLayer.cpp // HalloweenSpaceInvaders-mobile // // Created by Katarzyna Kalinowska-Górska on 03/10/2019. // #include #include "LevelPickerLayer.h" #include "ScalingUtils.h" #include "SimpleButton.h" #include "MiscUtils.h" LevelPickerLayer* LevelPickerLayer::create(float width, float height){ LevelPickerLayer * view = new (std::nothrow) LevelPickerLayer(); if(view && view->init(width, height)) { view->autorelease(); return view; } CC_SAFE_DELETE(view); return nullptr; } bool LevelPickerLayer::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 _levelPickerView = LevelPickerView::create(levelImagePaths, levelNames); addChild(_levelPickerView); _levelPickerView->setAnchorPoint(cocos2d::Vec2(0.5, 0.5)); _levelPickerView->setPosition(width/2, height/2); _levelPickerView->addOnLevelChangedCallback([&](int pickedLevel){ MiscUtils::saveLastLevel(pickedLevel); _onLevelChangedCallback(pickedLevel); }); _levelPickerView->selectLevelIndex((int)MiscUtils::lastLevel(), false); // add the instruction label auto instructionLabel = cocos2d::Label::createWithTTF("CHOOSE YOUR LEVEL:", "fonts/ComicSansMSBold.ttf", 120*ScalingUtils::getScaleForFont()); //magic number addChild(instructionLabel); auto paddingTop = instructionLabel->getBoundingBox().size.height*1.5f; instructionLabel->setPosition(width/2, _levelPickerView->getBoundingBox().getMaxY() + paddingTop); // add the go button auto buttonGo = SimpleButton::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(_levelPickerView->getBoundingBox().getMaxX(), _levelPickerView->getBoundingBox().getMinY() - paddingBottom)); buttonGo->setOnTouchEndedCallback([&](std::string name, cocos2d::ui::Widget::TouchEventType eventType){ if(_onGoPressedCallback != nullptr){ _onGoPressedCallback(); } MiscUtils::hideAndRemoveView(this, true); }); return true; } void LevelPickerLayer::addOnGoPressedCallback(std::function onGoPressed){ _onGoPressedCallback = onGoPressed; } void LevelPickerLayer::setOnLevelChangedCallback(std::function p_onLevelChangedCallback){ _onLevelChangedCallback = p_onLevelChangedCallback; }