void cRawParser::ParseVariables(cXmlNode& node, bool command, const wxString& path) { wxString inc = wxT(""); ParseStringOption(inc, node, wxT("include"), NULL); if (!inc.IsEmpty()) { wxFSFileName src; if (path.IsEmpty()) { src = m_input.GetPath(); } else { src = wxFSFileName(path, true); } wxFSFileName filename = inc; if (!filename.IsAbsolute()) filename.MakeAbsolute(src.GetPath(wxPATH_GET_SEPARATOR | wxPATH_GET_VOLUME)); LoadVariables(filename, command, (m_bake.Index(wxT(RAWXML_VARIABLES))!=wxNOT_FOUND)?&node:NULL ); if (m_mode == MODE_BAKE) { if (m_bake.Index(wxT(RAWXML_VARIABLES)) == wxNOT_FOUND) { wxString newfile; if (m_bake.Index(wxT(RAWBAKE_ABSOLUTE)) == wxNOT_FOUND) { filename.MakeRelativeTo(m_bakeroot.GetPath(wxPATH_GET_SEPARATOR | wxPATH_GET_VOLUME)); } newfile = filename.GetFullPath(); node.delProp("include"); node.addProp("include", newfile.utf8_str()); } else { node.delProp("include"); } } } cXmlNode child(node.children()); while (child) { DO_CONDITION_COMMENT(child); if (child(RAWXML_SET)) { ParseSet(child, command); } else if (child(RAWXML_UNSET)) { ParseUnset(child, command); } else if (child(RAWXML_VARIABLES)) { ParseVariables(child, command, path); } else if (child.is(XML_ELEMENT_NODE)) { throw MakeNodeException<RCT3Exception>(wxString::Format(_("Unknown tag '%s' in variables tag"), child.wxname().c_str()), child); } child.go_next(); } }
void MusicWheel::Load( CString sType ) { LOG->Trace( "MusicWheel::Load('%s')", sType.c_str() ); LoadFromMetrics( sType ); LoadVariables(); FOREACH( MusicWheelItem*, m_MusicWheelItems, i ) SAFE_DELETE( *i ); m_MusicWheelItems.clear(); for( int i=0; i<NUM_WHEEL_ITEMS; i++ ) m_MusicWheelItems.push_back( new MusicWheelItem ); LOG->Trace( "MusicWheel::Load('%s')", sType.c_str() ); if (GAMESTATE->m_pCurSong != NULL) LOG->Trace( "Current Song: %s", GAMESTATE->m_pCurSong->GetSongDir().c_str() ); else LOG->Trace( "Current Song: NULL" ); SONGMAN->UpdateRankingCourses(); /* // for debugging. // Whatever Screen uses MusicWheel should set the Style if it needs to be set. if( GAMESTATE->m_CurStyle == NULL ) GAMESTATE->m_CurStyle = GAMEMAN->STYLE_DANCE_SINGLE; */ /* We play a lot of this one, so precache it. */ m_soundChangeSort.Load( THEME->GetPathS(sType,"sort") ); m_soundExpand.Load( THEME->GetPathS(sType,"expand"), true ); m_WheelState = STATE_SELECTING_MUSIC; if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() ) { // make the preferred group the group of the last song played. // if( GAMESTATE->m_sPreferredSongGroup==GROUP_ALL_MUSIC && !PREFSMAN->m_bPickExtraStage ) // { // ASSERT(GAMESTATE->m_pCurSong); // GAMESTATE->m_sPreferredSongGroup = GAMESTATE->m_pCurSong->m_sGroupName; // } Song* pSong; Steps* pSteps; PlayerOptions po; SongOptions so; SONGMAN->GetExtraStageInfo( GAMESTATE->IsExtraStage2(), GAMESTATE->GetCurrentStyle(), pSong, pSteps, po, so ); GAMESTATE->m_pCurSong.Set( pSong ); GAMESTATE->m_pPreferredSong = pSong; FOREACH_HumanPlayer( p ) { GAMESTATE->m_pCurSteps[p].Set( pSteps ); GAMESTATE->m_pPlayerState[p]->m_PlayerOptions = po; GAMESTATE->m_PreferredDifficulty[p].Set( pSteps->GetDifficulty() ); } GAMESTATE->m_SongOptions = so; }