// // ToyMiscUtils.cpp // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 17.05.2017. // // #include #include "ToyMiscUtils.h" #include "ToyGeometryUtils.h" #include "ToyAlertView.h" #include "HelloWorldScene.h" #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) #include "RatePromptHandler_ios.h" #endif #include "audio/include/AudioEngine.h" float ToyMiscUtils::StandardAnimationTime = 0.2; const std::string ToyMiscUtils::MAGGIE_TOUCHED_UD_KEY = "MAGGIE_TOUCHED_UD_KEY"; const std::string ToyMiscUtils::WHICH_LEVEL_UD_KEY = "WHICH_LEVEL_UD_KEY"; const std::string ToyMiscUtils::TOS_ACCEPTED_UD_KEY = "TOS_ACCEPTED_UD_KEY"; const std::string ToyMiscUtils::BG_MUSIC_PLAYING_UD_KEY = "BG_MUSIC_PLAYING_UD_KEY"; void ToyMiscUtils::saveMaggieTouched(){ cocos2d::UserDefault::getInstance()->setBoolForKey(MAGGIE_TOUCHED_UD_KEY.c_str(), true); cocos2d::UserDefault::getInstance()->flush(); } bool ToyMiscUtils::wasMaggieTouched(){ return cocos2d::UserDefault::getInstance()->getBoolForKey(MAGGIE_TOUCHED_UD_KEY.c_str(), false); } void ToyMiscUtils::saveTOSAccepted(){ cocos2d::UserDefault::getInstance()->setBoolForKey(TOS_ACCEPTED_UD_KEY.c_str(), true); cocos2d::UserDefault::getInstance()->flush(); } bool ToyMiscUtils::wasTOSAccepted(){ return true; return cocos2d::UserDefault::getInstance()->getBoolForKey(TOS_ACCEPTED_UD_KEY.c_str(), false); } void ToyMiscUtils::saveBgMusicPlaying(bool bgMusicPlaying){ cocos2d::UserDefault::getInstance()->setBoolForKey(BG_MUSIC_PLAYING_UD_KEY.c_str(), bgMusicPlaying); cocos2d::UserDefault::getInstance()->flush(); } bool ToyMiscUtils::shouldBgMusicPlay(){ return cocos2d::UserDefault::getInstance()->getBoolForKey(BG_MUSIC_PLAYING_UD_KEY.c_str(), true); } //void ToyMiscUtils::saveLastLevel(Level level){ // cocos2d::UserDefault::getInstance()->setIntegerForKey(WHICH_LEVEL_UD_KEY.c_str(), (int)level); //} void ToyMiscUtils::saveLastLevel(int level){ cocos2d::UserDefault::getInstance()->setIntegerForKey(WHICH_LEVEL_UD_KEY.c_str(), level); cocos2d::UserDefault::getInstance()->flush(); } ToyMiscUtils::Level ToyMiscUtils::lastLevel(){ return (Level)cocos2d::UserDefault::getInstance()->getIntegerForKey(WHICH_LEVEL_UD_KEY.c_str(), (int)Level::TEEN); } int ToyMiscUtils::nextLevel(){ return MIN((int)lastLevel() + 1, (int)Level::ADULT); } static int FadeAnimationTag = 88; void ToyMiscUtils::showView(cocos2d::Node* node, bool animated, float toAlpha){ if(node != nullptr){ node->stopActionByTag(FadeAnimationTag); node->setVisible(true); if(animated){ auto fadeAction = cocos2d::FadeTo::create(StandardAnimationTime, toAlpha); fadeAction->setTag(FadeAnimationTag); node->runAction(fadeAction); } else { node->setOpacity(toAlpha); } } } void ToyMiscUtils::hideView(cocos2d::Node* node, bool animated){ if(node != nullptr){ node->stopActionByTag(FadeAnimationTag); if(animated){ auto fadeAction = cocos2d::Sequence::create(cocos2d::FadeOut::create(StandardAnimationTime), cocos2d::CallFunc::create(std::bind([&](cocos2d::Node* n){ n->setVisible(false); },node)), nullptr); fadeAction->setTag(FadeAnimationTag); node->runAction(fadeAction); } else { node->setVisible(false); } } } void ToyMiscUtils::hideAndRemoveView(cocos2d::Node* node, bool animated){ if(node != nullptr){ if(animated){ node->runAction(cocos2d::Sequence::create(cocos2d::FadeOut::create(StandardAnimationTime), cocos2d::CallFunc::create(std::bind([&](cocos2d::Node* n){ n->removeFromParent(); },node)), nullptr)); } else { node->removeFromParent(); } } } cocos2d::Rect ToyMiscUtils::getExtendedActiveArea(cocos2d::Node* object, float extendPercentValueX, float extendPercentValueY, ExtendDirectionX extendDirX, ExtendDirectionY extendDirY) { auto objectBoundingBox = ToyGeometryUtils::getBoundingBoxToWorld(object); if(extendPercentValueX == 0 && extendPercentValueY == 0){ return objectBoundingBox; } auto extendValueX = objectBoundingBox.size.width*extendPercentValueX/100.0; auto extendValueY = objectBoundingBox.size.height*extendPercentValueY/100.0; auto x = objectBoundingBox.origin.x; auto y = objectBoundingBox.origin.y; auto w = objectBoundingBox.size.width; auto h = objectBoundingBox.size.height; switch(extendDirX){ case ExtendDirectionX::LEFT: x -= extendValueX; w += extendValueX; break; case ExtendDirectionX::RIGHT: w += extendValueX; break; case ExtendDirectionX::BOTH: x -= extendValueX/2; w += extendValueX; break; } switch(extendDirY){ case ExtendDirectionY::DOWN: y -= extendValueY; h += extendValueY; break; case ExtendDirectionY::UP: h += extendValueY; break; case ExtendDirectionY::BOTH: y -= extendValueY/2; h += extendValueY; break; } return cocos2d::Rect(x, y, w, h); } bool ToyMiscUtils::isNodeVisible(cocos2d::Node* node){ bool ret = true; cocos2d::Node* parent = node; while (parent != nullptr) { if(!parent->isVisible()){ ret = false; break; } else { parent = parent->getParent(); } } return ret; } std::string ToyMiscUtils::boolToString(bool value) { if(value){ return "true"; } else { return "false"; } } //#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) static const int ToyAlertViewTag = 999; void ToyMiscUtils::showAppCloseConfirmDialog(std::function onCancelCallback){ if(cocos2d::Director::getInstance()->getRunningScene()->getChildByTag(ToyAlertViewTag) == nullptr) { auto alpha = 220; auto message = "Are you sure you want to quit?"; //TODO auto okText = "Yes, bye!"; auto cancelText = "No, let's play!"; auto cancelColor = cocos2d::Color3B(68, 200, 220); auto okColor = cocos2d::Color3B(200, 100, 100); auto alert = ToyAlertView::create(message, okText, cancelText, okColor, cancelColor, []() { #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) cocos2d::Director::getInstance()->end(); #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) cocos2d::AudioEngine::stopAll(); cocos2d::Director::getInstance()->pause(); handler_nativeExitGame(); #else cocos2d::Director::getInstance()->end(); #endif // auto scene = HelloWorld::createScene(); // cocos2d::Director::getInstance()->replaceScene(scene); }, onCancelCallback); auto touchListener = cocos2d::EventListenerTouchOneByOne::create(); touchListener->setSwallowTouches(true); touchListener->onTouchBegan = [&](cocos2d::Touch* touch, cocos2d::Event* event) { return true; }; cocos2d::Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchListener, alert); alert->setTag(ToyAlertViewTag); alert->setLocalZOrder(1000); //TODO make general zorders, named alert->setOpacity(0); cocos2d::Director::getInstance()->getRunningScene()->addChild(alert); alert->runAction(cocos2d::FadeTo::create(ToyMiscUtils::StandardAnimationTime, alpha)); } } bool ToyMiscUtils::closeAppCloseConfirmDialogIfNecessary(){ auto alertNode = cocos2d::Director::getInstance()->getRunningScene()->getChildByTag(ToyAlertViewTag); if(alertNode != nullptr) { alertNode->removeFromParent(); return true; } return false; } //#endif