bool Background::init() { m_masterTile = GAFAsset::create("back_1/back_1.gaf"); Size visibleSize = Director::getInstance()->getVisibleSize(); const int visibleSizeWidth = visibleSize.width; int totalSize = 0; do { GAFAnimatedObject* tile = m_masterTile->createObjectAndRun(); tile->retain(); if (m_tileWidth == 0) { m_tileWidth = tile->getContentSize().width; } tile->setScale(1); m_tiles.push_back(tile); addChild(tile); totalSize += m_tileWidth; } while (totalSize < visibleSizeWidth + m_tileWidth); repositionTilesStartingFrom(0); Director::getInstance()->getScheduler()->scheduleUpdate(this, 1, false); return true; }
int GafFeatures::frameNumber() { if (!_objects || !_objects->count()) { return -1; } GAFAnimatedObject *object = (GAFAnimatedObject *)_objects->objectAtIndex(0); return object->currentFrameIndex(); }
void GafFeatures::setFrameNumber(int aFrameNumber) { if (!_objects || !_objects->count()) { return; } GAFAnimatedObject *object = (GAFAnimatedObject *)_objects->objectAtIndex(0); object->setFrame(aFrameNumber); }
int GafFeatures::maxFrameNumber() { if (!_objects || !_objects->count()) { return -1; } GAFAnimatedObject *object = (GAFAnimatedObject *)_objects->objectAtIndex(0); return object->totalFrameCount(); }
void GafFeatures::toggleReverse(cocos2d::Ref*) { if (m_objects->count() == 0) { return; } GAFAnimatedObject *obj = (GAFAnimatedObject *)m_objects->getLastObject(); obj->setReversed(!obj->isReversed()); }
void GafFeatures::restart() { if (!_objects || !_objects->count()) { return; } GAFAnimatedObject *object = (GAFAnimatedObject *)_objects->objectAtIndex(0); object->stop(); object->start(); }
GAFAnimatedObject * GAFAsset::createObjectAndRun(bool looped) { GAFAnimatedObject * res = createObject(); if (res) { res->setLooped(looped); res->start(); } return res; }
void GafFeatures::restart(cocos2d::Ref*) { if (!m_objects || !m_objects->count()) { return; } GAFAnimatedObject *object = (GAFAnimatedObject *)m_objects->getObjectAtIndex(0); object->stop(); object->start(); }
void Gun::emitProjectile() { GAFAnimatedObject* model = m_projectile->createObjectAndRun(true); model->setPosition(m_projectileOffset); Mat4 transform = getNodeToWorldTransform(); Node* container = Node::create(); container->setPosition(m_emissionPoint); addChild(container); Projectile* p = Projectile::create(model, m_projectileDamage, m_projectileSpeed, container); removeChild(container); Director::getInstance()->getRunningScene()->addChild(p); }
void GafFeatures::prevSequence( cocos2d::Ref* ) { GAFAnimatedObject *object = (GAFAnimatedObject *)m_objects->getObjectAtIndex(0); m_currentSequence--; if (m_currentSequence < 0) { m_currentSequence = m_objectSequencesNames.size() - 1; } const char* secName = m_objectSequencesNames[m_currentSequence].c_str(); object->playSequence(secName, true); m_sequenceName->setString(secName); }
void GafFeatures::removeFromScene(int aCount) { if (!_objects || !aCount) { return; } if (aCount > _objects->count()) { aCount = _objects->count(); } for (int i = 0; i < aCount; ++i) { GAFAnimatedObject *obj = (GAFAnimatedObject *) _objects->lastObject(); obj->removeFromParentAndCleanup(true); _objects->removeLastObject(); } }
void GafFeatures::playpause(cocos2d::Ref*) { if (!m_objects || !m_objects->count()) { return; } GAFAnimatedObject *object = (GAFAnimatedObject *)m_objects->getObjectAtIndex(0); if (object->isAnimationRunning()) { object->pauseAnimation(); } else { object->resumeAnimation(); } }
void GafFeatures::playpause() { if (!_objects || !_objects->count()) { return; } GAFAnimatedObject *object = (GAFAnimatedObject *)_objects->objectAtIndex(0); if (object->isAnimationRunning()) { object->pause(); } else { object->resume(); } }
void GafFeatures::addObjectsToScene(int aCount) { if (!aCount) { return; } if (!_asset) { _asset = GAFAsset::create(_jsons[_anim_index]); CC_SAFE_RETAIN(_asset); } if (!_objects) { _objects = CCArray::create(); _objects->retain(); } if (_asset) { int initialCount = _objects->count(); for (int i = initialCount; i < initialCount + aCount; ++i) { GAFAnimatedObject *object = _asset->createObjectAndRun(true); object->setZOrder(100 * i); addChild(object); float s = CCDirector::sharedDirector()->getWinSize().height / 640; if (s > 1) s = 1; object->setScale(s); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); object->setPosition(winSize.width * (0.4 + 0.05 * i), winSize.height * 0.6); _objects->addObject(object); // will work only if animation has sequence object->playSequence("walk", true); } } }
bool MainMenuScene::init() { if (!Scene::init()) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); GAFAnimatedObject* logo = GAFAnimatedObject::createAndRun("logo/logo.gaf", false); logo->setPosition(0, visibleSize.height); addChild(logo); MenuItem* startButton = MenuItemSprite::create( Sprite::create("button_logo_idle.png"), Sprite::create("button_logo_selected.png"), CC_CALLBACK_1(MainMenuScene::advanceToGame, this)); Menu* menu = Menu::create(startButton, NULL); startButton->setPosition(visibleSize.width / 2, 50); menu->setPosition(Vec2::ZERO); menu->setTag(1); addChild(menu, 1); glClearColor(1, 1, 1, 1.0); m_label = Label::create("1 enemies", "arial", 20); m_label->setColor(Color3B::RED); MenuItem* toggleEnemiesCount = MenuItemLabel::create(m_label, CC_CALLBACK_1(MainMenuScene::toggleEnemiesCount, this)); Menu* menu2 = Menu::create(toggleEnemiesCount, NULL); toggleEnemiesCount->setPosition(visibleSize.width - 60 , 50); menu2->setPosition(Vec2::ZERO); addChild(menu2); return true; }
void GafFeatures::addObjectsToScene() { if (!m_asset) { StartCounter(); m_asset = GAFAsset::create(m_files[m_anim_index], this); double loadingTime = GetCounter(); cocos2d::log("Loading time [%f]\n", loadingTime); std::ostringstream ss; ss << m_files[m_anim_index] << " "; ss << loadingTime; //m_loadingTimeLabel->setString(ss.str().c_str()); ss.str(""); ss << "VRAM: "; ss << m_asset->getTextureAtlas()->getMemoryConsumptionStat(); ss << " bytes"; m_vramStat->setString(ss.str()); CC_SAFE_RETAIN(m_asset); } if (!m_objects) { m_objects = cocos2d::__Array::create(); m_objects->retain(); } const cocos2d::Size size = cocos2d::Director::getInstance()->getWinSizeInPixels(); if (m_asset) { GAFAnimatedObject *object = m_asset->createObject(); object->setLocalZOrder(0); addChild(object); float scaleFactor = cocos2d::Director::getInstance()->getContentScaleFactor(); object->setPosition(centerScreenPosition(m_asset, size / scaleFactor)); m_objects->addObject(object); m_objectSequencesNames.clear(); #if CC_TARGET_PLATFORM == CC_PLATFORM_IOS CocosDenshion::SimpleAudioEngine::getInstance()->stopAllEffects(); for(auto& effect : m_musicEffects) { CocosDenshion::SimpleAudioEngine::getInstance()->unloadEffect(effect.second.c_str()); } #endif m_musicEffects.clear(); const AnimationSequences_t& secDictionary = m_asset->getAnimationSequences(); if (!secDictionary.empty()) { for (AnimationSequences_t::const_iterator i = secDictionary.begin(), e = secDictionary.end(); i != e; ++i) { const std::string& seqName = i->first; std::string::size_type pos = seqName.find("__audio:"); if (pos != std::string::npos) { std::string effectName = seqName.substr(pos + 8) + ".wav"; #if CC_TARGET_PLATFORM == CC_PLATFORM_IOS CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect(effectName.c_str()); #endif m_musicEffects[i->second.startFrameNo] = std::move(effectName); } else { m_objectSequencesNames.push_back(i->first); } } } enableSequenceControllers(!m_objectSequencesNames.empty()); // will work only if animation has a sequence object->playSequence("walk", true); object->setLooped(true); object->start(); object->setSequenceDelegate(this); object->setFramePlayedDelegate(this); } }