LevelPickerLayer.cpp 3.12 KB
//
//  LevelPickerLayer.cpp
//  HalloweenSpaceInvaders-mobile
//
//  Created by Katarzyna Kalinowska-Górska on 03/10/2019.
//

#include <stdio.h>
#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<std::string> levelImagePaths = { "graphics/levels/level_1.png", "graphics/levels/level_2.png", "graphics/levels/level_3.png" };
    std::vector<std::string> 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<void()> onGoPressed){
    _onGoPressedCallback = onGoPressed;
}

void LevelPickerLayer::setOnLevelChangedCallback(std::function<void(int)> p_onLevelChangedCallback){
    _onLevelChangedCallback = p_onLevelChangedCallback;
}