2002-01-16 10:01:32 +00:00
#include "stdafx.h"
/*
-----------------------------------------------------------------------------
File: ThemeManager.h
Desc: .
Copyright (c) 2001 Chris Danford. All rights reserved.
-----------------------------------------------------------------------------
*/
#include "ThemeManager.h"
ThemeManager * THEME = NULL ; // global object accessable from anywhere in the program
2002-01-18 19:54:38 +00:00
CString ThemeManager :: GetPathTo ( ThemeElement te , CString sThemeName )
{
CString sThemeDir = ThemeNameToThemeDir ( sThemeName );
2002-01-16 10:01:32 +00:00
CString sAssetPath ; // fill this in below
switch ( te )
{
case GRAPHIC_TITLE_MENU_BACKGROUND : sAssetPath = "Graphics \\ title menu background" ; break ;
case GRAPHIC_SELECT_STYLE_BACKGROUND : sAssetPath = "Graphics \\ select style background" ; break ;
case GRAPHIC_SELECT_MUSIC_BACKGROUND : sAssetPath = "Graphics \\ select music background" ; break ;
case GRAPHIC_OPTIONS_BACKGROUND : sAssetPath = "Graphics \\ options background" ; break ;
case GRAPHIC_RESULT_BACKGROUND : sAssetPath = "Graphics \\ result background" ; break ;
case GRAPHIC_SELECT_STYLE_TOP_EDGE : sAssetPath = "Graphics \\ select style top edge" ; break ;
case GRAPHIC_SELECT_MUSIC_TOP_EDGE : sAssetPath = "Graphics \\ select music top edge" ; break ;
case GRAPHIC_GAME_OPTIONS_TOP_EDGE : sAssetPath = "Graphics \\ game options top edge" ; break ;
case GRAPHIC_PLAYER_OPTIONS_TOP_EDGE : sAssetPath = "Graphics \\ player options top edge" ; break ;
case GRAPHIC_MUSIC_OPTIONS_TOP_EDGE : sAssetPath = "Graphics \\ music options top edge" ; break ;
case GRAPHIC_RESULT_TOP_EDGE : sAssetPath = "Graphics \\ result top edge" ; break ;
case GRAPHIC_FALLBACK_BANNER : sAssetPath = "Graphics \\ Fallback Banner" ; break ;
case GRAPHIC_FALLBACK_BACKGROUND : sAssetPath = "Graphics \\ Fallback Background" ; break ;
case GRAPHIC_COLOR_ARROW_GRAY_PART : sAssetPath = "Graphics \\ Color Arrow gray part 2x2" ; break ;
case GRAPHIC_COLOR_ARROW_COLOR_PART : sAssetPath = "Graphics \\ Color Arrow color part" ; break ;
case GRAPHIC_GHOST_ARROW : sAssetPath = "Graphics \\ ghost arrow" ; break ;
case GRAPHIC_HOLD_GHOST_ARROW : sAssetPath = "Graphics \\ hold ghost arrow" ; break ;
case GRAPHIC_GRAY_ARROW : sAssetPath = "Graphics \\ gray arrow" ; break ;
case GRAPHIC_JUDGEMENT : sAssetPath = "Graphics \\ judgement 1x9" ; break ;
case GRAPHIC_MENU_BOTTOM_EDGE : sAssetPath = "Graphics \\ menu bottom edge" ; break ;
case GRAPHIC_SCORE_FRAME : sAssetPath = "Graphics \\ score frame" ; break ;
case GRAPHIC_LIFEMETER_FRAME : sAssetPath = "Graphics \\ Life Meter Frame" ; break ;
case GRAPHIC_LIFEMETER_PILLS : sAssetPath = "Graphics \\ life meter pills 17x1" ; break ;
case GRAPHIC_COMBO : sAssetPath = "Graphics \\ combo" ; break ;
case GRAPHIC_CLOSING_STAR : sAssetPath = "Graphics \\ closing star" ; break ;
case GRAPHIC_OPENING_STAR : sAssetPath = "Graphics \\ opening star" ; break ;
case GRAPHIC_CAUTION : sAssetPath = "Graphics \\ Caution" ; break ;
case GRAPHIC_READY : sAssetPath = "Graphics \\ Ready" ; break ;
case GRAPHIC_HERE_WE_GO : sAssetPath = "Graphics \\ here we go" ; break ;
case GRAPHIC_CLEARED : sAssetPath = "Graphics \\ cleared" ; break ;
case GRAPHIC_FAILED : sAssetPath = "Graphics \\ failed" ; break ;
case GRAPHIC_GRADES : sAssetPath = "Graphics \\ grades 1x8" ; break ;
case GRAPHIC_KEEP_ALIVE : sAssetPath = "Graphics \\ keep alive" ; break ;
case GRAPHIC_DANCER_P1 : sAssetPath = "Graphics \\ dancer p1" ; break ;
case GRAPHIC_DANCER_P2 : sAssetPath = "Graphics \\ dancer p2" ; break ;
case GRAPHIC_PAD_SINGLE : sAssetPath = "Graphics \\ Pad single" ; break ;
case GRAPHIC_PAD_DOUBLE : sAssetPath = "Graphics \\ Pad double" ; break ;
2002-01-21 21:09:06 +00:00
case GRAPHIC_PAD_SOLO : sAssetPath = "Graphics \\ Pad solo" ; break ;
case GRAPHIC_STYLE_ICONS : sAssetPath = "Graphics \\ style icons 1x5" ; break ;
case GRAPHIC_STYLE_EXPLANATIONS : sAssetPath = "Graphics \\ style explanations 1x10" ; break ;
2002-01-16 10:01:32 +00:00
case GRAPHIC_MUSIC_SELECTION_HIGHLIGHT : sAssetPath = "Graphics \\ music selection highlight" ; break ;
case GRAPHIC_STEPS_DESCRIPTION : sAssetPath = "Graphics \\ steps description 1x8" ; break ;
case GRAPHIC_SECTION_BACKGROUND : sAssetPath = "Graphics \\ section background" ; break ;
case GRAPHIC_MUSIC_SORT_ICONS : sAssetPath = "Graphics \\ music sort icons 1x5" ; break ;
case GRAPHIC_MUSIC_STATUS_ICONS : sAssetPath = "Graphics \\ music status icons 1x4" ; break ;
2002-02-02 05:11:12 +00:00
case GRAPHIC_DANGER_TEXT : sAssetPath = "Graphics \\ danger text" ; break ;
2002-01-20 07:51:09 +00:00
case GRAPHIC_DANGER_BACKGROUND : sAssetPath = "Graphics \\ danger background" ; break ;
2002-01-16 10:01:32 +00:00
case SOUND_FAILED : sAssetPath = "Sounds \\ failed" ; break ;
case SOUND_ASSIST : sAssetPath = "Sounds \\ Assist" ; break ;
case SOUND_SELECT : sAssetPath = "Sounds \\ select" ; break ;
case SOUND_SWITCH_STYLE : sAssetPath = "Sounds \\ switch style" ; break ;
case SOUND_SWITCH_MUSIC : sAssetPath = "Sounds \\ switch music" ; break ;
case SOUND_SWITCH_SORT : sAssetPath = "Sounds \\ switch sort" ; break ;
case SOUND_EXPAND : sAssetPath = "Sounds \\ expand" ; break ;
case SOUND_SWITCH_STEPS : sAssetPath = "Sounds \\ switch steps" ; break ;
case SOUND_TITLE_CHANGE : sAssetPath = "Sounds \\ title change" ; break ;
case SOUND_MENU_SWOOSH : sAssetPath = "Sounds \\ menu swoosh" ; break ;
case SOUND_MENU_BACK : sAssetPath = "Sounds \\ menu back" ; break ;
case SOUND_TRAINING_MUSIC : sAssetPath = "Sounds \\ training music" ; break ;
2002-01-21 09:27:34 +00:00
case SOUND_INVALID : sAssetPath = "Sounds \\ invalid" ; break ;
2002-01-16 10:01:32 +00:00
case FONT_OUTLINE : sAssetPath = "Fonts \\ Outline" ; break ;
case FONT_NORMAL : sAssetPath = "Fonts \\ Normal" ; break ;
case FONT_FUTURISTIC : sAssetPath = "Fonts \\ Futuristic" ; break ;
case FONT_BOLD_NUMBERS : sAssetPath = "Fonts \\ Bold Numbers" ; break ;
case FONT_LCD_NUMBERS : sAssetPath = "Fonts \\ LCD Numbers" ; break ;
case FONT_FEET : sAssetPath = "Fonts \\ Feet" ; break ;
case FONT_COMBO_NUMBERS : sAssetPath = "Fonts \\ MAX Numbers" ; break ;
case FONT_SCORE_NUMBERS : sAssetPath = "Fonts \\ Bold Numbers" ; break ;
case ANNOUNCER_ATTRACT : sAssetPath = "Announcer \\ attract" ; break ;
case ANNOUNCER_BAD_COMMENT : sAssetPath = "Announcer \\ bad comment" ; break ;
case ANNOUNCER_CAUTION : sAssetPath = "Announcer \\ caution" ; break ;
case ANNOUNCER_CLEARED : sAssetPath = "Announcer \\ cleared" ; break ;
case ANNOUNCER_FAIL_COMMENT : sAssetPath = "Announcer \\ fail comment" ; break ;
case ANNOUNCER_GAME_OVER : sAssetPath = "Announcer \\ game over" ; break ;
case ANNOUNCER_GOOD_COMMENT : sAssetPath = "Announcer \\ good comment" ; break ;
case ANNOUNCER_HERE_WE_GO : sAssetPath = "Announcer \\ here we go" ; break ;
case ANNOUNCER_MUSIC_COMMENT : sAssetPath = "Announcer \\ music comment" ; break ;
case ANNOUNCER_READY : sAssetPath = "Announcer \\ ready" ; break ;
case ANNOUNCER_READY_LAST : sAssetPath = "Announcer \\ ready last" ; break ;
case ANNOUNCER_RESULT_AAA : sAssetPath = "Announcer \\ result aaa" ; break ;
case ANNOUNCER_RESULT_AA : sAssetPath = "Announcer \\ result aa" ; break ;
case ANNOUNCER_RESULT_A : sAssetPath = "Announcer \\ result a" ; break ;
case ANNOUNCER_RESULT_B : sAssetPath = "Announcer \\ result b" ; break ;
case ANNOUNCER_RESULT_C : sAssetPath = "Announcer \\ result c" ; break ;
case ANNOUNCER_RESULT_D : sAssetPath = "Announcer \\ result d" ; break ;
case ANNOUNCER_RESULT_E : sAssetPath = "Announcer \\ result e" ; break ;
case ANNOUNCER_TITLE : sAssetPath = "Announcer \\ title" ; break ;
default :
RageError ( ssprintf ( "Unhandled theme element %d" , te ) );
}
CString sAssetDir , sAssetFileName , sThrowAway ;
splitrelpath ( sAssetPath , sAssetDir , sAssetFileName , sThrowAway );
CStringArray arrayPossibleElementFileNames ; // fill this with the possible files
///////////////////////////////////////
// see if the current theme implements this element
///////////////////////////////////////
if ( sAssetDir == "Graphics \\ " )
{
2002-01-28 21:24:17 +00:00
GetDirListing ( sThemeDir + sAssetDir + sAssetFileName + "*.sprite" , arrayPossibleElementFileNames );
GetDirListing ( sThemeDir + sAssetDir + sAssetFileName + "*.png" , arrayPossibleElementFileNames );
GetDirListing ( sThemeDir + sAssetDir + sAssetFileName + "*.jpg" , arrayPossibleElementFileNames );
GetDirListing ( sThemeDir + sAssetDir + sAssetFileName + "*.bmp" , arrayPossibleElementFileNames );
2002-01-16 10:01:32 +00:00
}
else if ( sAssetDir == "Sounds \\ " )
{
2002-01-18 19:54:38 +00:00
GetDirListing ( sThemeDir + sAssetDir + sAssetFileName + ".set" , arrayPossibleElementFileNames );
GetDirListing ( sThemeDir + sAssetDir + sAssetFileName + ".mp3" , arrayPossibleElementFileNames );
GetDirListing ( sThemeDir + sAssetDir + sAssetFileName + ".wav" , arrayPossibleElementFileNames );
2002-01-16 10:01:32 +00:00
}
else if ( sAssetDir == "Fonts \\ " )
{
2002-01-18 19:54:38 +00:00
GetDirListing ( sThemeDir + sAssetDir + sAssetFileName + ".font" , arrayPossibleElementFileNames );
2002-01-16 10:01:32 +00:00
}
else if ( sAssetDir == "Announcer \\ " )
{
// return the directory, and let the SoundSet discover all the samples in that directory
2002-01-18 19:54:38 +00:00
if ( DoesFileExist ( sThemeDir + sAssetDir + sAssetFileName ) )
return sThemeDir + sAssetDir + sAssetFileName ;
2002-01-16 10:01:32 +00:00
}
else
{
RageError ( ssprintf ( "Unknown theme asset dir '%s'." , sAssetDir ) );
}
if ( arrayPossibleElementFileNames . GetSize () > 0 )
2002-01-18 19:54:38 +00:00
return sThemeDir + sAssetDir + arrayPossibleElementFileNames [ 0 ];
2002-01-16 10:01:32 +00:00
///////////////////////////////////////
// the current theme does not implement this element. Fall back to the default path.
///////////////////////////////////////
if ( sAssetDir == "Graphics \\ " )
{
2002-01-28 21:24:17 +00:00
GetDirListing ( DEFAULT_THEME_DIR + sAssetDir + sAssetFileName + "*.sprite" , arrayPossibleElementFileNames );
GetDirListing ( DEFAULT_THEME_DIR + sAssetDir + sAssetFileName + "*.png" , arrayPossibleElementFileNames );
GetDirListing ( DEFAULT_THEME_DIR + sAssetDir + sAssetFileName + "*.jpg" , arrayPossibleElementFileNames );
GetDirListing ( DEFAULT_THEME_DIR + sAssetDir + sAssetFileName + "*.bmp" , arrayPossibleElementFileNames );
2002-01-16 10:01:32 +00:00
}
else if ( sAssetDir == "Sounds \\ " )
{
GetDirListing ( DEFAULT_THEME_DIR + sAssetDir + sAssetFileName + ".set" , arrayPossibleElementFileNames );
GetDirListing ( DEFAULT_THEME_DIR + sAssetDir + sAssetFileName + ".mp3" , arrayPossibleElementFileNames );
GetDirListing ( DEFAULT_THEME_DIR + sAssetDir + sAssetFileName + ".wav" , arrayPossibleElementFileNames );
}
else if ( sAssetDir == "Fonts \\ " )
{
GetDirListing ( DEFAULT_THEME_DIR + sAssetDir + sAssetFileName + ".font" , arrayPossibleElementFileNames );
}
else if ( sAssetDir == "Announcer \\ " )
{
// return the directory, and let the SoundSet discover all the samples in that directory
if ( DoesFileExist ( DEFAULT_THEME_DIR + sAssetDir + sAssetFileName ) )
return DEFAULT_THEME_DIR + sAssetDir + sAssetFileName ;
}
else
{
RageError ( ssprintf ( "Unknown theme asset dir '%s'." , sAssetDir ) );
}
if ( arrayPossibleElementFileNames . GetSize () > 0 )
return DEFAULT_THEME_DIR + sAssetDir + arrayPossibleElementFileNames [ 0 ];
RageError ( ssprintf ( "The theme element '%s' does not exist in the current theme directory or the default theme directory." , sAssetDir + " \\ " + sAssetFileName ) );
return "" ;
}