📄 util.cpp
字号:
#include "util.h"
#include "CxImage/ximage.h"
wxString gamePath;wxString testPath;wxString cfgPath;wxString bgImagePath;bool useTestPatch = false;bool usePatch = true;bool useLocalFiles = false;bool useELP = false;bool useFLP = false;bool useGLP = false;long langID = -1;
int ssCounter;
float frand()
{
return rand()/(float)RAND_MAX;
}
float randfloat(float lower, float upper)
{
return lower + (upper-lower)*(rand()/(float)RAND_MAX);
}
int randint(int lower, int upper)
{
return lower + (int)((upper+1-lower)*frand());
}
void fixname(std::string &name)
{
for (size_t i=0; i<name.length(); i++) {
if (i>0 && name[i]>='A' && name[i]<='Z' && isalpha(name[i-1])) {
name[i] |= 0x20;
} else if ((i==0 || !isalpha(name[i-1])) && name[i]>='a' && name[i]<='z') {
name[i] &= ~0x20;
}
}
}
void fixnamen(char *name, size_t len)
{
for (size_t i=0; i<len; i++) {
if (i>0 && name[i]>='A' && name[i]<='Z' && isalpha(name[i-1])) {
name[i] |= 0x20;
} else if ((i==0 || !isalpha(name[i-1])) && name[i]>='a' && name[i]<='z') {
name[i] &= ~0x20;
}
}
}
void getGamePath(){ useTestPatch = false; usePatch = true;#ifdef _WIN32 HKEY key; DWORD t, s; LONG l; unsigned char path[1024]; memset(path, 0, 1024); s = 1024; l = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Blizzard Entertainment\\World of Warcraft", 0, KEY_QUERY_VALUE, &key); l = RegQueryValueEx(key, "InstallPath", 0, &t,(LPBYTE)path, &s); RegCloseKey(key); // See if patch.mpq exists in the WoWTest data folder testPath = gamePath = (char*)path; testPath.append("WoWTest\\Data\\"); // Following chunk of code is used to determin if the test patch exists, and if so it flagged the program to use the test patch/ // I've decided its in end-users best interest to leave this off by default. //FILE *stream;
//if((stream = fopen(testpath.fn_str(), "r")) != NULL )
//{ // // wow test data exists -- need to add in some sort of checking to see if its newer data // useTestPatch = true; // fclose(stream); //} //testpath = gamepath; //testpath.append("WoWTest\\Data\\"); gamePath.append("Data\\");#else // linux - not sure what it should be set to for Mac osx gamePath = "/data/"; testPath = "/data/"; #endif}void Screenshot(const wxString fn)
{
wxFileName temp(fn, wxPATH_NATIVE);
unsigned char *pixels;
int screenSize[4];
glReadBuffer(GL_BACK);
glPixelStorei(GL_UNPACK_SWAP_BYTES, false);
glPixelStorei(GL_UNPACK_LSB_FIRST, false);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
// get the width/height of the window
glGetIntegerv(GL_VIEWPORT, screenSize);
// (width*height*bytesPerPixel)
pixels = new unsigned char[screenSize[2]*screenSize[3]*4];
// read in the pixel data
glReadPixels(0, 0, screenSize[2], screenSize[3], GL_BGRA_EXT, GL_UNSIGNED_BYTE, pixels);
// GL_BGR_EXT
CxImage *newImage = new CxImage(0);
newImage->CreateFromArray(pixels, screenSize[2], screenSize[3], 32, (screenSize[2]*4), false);
// Save
if (temp.GetExt() == "tga")
newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_TGA);
//else if (temp.GetExt() == "tif")
// newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_TIF);
else if (temp.GetExt() == "png")
newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_PNG);
//else if (temp.GetExt() == "jp2")
// newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_JP2);
else if (temp.GetExt() == "jpg") {
newImage->SetJpegQuality(100);
newImage->SetJpegScale(100);
newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_JPG);
} else // Save Bitmap format
newImage->Save(fn.fn_str(), CXIMAGE_FORMAT_BMP);
newImage->Destroy();
delete newImage;
// free the memory
delete [] pixels;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -