- allow for multiple preview / loading / hud textures for different resolutions

This commit is contained in:
Mark Vejvoda 2013-02-11 23:43:30 +00:00
parent 41671ac997
commit 5fd8b121a9
7 changed files with 75 additions and 15 deletions

View File

@ -528,9 +528,55 @@ string Game::extractFactionLogoFile(bool &loadingImageUsed, string factionName,
endPathWithSlash(path);
vector<string> loadScreenList;
findAll(path + factionLogoFilter, loadScreenList, false, false);
string logoFullPathFilter = path + factionLogoFilter;
findAll(logoFullPathFilter, loadScreenList, false, false);
if(loadScreenList.empty() == false) {
string factionLogo = path + loadScreenList[0];
int bestLogoIndex = 0;
if(loadScreenList.size() > 1 && EndsWith(factionLogoFilter, ".xml") == false) {
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\nLooking for best logo from a list of: " MG_SIZE_T_SPECIFIER " using filter: [%s]\n",loadScreenList.size(),logoFullPathFilter.c_str());
int bestMinWidthDiff = INT_MAX;
int bestMinHeightDiff = INT_MAX;
// Now find the best texture for our screen
// Texture2D *result = preloadTexture(logoFilename);
for(unsigned int logoIndex = 0; logoIndex < loadScreenList.size(); ++logoIndex) {
string factionLogo = path + loadScreenList[logoIndex];
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] looking for loading screen '%s'\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,factionLogo.c_str());
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Looking for best logo: %u [%s]\n",logoIndex,factionLogo.c_str());
if(fileExists(factionLogo) == true) {
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] found loading screen '%s'\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,factionLogo.c_str());
Texture2D *checkLogo = Renderer::preloadTexture(factionLogo);
if(checkLogo != NULL) {
const Metrics &metrics= Metrics::getInstance();
int minWidthDifference = abs(metrics.getScreenW() - checkLogo->getPixmapConst()->getW());
int minHeightDifference = abs(metrics.getScreenH() - checkLogo->getPixmapConst()->getH());
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Logo info: %d x %d (%d,%d)\n",checkLogo->getPixmapConst()->getW(),checkLogo->getPixmapConst()->getH(),minWidthDifference,minHeightDifference);
if(minWidthDifference < bestMinWidthDiff) {
bestMinWidthDiff = minWidthDifference;
bestLogoIndex = logoIndex;
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("#1 New best logo is [%s]\n",factionLogo.c_str());
}
else if(minWidthDifference == bestMinWidthDiff &&
minHeightDifference < bestMinHeightDiff) {
bestMinHeightDiff = minHeightDifference;
bestLogoIndex = logoIndex;
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("#2 New best logo is [%s]\n",factionLogo.c_str());
}
}
}
}
}
string factionLogo = path + loadScreenList[bestLogoIndex];
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] looking for loading screen '%s'\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,factionLogo.c_str());
if(fileExists(factionLogo) == true) {
@ -698,7 +744,7 @@ void Game::loadHudTexture(const GameSettings *settings)
vector<string> hudList;
string path= currentPath + techName + "/" + "factions" + "/" + factionName;
endPathWithSlash(path);
findAll(path + "hud.*", hudList, false, false);
findAll(path + GameConstants::HUD_SCREEN_FILE_FILTER, hudList, false, false);
if(hudList.empty() == false){
for(unsigned int hudIdx = 0; hudFound == false && hudIdx < hudList.size(); ++hudIdx) {
string hudImageFileName= path + hudList[hudIdx];
@ -800,7 +846,7 @@ vector<Texture2D *> Game::processTech(string techName) {
"",
techName,
NULL,
"preview_screen.*");
GameConstants::PREVIEW_SCREEN_FILE_FILTER);
if(factionLogo == "") {
factionLogo = Game::extractFactionLogoFile(
@ -809,7 +855,7 @@ vector<Texture2D *> Game::processTech(string techName) {
"",
techName,
NULL,
"loading_screen.*");
GameConstants::LOADING_SCREEN_FILE_FILTER);
}
if(factionLogo != "") {
Texture2D *texture = Renderer::preloadTexture(factionLogo);

View File

@ -277,11 +277,11 @@ public:
void endPerformanceTimer();
Vec2i getPerformanceTimerResults();
static Texture2D * findFactionLogoTexture(const GameSettings *settings, Logger *logger=NULL,string factionLogoFilter="loading_screen.*", bool useTechDefaultIfFilterNotFound=true);
static string findFactionLogoFile(const GameSettings *settings, Logger *logger=NULL, string factionLogoFilter="loading_screen.*");
static string extractScenarioLogoFile(const GameSettings *settings, string &result, bool &loadingImageUsed, Logger *logger=NULL, string factionLogoFilter="loading_screen.*");
static string extractFactionLogoFile(bool &loadingImageUsed, string factionName, string scenarioDir, string techName, Logger *logger=NULL, string factionLogoFilter="loading_screen.*");
static string extractTechLogoFile(string scenarioDir, string techName, bool &loadingImageUsed, Logger *logger=NULL,string factionLogoFilter="loading_screen.*");
static Texture2D * findFactionLogoTexture(const GameSettings *settings, Logger *logger=NULL,string factionLogoFilter=GameConstants::LOADING_SCREEN_FILE_FILTER, bool useTechDefaultIfFilterNotFound=true);
static string findFactionLogoFile(const GameSettings *settings, Logger *logger=NULL, string factionLogoFilter=GameConstants::LOADING_SCREEN_FILE_FILTER);
static string extractScenarioLogoFile(const GameSettings *settings, string &result, bool &loadingImageUsed, Logger *logger=NULL, string factionLogoFilter=GameConstants::LOADING_SCREEN_FILE_FILTER);
static string extractFactionLogoFile(bool &loadingImageUsed, string factionName, string scenarioDir, string techName, Logger *logger=NULL, string factionLogoFilter=GameConstants::LOADING_SCREEN_FILE_FILTER);
static string extractTechLogoFile(string scenarioDir, string techName, bool &loadingImageUsed, Logger *logger=NULL,string factionLogoFilter=GameConstants::LOADING_SCREEN_FILE_FILTER);
void loadHudTexture(const GameSettings *settings);

View File

@ -174,6 +174,13 @@ public:
static const float megaMultiplier;
//
static const char * LOADING_SCREEN_FILE;
static const char * LOADING_SCREEN_FILE_FILTER;
static const char * PREVIEW_SCREEN_FILE;
static const char * PREVIEW_SCREEN_FILE_FILTER;
static const char * HUD_SCREEN_FILE;
static const char * HUD_SCREEN_FILE_FILTER;
};
enum PathType {

View File

@ -56,6 +56,13 @@ const char *GameConstants::factionPreviewTextureCacheLookupKey = "factionPrevie
const char *GameConstants::characterMenuScreenPositionListCacheLookupKey = "characterMenuScreenPositionListCache";
const char *GameConstants::application_name = "MegaGlest";
const char * GameConstants::LOADING_SCREEN_FILE = "loading_screen";
const char * GameConstants::LOADING_SCREEN_FILE_FILTER = "loading_screen*.*";
const char * GameConstants::PREVIEW_SCREEN_FILE = "preview_screen";
const char * GameConstants::PREVIEW_SCREEN_FILE_FILTER = "preview_screen*.*";
const char * GameConstants::HUD_SCREEN_FILE = "hud";
const char * GameConstants::HUD_SCREEN_FILE_FILTER = "hud*.*";
const char *GameConstants::pathCacheLookupKey = "pathCache_";
const char *GameConstants::path_data_CacheLookupKey = "data";

View File

@ -2058,9 +2058,9 @@ void runTechValidationForPath(string techPath, string techName,
replaceAll(file, "//", "/");
replaceAll(file, "\\\\", "\\");
if( file.find("loading_screen") != string::npos ||
file.find("preview_screen") != string::npos ||
file.find("hud") != string::npos) {
if( file.find(GameConstants::LOADING_SCREEN_FILE) != string::npos ||
file.find(GameConstants::PREVIEW_SCREEN_FILE) != string::npos ||
file.find(GameConstants::HUD_SCREEN_FILE) != string::npos) {
continue;
}
if(file.find("/factions/") != string::npos) {

View File

@ -4514,7 +4514,7 @@ void MenuStateConnectedGame::initFactionPreview(const GameSettings *gameSettings
}
if(factionVideo == NULL) {
string factionLogo = Game::findFactionLogoFile(gameSettings, NULL,"preview_screen.*");
string factionLogo = Game::findFactionLogoFile(gameSettings, NULL,GameConstants::PREVIEW_SCREEN_FILE_FILTER);
if(factionLogo == "") {
factionLogo = Game::findFactionLogoFile(gameSettings, NULL);
}

View File

@ -2798,7 +2798,7 @@ void MenuStateCustomGame::initFactionPreview(const GameSettings *gameSettings) {
}
if(factionVideo == NULL) {
string factionLogo = Game::findFactionLogoFile(gameSettings, NULL,"preview_screen.*");
string factionLogo = Game::findFactionLogoFile(gameSettings, NULL,GameConstants::PREVIEW_SCREEN_FILE_FILTER);
if(factionLogo == "") {
factionLogo = Game::findFactionLogoFile(gameSettings, NULL);
}