// // AniMiscUtils.cpp // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 17.05.2017. // // #include #include "AniMiscUtils.h" #include "AniGeometryUtils.h" #include "AniAlertView.h" float AniMiscUtils::StandardAnimationTime = 0.2; const std::string AniMiscUtils::WHICH_LEVEL_UD_KEY = "WHICH_LEVEL_UD_KEY"; const std::string AniMiscUtils::TOS_ACCEPTED_UD_KEY = "TOS_ACCEPTED_UD_KEY"; const std::string AniMiscUtils::BG_MUSIC_PLAYING_UD_KEY = "BG_MUSIC_PLAYING_UD_KEY"; void AniMiscUtils::saveTOSAccepted(){ cocos2d::UserDefault::getInstance()->setBoolForKey(TOS_ACCEPTED_UD_KEY.c_str(), true); cocos2d::UserDefault::getInstance()->flush(); } bool AniMiscUtils::wasTOSAccepted(){ return true; return cocos2d::UserDefault::getInstance()->getBoolForKey(TOS_ACCEPTED_UD_KEY.c_str(), false); } void AniMiscUtils::saveBgMusicPlaying(bool bgMusicPlaying){ cocos2d::UserDefault::getInstance()->setBoolForKey(BG_MUSIC_PLAYING_UD_KEY.c_str(), bgMusicPlaying); cocos2d::UserDefault::getInstance()->flush(); } bool AniMiscUtils::shouldBgMusicPlay(){ return cocos2d::UserDefault::getInstance()->getBoolForKey(BG_MUSIC_PLAYING_UD_KEY.c_str(), true); } //void AniMiscUtils::saveLastLevel(Level level){ // cocos2d::UserDefault::getInstance()->setIntegerForKey(WHICH_LEVEL_UD_KEY.c_str(), (int)level); //} void AniMiscUtils::saveLastLevel(int level){ cocos2d::UserDefault::getInstance()->setIntegerForKey(WHICH_LEVEL_UD_KEY.c_str(), level); cocos2d::UserDefault::getInstance()->flush(); } AniMiscUtils::Level AniMiscUtils::lastLevel(){ return (Level)cocos2d::UserDefault::getInstance()->getIntegerForKey(WHICH_LEVEL_UD_KEY.c_str(), (int)Level::CHILD); } int AniMiscUtils::nextLevel(){ return MIN((int)lastLevel() + 1, (int)Level::ADULT); } static int FadeAnimationTag = 88; void AniMiscUtils::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 AniMiscUtils::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 AniMiscUtils::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 AniMiscUtils::getExtendedActiveArea(cocos2d::Node* object, float extendPercentValueX, float extendPercentValueY, ExtendDirectionX extendDirX, ExtendDirectionY extendDirY) { auto ignoreTransoframtions = object->getScale() == 1 && object->getRotation() == 0; auto objectBoundingBox = AniGeometryUtils::getBoundingBoxToWorld(object, ignoreTransoframtions); 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 AniMiscUtils::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; } //without moving the position void AniMiscUtils::changeAnchorPoint(cocos2d::Node* p_node, cocos2d::Point p_newAnchorPoint){ auto originalAnchorPoint = p_node->getAnchorPoint(); p_node->setAnchorPoint(p_newAnchorPoint); // when we change the anchor point, we also need to adjust the postion so the sprite stays at the same spot auto anchorPointChange = p_node->getAnchorPoint() - originalAnchorPoint; p_node->setPositionX(p_node->getPositionX() + anchorPointChange.x*p_node->getBoundingBox().size.width); p_node->setPositionY(p_node->getPositionY() + anchorPointChange.y*p_node->getBoundingBox().size.height); } std::string AniMiscUtils::boolToString(bool value) { if(value){ return "true"; } else { return "false"; } } std::string AniMiscUtils::clockMinSecTimeString(int seconds){ auto mins = (int)floor(seconds/60); auto secs = seconds%60; std::string timeString = std::to_string(mins) + ":"; if(secs < 10){ timeString += "0" + std::to_string(secs); } else { timeString += std::to_string(secs); } return timeString; }