forked from speed-dreams/speed-dreams-code
Re #138 : Fixed temporary Ruin'dows / MSWC port workaround for r2595 commit
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@2604 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 4d83cae523702258c781f6f8c67fb2fafba83d0d Former-commit-id: 2fa177c3fbfdb4b663fa934ae082d5a1477c03a2
This commit is contained in:
parent
7fcc493b58
commit
fe9666aa23
3 changed files with 12 additions and 180 deletions
|
@ -37,13 +37,12 @@
|
||||||
// Some consts.
|
// Some consts.
|
||||||
const char* rmdStdSkinName = "standard";
|
const char* rmdStdSkinName = "standard";
|
||||||
|
|
||||||
// Temporary workaround for MS shit : moved to driverselect.cpp
|
static const char* pszSkinFileExt = ".png";
|
||||||
// static const char* pszSkinFileExt = ".png";
|
static const char* pszPreviewFileSuffix = "-preview.png";
|
||||||
// static const char* pszPreviewFileSuffix = "-preview.png";
|
|
||||||
|
|
||||||
// static const char* apszExcludedSkinFileSuffixes[] =
|
static const char* apszExcludedSkinFileSuffixes[] =
|
||||||
// { "-rpm.png", "-speed.png", pszPreviewFileSuffix };
|
{ "-rpm.png", "-speed.png", pszPreviewFileSuffix };
|
||||||
// static const int nExcludedSkinFileSuffixes = sizeof(apszExcludedSkinFileSuffixes) / sizeof(char*);
|
static const int nExcludedSkinFileSuffixes = sizeof(apszExcludedSkinFileSuffixes) / sizeof(char*);
|
||||||
|
|
||||||
|
|
||||||
int rmdDriverMatchesFilters(const trmdDrvElt *drv, const char* carCat, const char* drvTyp,
|
int rmdDriverMatchesFilters(const trmdDrvElt *drv, const char* carCat, const char* drvTyp,
|
||||||
|
@ -58,7 +57,7 @@ void rmdGetDriverType(const char* moduleName, char* driverType, size_t maxSize)
|
||||||
char* pos;
|
char* pos;
|
||||||
|
|
||||||
strncpy(driverType, moduleName, maxSize);
|
strncpy(driverType, moduleName, maxSize);
|
||||||
driverType[maxSize-1] = 0; // Guarantee 0 termination
|
driverType[maxSize-1] = 0; // Ensure 0 termination
|
||||||
|
|
||||||
// Parse module name for last '_' char :
|
// Parse module name for last '_' char :
|
||||||
// assumed to be the separator between type and instance name for ubiquitous robots (ex: simplix)
|
// assumed to be the separator between type and instance name for ubiquitous robots (ex: simplix)
|
||||||
|
@ -78,8 +77,6 @@ void rmdGetDriverType(const char* moduleName, char* driverType, size_t maxSize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Temporary workaround for MS shit : moved to driverselect.cpp
|
|
||||||
#if 0
|
|
||||||
void rmdGetCarSkinsInFolder(const trmdDrvElt *pDriver, const char* pszFolderPath,
|
void rmdGetCarSkinsInFolder(const trmdDrvElt *pDriver, const char* pszFolderPath,
|
||||||
std::vector<std::string>& lstSkinNames,
|
std::vector<std::string>& lstSkinNames,
|
||||||
std::vector<std::string>& lstPreviewFiles)
|
std::vector<std::string>& lstPreviewFiles)
|
||||||
|
@ -233,4 +230,3 @@ void rmdGetCarSkinsInSearchPath(const trmdDrvElt *pDriver,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
|
@ -53,13 +53,13 @@ extern void rmdGetDriverType(const char* moduleName, char* driverType, size_t ma
|
||||||
extern int rmdDriverMatchesFilters(const trmdDrvElt *drv, const char* carCat, const char* drvTyp,
|
extern int rmdDriverMatchesFilters(const trmdDrvElt *drv, const char* carCat, const char* drvTyp,
|
||||||
const char* anyCarCat, const char* anyDrvTyp);
|
const char* anyCarCat, const char* anyDrvTyp);
|
||||||
|
|
||||||
/* extern void rmdGetCarSkinsInFolder(const trmdDrvElt *pDriver, const char* pszFolderPath, */
|
extern void rmdGetCarSkinsInFolder(const trmdDrvElt *pDriver, const char* pszFolderPath,
|
||||||
/* std::vector<std::string>& lstSkinNames, */
|
std::vector<std::string>& lstSkinNames,
|
||||||
/* std::vector<std::string>& lstPreviewFiles); */
|
std::vector<std::string>& lstPreviewFiles);
|
||||||
|
|
||||||
/* extern void rmdGetCarSkinsInSearchPath(const trmdDrvElt *pDriver, */
|
extern void rmdGetCarSkinsInSearchPath(const trmdDrvElt *pDriver,
|
||||||
/* std::vector<std::string>& lstSkinNames, */
|
std::vector<std::string>& lstSkinNames,
|
||||||
/* std::vector<std::string>& lstPreviewFiles); */
|
std::vector<std::string>& lstPreviewFiles);
|
||||||
|
|
||||||
#endif /* __DRIVER_H__ */
|
#endif /* __DRIVER_H__ */
|
||||||
|
|
||||||
|
|
|
@ -92,170 +92,6 @@ static size_t CurSkinIndex = 0;
|
||||||
GF_TAILQ_HEAD(DriverListHead, trmdDrvElt);
|
GF_TAILQ_HEAD(DriverListHead, trmdDrvElt);
|
||||||
static tDriverListHead DriverList;
|
static tDriverListHead DriverList;
|
||||||
|
|
||||||
// Functions and constants that should be in driver.h/cpp (temporary workaround for MS shit)
|
|
||||||
static const char* pszSkinFileExt = ".png";
|
|
||||||
static const char* pszPreviewFileSuffix = "-preview.png";
|
|
||||||
|
|
||||||
static const char* apszExcludedSkinFileSuffixes[] =
|
|
||||||
{ "-rpm.png", "-speed.png", pszPreviewFileSuffix };
|
|
||||||
static const int nExcludedSkinFileSuffixes = sizeof(apszExcludedSkinFileSuffixes) / sizeof(char*);
|
|
||||||
|
|
||||||
void rmdGetCarSkinsInFolder(const trmdDrvElt *pDriver, const char* pszFolderPath,
|
|
||||||
std::vector<std::string>& lstSkinNames,
|
|
||||||
std::vector<std::string>& lstPreviewFiles)
|
|
||||||
{
|
|
||||||
//struct stat st;
|
|
||||||
tFList *pSkinFileList, *pCurSkinFile;
|
|
||||||
|
|
||||||
GfOut("rmdGetCarSkinsInFolder(%s) :\n", pszFolderPath);
|
|
||||||
|
|
||||||
pCurSkinFile = pSkinFileList =
|
|
||||||
GfDirGetListFiltered(pszFolderPath, pDriver->carName, pszSkinFileExt);
|
|
||||||
|
|
||||||
if (pSkinFileList)
|
|
||||||
do
|
|
||||||
{
|
|
||||||
pCurSkinFile = pCurSkinFile->next;
|
|
||||||
|
|
||||||
// Ignore files with an excluded suffix.
|
|
||||||
int nExclSfxInd = 0;
|
|
||||||
for (; nExclSfxInd < nExcludedSkinFileSuffixes; nExclSfxInd++)
|
|
||||||
if (strstr(pCurSkinFile->name, apszExcludedSkinFileSuffixes[nExclSfxInd]))
|
|
||||||
break;
|
|
||||||
if (nExclSfxInd < nExcludedSkinFileSuffixes)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// Extract the skin name from the skin file name.
|
|
||||||
const int nSkinNameLen = // Expecting "<car name>-<skin name>.png"
|
|
||||||
strlen(pCurSkinFile->name) - strlen(pDriver->carName) - 1 - strlen(pszSkinFileExt);
|
|
||||||
std::string strSkinName;
|
|
||||||
if (nSkinNameLen > 0)
|
|
||||||
strSkinName =
|
|
||||||
std::string(pCurSkinFile->name)
|
|
||||||
.substr(strlen(pDriver->carName) + 1, nSkinNameLen);
|
|
||||||
else // Assuming default/standard "<car name>.png"
|
|
||||||
strSkinName = rmdStdSkinName;
|
|
||||||
|
|
||||||
// Ignore skins that are already in the list (path search priority).
|
|
||||||
if (std::find(lstSkinNames.begin(), lstSkinNames.end(), strSkinName)
|
|
||||||
== lstSkinNames.end())
|
|
||||||
{
|
|
||||||
// Add found skin in the list
|
|
||||||
lstSkinNames.push_back(strSkinName);
|
|
||||||
|
|
||||||
// Add associated preview image
|
|
||||||
// (don't check file existence now, will be needed only at display time).
|
|
||||||
std::ostringstream ossPreviewName;
|
|
||||||
ossPreviewName << pszFolderPath << '/' << pDriver->carName;
|
|
||||||
if (strSkinName != rmdStdSkinName)
|
|
||||||
ossPreviewName << '-' << strSkinName;
|
|
||||||
ossPreviewName << pszPreviewFileSuffix;
|
|
||||||
//if (!stat(ossPreviewName.str().c_str(), &st))
|
|
||||||
{
|
|
||||||
lstPreviewFiles.push_back(ossPreviewName.str());
|
|
||||||
GfOut("* found skin=%s, preview=%s\n",
|
|
||||||
strSkinName.c_str(), ossPreviewName.str().c_str());
|
|
||||||
}
|
|
||||||
// else
|
|
||||||
// GfError("Ignoring '%s' skin for %s/%d/%s because preview file %s not found\n",
|
|
||||||
// strSkinName.c_str(), pDriver->moduleName, pDriver->interfaceIndex,
|
|
||||||
// pDriver->carName, ossPreviewName.str().c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
} while (pCurSkinFile != pSkinFileList);
|
|
||||||
|
|
||||||
GfDirFreeList(pSkinFileList, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rmdGetCarSkinsInSearchPath(const trmdDrvElt *pDriver,
|
|
||||||
std::vector<std::string>& lstSkinNames,
|
|
||||||
std::vector<std::string>& lstPreviewFiles)
|
|
||||||
{
|
|
||||||
std::ostringstream ossDirPath;
|
|
||||||
std::string strPreviewName;
|
|
||||||
|
|
||||||
GfOut("rmdGetCarSkinsInSearchPath : module=%s, idx=%d, car=%s ...\n",
|
|
||||||
pDriver->moduleName, pDriver->interfaceIndex, pDriver->carName);
|
|
||||||
|
|
||||||
// Clear the skin and preview lists.
|
|
||||||
lstSkinNames.clear();
|
|
||||||
lstPreviewFiles.clear();
|
|
||||||
|
|
||||||
// Get skins/previews from the directories in the search path
|
|
||||||
// (WARNING: Must be consistent with the search path passed to ssgTexturePath in grcar.cpp,
|
|
||||||
// at least for the car skin file search).
|
|
||||||
ossDirPath.str("");
|
|
||||||
ossDirPath << GetLocalDir() << "drivers/" << pDriver->moduleName
|
|
||||||
<< '/' << pDriver->carName;
|
|
||||||
rmdGetCarSkinsInFolder(pDriver, ossDirPath.str().c_str(),
|
|
||||||
lstSkinNames, lstPreviewFiles);
|
|
||||||
|
|
||||||
ossDirPath.str("");
|
|
||||||
ossDirPath << "drivers/" << pDriver->moduleName
|
|
||||||
<< '/' << pDriver->interfaceIndex << '/' << pDriver->carName;
|
|
||||||
rmdGetCarSkinsInFolder(pDriver, ossDirPath.str().c_str(),
|
|
||||||
lstSkinNames, lstPreviewFiles);
|
|
||||||
|
|
||||||
ossDirPath.str("");
|
|
||||||
ossDirPath << "drivers/" << pDriver->moduleName
|
|
||||||
<< '/' << pDriver->interfaceIndex;
|
|
||||||
rmdGetCarSkinsInFolder(pDriver, ossDirPath.str().c_str(),
|
|
||||||
lstSkinNames, lstPreviewFiles);
|
|
||||||
|
|
||||||
ossDirPath.str("");
|
|
||||||
ossDirPath << "drivers/" << pDriver->moduleName
|
|
||||||
<< '/' << pDriver->carName;
|
|
||||||
rmdGetCarSkinsInFolder(pDriver, ossDirPath.str().c_str(),
|
|
||||||
lstSkinNames, lstPreviewFiles);
|
|
||||||
|
|
||||||
ossDirPath.str("");
|
|
||||||
ossDirPath << "drivers/" << pDriver->moduleName;
|
|
||||||
rmdGetCarSkinsInFolder(pDriver, ossDirPath.str().c_str(),
|
|
||||||
lstSkinNames, lstPreviewFiles);
|
|
||||||
|
|
||||||
ossDirPath.str("");
|
|
||||||
ossDirPath << "cars/" << pDriver->carName;
|
|
||||||
rmdGetCarSkinsInFolder(pDriver, ossDirPath.str().c_str(),
|
|
||||||
lstSkinNames, lstPreviewFiles);
|
|
||||||
|
|
||||||
// // If no skin was found, add the car's standard one, should always be there !
|
|
||||||
// if (lstSkinNames.empty())
|
|
||||||
// {
|
|
||||||
// // Skin.
|
|
||||||
// lstSkinNames.push_back(rmdStdSkinName);
|
|
||||||
|
|
||||||
// // Associated preview image.
|
|
||||||
// std::ostringstream ossPreviewName;
|
|
||||||
// ossPreviewName << "cars/" << pDriver->carName << '/' << pDriver->carName
|
|
||||||
// << pszPreviewFileSuffix;
|
|
||||||
// lstPreviewFiles.push_back(ossPreviewName.str());
|
|
||||||
|
|
||||||
// GfOut("... skin=<%s>, preview=%s\n",
|
|
||||||
// rmdStdSkinName, ossPreviewName.str().c_str());
|
|
||||||
// }
|
|
||||||
|
|
||||||
// If we have at least 1 skin, make sure that if the standard one is inside,
|
|
||||||
// it is the first one.
|
|
||||||
if (!lstSkinNames.empty())
|
|
||||||
{
|
|
||||||
std::vector<std::string>::iterator iterSkin =
|
|
||||||
std::find(lstSkinNames.begin(), lstSkinNames.end(), rmdStdSkinName);
|
|
||||||
if (iterSkin != lstSkinNames.end() && iterSkin != lstSkinNames.begin())
|
|
||||||
{
|
|
||||||
std::vector<std::string>::iterator iterPreview =
|
|
||||||
lstPreviewFiles.begin() + (iterSkin - lstSkinNames.begin());
|
|
||||||
strPreviewName = *iterPreview;
|
|
||||||
lstSkinNames.erase(iterSkin);
|
|
||||||
lstPreviewFiles.erase(iterPreview);
|
|
||||||
|
|
||||||
lstSkinNames.insert(lstSkinNames.begin(), rmdStdSkinName);
|
|
||||||
lstPreviewFiles.insert(lstPreviewFiles.begin(), strPreviewName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Local functions.
|
// Local functions.
|
||||||
static void rmdsCleanup(void);
|
static void rmdsCleanup(void);
|
||||||
static void rmdsFilterDriverScrollList(const char* carCat, const char* driverType);
|
static void rmdsFilterDriverScrollList(const char* carCat, const char* driverType);
|
||||||
|
|
Loading…
Reference in a new issue