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

#include <stdio.h>
#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<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
    _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<void()> onGoPressed){
    _onGoPressedCallback = onGoPressed;
}

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