// // HSimpleLevelPickerView.cpp // HalloweenSpaceInvaders-mobile // // Created by Katarzyna Kalinowska-Górska on 01/10/2019. // #include #include "HSimpleLevelPickerView.h" #include "HMiscUtils.h" #include "HGeometryUtils.h" HSimpleLevelPickerView* HSimpleLevelPickerView::create(std::vector levelImagePaths){ HSimpleLevelPickerView * view = new (std::nothrow) HSimpleLevelPickerView(); if(view && view->init(levelImagePaths)) { view->autorelease(); return view; } CC_SAFE_DELETE(view); return nullptr; } bool HSimpleLevelPickerView::init(std::vector levelImagePaths){ if(!cocos2d::Node::init()){ return false; } for(auto levelImagePath : levelImagePaths){ auto newHLevelView = HLevelView::create(levelImagePath); addChild(newHLevelView); HLevelViews.emplace_back(newHLevelView); newHLevelView->setCascadeOpacityEnabled(true); newHLevelView->setOpacity(0); auto contentSize = getContentSize(); contentSize = cocos2d::Size(MAX(contentSize.width, newHLevelView->getBoundingBox().size.width), MAX(contentSize.height, newHLevelView->getBoundingBox().size.height)); setContentSize(contentSize); } for(auto HLevelView : HLevelViews){ HLevelView->setPosition(getContentSize().width/2, getContentSize().height/2); } _selectedLevelIndex = 0; HLevelViews[_selectedLevelIndex]->setOpacity(255); HLevelViews[_selectedLevelIndex]->setChosen(true, false); _onLevelChanged = nullptr; prepareTouchHandlers(); return true; } void HSimpleLevelPickerView::selectLevelIndex(int index, bool animated){ if(_selectedLevelIndex != index){ if(animated){ HLevelViews[_selectedLevelIndex]->runAction(cocos2d::FadeOut::create(HMiscUtils::StandardAnimationTime)); HLevelViews[_selectedLevelIndex]->setChosen(false, true); HLevelViews[index]->runAction(cocos2d::FadeIn::create(HMiscUtils::StandardAnimationTime)); HLevelViews[index]->setChosen(true, true); } else { HLevelViews[_selectedLevelIndex]->setOpacity(0); HLevelViews[_selectedLevelIndex]->setChosen(false, false); HLevelViews[index]->setOpacity(255); HLevelViews[index]->setChosen(true, false); } _selectedLevelIndex = index; } } int HSimpleLevelPickerView::getPickedLevelIndex(){ return _selectedLevelIndex; } void HSimpleLevelPickerView::addOnLevelChangedCallback(std::function onLevelChanged){ _onLevelChanged = onLevelChanged; } void HSimpleLevelPickerView::loadPropertiesFromJSON(const rapidjson::Value& jsonValue, HLayoutViewInterface* scene, const std::string resFolder, const std::string altResFolder) { setAnchorPoint(cocos2d::Vec2(0.5,0.5)); this->loadCommonPropertiesFromJSON(jsonValue); } void HSimpleLevelPickerView::prepareTouchHandlers() { auto touchListener = cocos2d::EventListenerTouchOneByOne::create(); touchListener->onTouchBegan = [&](cocos2d::Touch* touch, cocos2d::Event* event){ return HGeometryUtils::getBoundingBoxToWorld(this).containsPoint(touch->getLocation()); // if(getBoundingBox().containsPoint(touch->getLocation())){ // return true; // } // return false; }; touchListener->onTouchEnded = [&](cocos2d::Touch* touch, cocos2d::Event* event){ if(HGeometryUtils::getBoundingBoxToWorld(this).containsPoint(touch->getLocation())){ selectLevelIndex((_selectedLevelIndex+1)%HLevelViews.size(), true); if(_onLevelChanged != nullptr){ _onLevelChanged(_selectedLevelIndex); } } }; _eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this); }