FMMainScene::FMMainScene() :m_currentScene(kLoadingNode) { //load textures for test NEAnimManager::sharedManager()->loadSpriteframesFromFile(CCString::create("Elements.plist")); NEAnimManager::sharedManager()->loadSpriteframesFromFile(CCString::create("Map.plist")); CCTexture2D * tex = CCTextureCache::sharedTextureCache()->textureForKey("Map.pvr.ccz"); tex->setAliasTexParameters(); CC_PROFILER_START("GameNode Init"); m_energyManager = FMEnergyManager::manager(); schedule(schedule_selector(FMMainScene::update), 1.f); m_ui = GAMEUI_Scene::uiSystem(); addChild(m_ui, 1000); m_worldMap = FMWorldMapNode::create(); m_worldMap->retain(); m_game = FMGameNode::create(); m_game->retain(); FMStatusbar * statusbar = (FMStatusbar *)FMDataManager::sharedManager()->getUI(kUI_Statusbar); m_statusbar = statusbar; addChild(statusbar, 2000); //tutorial FMTutorial * tut = FMTutorial::tut(); m_tutorial = tut; m_tutorial->setVisible(false); addChild(tut, 3000); CC_PROFILER_STOP("GameNode Init"); CC_PROFILER_DISPLAY_TIMERS(); }
void GameScene::start(float dt) { bool autoPlay = true; // apply loaded image for(auto it = mImageDictionary.begin(); it != mImageDictionary.end(); it++) { CCTexture2D* texture = new CCTexture2D(); if(false == texture->initWithImage(it->second)) { delete texture; continue; } mBgaDictionary[it->first] = texture; } for(auto it = mBmsDocument.channel().begin(); it != mBmsDocument.channel().end(); it++) { const std::string& channel = it->first; if(channel.find("01") != std::string::npos) { mChannelPlayers[channel] = new WaveChannelPlayer(it->second, mWavDictionary); } else if(channel.find("02") != std::string::npos) { //mChannelPlayers[channel] = new BarScaleChannelPlayer(it->second); } else if(channel.find("03") != std::string::npos) { mChannelPlayers[channel] = new BpmChannelPlayer(it->second); } else { int iChannel = base36ToInt(channel.c_str()); if(base36ToInt("10") < iChannel && iChannel < base36ToInt("70") && channel[1] != '0'/*exclude 20, 30, 40, ...*/) { int mappedKey = -1; for(int i=0; i<sizeof(keyChannelMap)/sizeof(keyChannelMap[0]); i++) { if(channel == keyChannelMap[i]) { mappedKey = i; break; } } if(mappedKey < 0) { mChannelPlayers[channel] = new WaveChannelPlayer(it->second, mWavDictionary); } else { mChannelPlayers[channel] = new PlayChannelPlayer(it->second, mWavDictionary, Key::MappedKey(mappedKey), autoPlay); } } else if( base36ToInt(ChannelType::BGA_BASE) == iChannel || base36ToInt(ChannelType::BGA_LAYER) == iChannel || base36ToInt(ChannelType::BGA_LAYER2) == iChannel ) { BgaChannelPlayer* bgaPlayer = new BgaChannelPlayer(it->second, mBgaDictionary, base36ToInt(ChannelType::BGA_POOR) == iChannel); mChannelPlayers[channel] = bgaPlayer; bgaPlayer->getSprite()->setContentSize(Size(640, 480)); bgaPlayer->getSprite()->setPosition(Point(640, 480)); addChild(bgaPlayer->getSprite()); } } } {//panel // load skin CCTexture2D* skinTexture = CCTextureCache::sharedTextureCache()->addImage(Panel::SKIN_PATH); // no antialias skinTexture->setAliasTexParameters(); CCNode* panel = CCNode::create(); addChild(panel); Panel* frontPanel = new FrontPanel; Panel* backPanel = new BackPanel(mChannelPlayers); Panel* controlPanel = new ControlPanel; panel->addChild(backPanel); panel->addChild(frontPanel); panel->addChild(controlPanel); // fit panel to screen panel->setScale(CCDirector::sharedDirector()->getOpenGLView()->getDesignResolutionSize().height / 480); } mCurrentBpm = mBmsDocument.header().getBpm(); //끝낼 마디 설정 mEndPosition = 0; for(auto it = mBmsDocument.channel().begin(); it != mBmsDocument.channel().end(); it++) { if(it->second->endPosition() > mEndPosition) mEndPosition = it->second->endPosition(); } mEndPosition += 1; // 시간 관련 초기화 mLastBpmTime = mStartTime = currentTime(); mLastBpmMeter = 0; origTime = mStartTime;// - 60000; origMadi = origPosit = 0; mBarScale = 1.0f; nowMadi = -1; // TODO 플레이노트 초기화(시간, 키 수 등) bMiss = false; bAuto = true; mScore = 0; mCombo = 0; // emit reset Event::GameConfigEvent configEvent(*mSong, 1, autoPlay, mStartTime); Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(Event::GameConfigEvent::RESET, &configEvent); }
void XSpriteBatchNode::ResHandle( long lParam ) { XFUNC_START(); do { const char* szPath = NULL; XResType* pResType = XResLoader::Instance().GetResByID(lParam); if (!pResType) { break; } CCTexture2D* pTex; if (XResType::ePng == pResType->GetType()) { XResPNG* pRes = dynamic_cast<XResPNG*>(pResType); if (!pRes) { break; } XTexture2D* &pCTex = pRes->m_pTexture; if (!pCTex) { break; } if (pRes->m_pImage) { bool bRes = XTextureCache::Instance().InitTexture(pRes->m_szPath, pRes->m_pImage, pCTex); if (!bRes) { break; } // Òѽ«Í¼Æ¬×ª»¯ÎªÌùͼ£¬É¾³ýͼƬ£¬ÊÍ·ÅÄÚ´æ¡£ delete pRes->m_pImage; pRes->m_pImage = NULL; } pTex = pCTex; szPath = pRes->m_szPath; } else { break; //// ѹËõÎÆÀí //XResCompressed* pRes = dynamic_cast<XResCompressed*>(pResType); //if (!pRes) //{ // break; //} //XTexture2D* &pXTex = pRes->m_pTexture; //if (!pXTex) //{ // break; //} //if (!pRes->m_byTexInited) //{ // bool bRes = XTextureCache::Instance().InitTexture(pRes->m_szPath, pXTex, pRes->m_pTexAlpha); // if (!bRes) // { // break; // } // pRes->m_byTexInited = 0xFF; //} //if (pRes->m_pTexAlpha) //{ // m_pTexKtxAlpha = pRes->m_pTexAlpha; // m_pTexKtxAlpha->retain(); // m_pShaderKTX = XShader::GetShader(this, XShader::eETC); //} //pTex = pXTex; //szPath = pRes->m_szPath; } if(_byAntiAlias) pTex->setAntiAliasTexParameters(); else pTex->setAliasTexParameters(); // ´´½¨¾«Áé XSBNChildInfo* pHead = _stChildren._pHead; XSBNChildInfo* pUsed; int nPos = 0; while(pHead) { pUsed = pHead; pHead = pHead->_pNext; XSprite* pSprite = XSprite::createWithTexture(pTex, pUsed->stRect, _byAntiAlias); if (!pSprite) { CCLOG("XSprite::createWithTexture failed!"); continue; } if (pUsed->byFlipX) { pSprite->setFlipX(true); } pSprite->setAnchorPoint(ccp(0.f, 0.f)); pSprite->setPosition(ccp(pUsed->fPosX, pUsed->fPosY)); pSprite->setScaleY(_fChildrenScaleY); CCSpriteBatchNode::addChild(pSprite, pSprite->getZOrder(), nPos++); XMP_RELEASE(XSBNChildInfo, pUsed); } _stChildren.Clear(); _bResLoaded = true; if(_bCleanUpThread) cleanup(); //static unsigned long dwRes = 0; //CCLOG("XSpriteBatchNode::ResHandle [%d] %s", dwRes++, szPath); return; } while (0); _bResLoaded = false; OnRelease(); CCLOG("[ERROR]XSpriteBatchNode::ResHandle load res failed."); XFUNC_END(); }
bool CCMeshImage::initWithImageInfo(CCMeshImageInfo* info) { bool error_found = false; for (std::vector<CCMeshSliceInfo>::iterator slice = info->slices.begin(); slice != info->slices.end(); slice++) { CCTextureAtlas* atlas = NULL; CCTextureAtlasMap::iterator atlas_it = m_atlas_map.find(slice->texture_id); if (atlas_it == m_atlas_map.end()) { std::string tex_filename = info->id2tex[slice->texture_id]; CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage(tex_filename.c_str()); if (!texture) { error_found = true; break; } texture->setAliasTexParameters(); atlas = new CCTextureAtlas(); atlas->initWithTexture(texture, 15); m_atlas_map[slice->texture_id] = atlas; } else { atlas = atlas_it->second; } if (atlas->getTotalQuads() == atlas->getCapacity()) { atlas->resizeCapacity(atlas->getCapacity() * 1.5f + 1); } CCSize tex_size = atlas->getTexture()->getContentSize(); float left = slice->texture_pos.x / tex_size.width; float right = left + slice->size.width / tex_size.width; float top = slice->texture_pos.y / tex_size.height; float bottom = top + slice->size.height / tex_size.height; float ele_pos_left = slice->image_pos.x / info->scale_ratio; float ele_pos_top = (slice->image_pos.y + slice->size.height) / info->scale_ratio; float ele_width = slice->size.width / info->scale_ratio; float ele_height = slice->size.height / info->scale_ratio; ccV3F_C4B_T2F_Quad quad; if (slice->rotated) { quad.bl.texCoords.u = left; quad.bl.texCoords.v = top; quad.br.texCoords.u = left; quad.br.texCoords.v = bottom; quad.tl.texCoords.u = right; quad.tl.texCoords.v = top; quad.tr.texCoords.u = right; quad.tr.texCoords.v = bottom; } else { quad.bl.texCoords.u = left; quad.bl.texCoords.v = bottom; quad.br.texCoords.u = right; quad.br.texCoords.v = bottom; quad.tl.texCoords.u = left; quad.tl.texCoords.v = top; quad.tr.texCoords.u = right; quad.tr.texCoords.v = top; } quad.bl.vertices.x = (float) (ele_pos_left); quad.bl.vertices.y = ele_pos_top - ele_height; quad.bl.vertices.z = 0.0f; quad.br.vertices.x = (float)(ele_pos_left + ele_width); quad.br.vertices.y = ele_pos_top - ele_height; quad.br.vertices.z = 0.0f; quad.tl.vertices.x = (float)(ele_pos_left); quad.tl.vertices.y = ele_pos_top; quad.tl.vertices.z = 0.0f; quad.tr.vertices.x = (float)(ele_pos_left + ele_width); quad.tr.vertices.y = ele_pos_top; quad.tr.vertices.z = 0.0f; atlas->updateQuad(&quad, atlas->getTotalQuads()); } if (!error_found) { m_name = new CCString(info->name); setAnchorPoint(ccp(0, 0)); setContentSize(CCSize(info->size.width / info->scale_ratio, info->size.height / info->scale_ratio)); // shader stuff setShaderProgram(CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTexture_uColor)); //m_nUniformColor = glGetUniformLocation( getShaderProgram()->getProgram(), "u_color"); } return !error_found; }