Commit 5f0c0cdf authored by nanahira's avatar nanahira Committed by GitHub

Update image_manager.cpp

parent d727eacf
#include "image_manager.h" #include "image_manager.h"
#include "game.h" #include "game.h"
#ifndef _WIN32
#include <dirent.h>
#endif
namespace ygo { namespace ygo {
ImageManager imageManager; ImageManager imageManager;
bool ImageManager::Initial() { bool ImageManager::Initial() {
#ifdef _WIN32
RefreshRandomImageList(); RefreshRandomImageList();
#endif
#ifdef _WIN32
tCover[0] = GetRandomImage(TEXTURE_COVER_S); tCover[0] = GetRandomImage(TEXTURE_COVER_S);
if(!tCover[0]) if(!tCover[0])
tCover[0] = driver->getTexture("textures/cover.jpg"); tCover[0] = driver->getTexture("textures/cover.jpg");
...@@ -19,24 +19,15 @@ bool ImageManager::Initial() { ...@@ -19,24 +19,15 @@ bool ImageManager::Initial() {
tCover[1] = driver->getTexture("textures/cover2.jpg"); tCover[1] = driver->getTexture("textures/cover2.jpg");
if(!tCover[1]) if(!tCover[1])
tCover[1] = GetRandomImage(TEXTURE_COVER_S); tCover[1] = GetRandomImage(TEXTURE_COVER_S);
#else
tCover[0] = driver->getTexture("textures/cover.jpg");
tCover[1] = driver->getTexture("textures/cover2.jpg");
#endif
if(!tCover[1]) if(!tCover[1])
tCover[1] = tCover[0]; tCover[1] = tCover[0];
tUnknown = driver->getTexture("textures/unknown.jpg"); tUnknown = driver->getTexture("textures/unknown.jpg");
#ifdef _WIN32
tAct = GetRandomImage(TEXTURE_ACTIVATE); tAct = GetRandomImage(TEXTURE_ACTIVATE);
tAttack = GetRandomImage(TEXTURE_ATTACK); tAttack = GetRandomImage(TEXTURE_ATTACK);
if(!tAct) if(!tAct)
tAct = driver->getTexture("textures/act.png"); tAct = driver->getTexture("textures/act.png");
if(!tAttack) if(!tAttack)
tAttack = driver->getTexture("textures/attack.png"); tAttack = driver->getTexture("textures/attack.png");
#else
tAct = driver->getTexture("textures/act.png");
tAttack = driver->getTexture("textures/attack.png");
#endif
tChain = driver->getTexture("textures/chain.png"); tChain = driver->getTexture("textures/chain.png");
tNegated = driver->getTexture("textures/negated.png"); tNegated = driver->getTexture("textures/negated.png");
tNumber = driver->getTexture("textures/number.png"); tNumber = driver->getTexture("textures/number.png");
...@@ -51,7 +42,6 @@ bool ImageManager::Initial() { ...@@ -51,7 +42,6 @@ bool ImageManager::Initial() {
tHand[0] = driver->getTexture("textures/f1.jpg"); tHand[0] = driver->getTexture("textures/f1.jpg");
tHand[1] = driver->getTexture("textures/f2.jpg"); tHand[1] = driver->getTexture("textures/f2.jpg");
tHand[2] = driver->getTexture("textures/f3.jpg"); tHand[2] = driver->getTexture("textures/f3.jpg");
#ifdef _WIN32
tBackGround = GetRandomImage(TEXTURE_DUEL); tBackGround = GetRandomImage(TEXTURE_DUEL);
if(!tBackGround) if(!tBackGround)
tBackGround = driver->getTexture("textures/bg.jpg"); tBackGround = driver->getTexture("textures/bg.jpg");
...@@ -71,24 +61,12 @@ bool ImageManager::Initial() { ...@@ -71,24 +61,12 @@ bool ImageManager::Initial() {
tBackGround_deck = GetRandomImage(TEXTURE_DUEL); tBackGround_deck = GetRandomImage(TEXTURE_DUEL);
if(!tBackGround_deck) if(!tBackGround_deck)
tBackGround_deck = tBackGround; tBackGround_deck = tBackGround;
#else
tBackGround = driver->getTexture("textures/bg.jpg");
if(!tBackGround)
tBackGround = driver->getTexture("textures/bg_duel.jpg");
tBackGround_menu = driver->getTexture("textures/bg_menu.jpg");
if(!tBackGround_menu)
tBackGround_menu = tBackGround;
tBackGround_deck = driver->getTexture("textures/bg_deck.jpg");
if(!tBackGround_deck)
tBackGround_deck = tBackGround;
#endif
tField[0] = driver->getTexture("textures/field2.png"); tField[0] = driver->getTexture("textures/field2.png");
tFieldTransparent[0] = driver->getTexture("textures/field-transparent2.png"); tFieldTransparent[0] = driver->getTexture("textures/field-transparent2.png");
tField[1] = driver->getTexture("textures/field3.png"); tField[1] = driver->getTexture("textures/field3.png");
tFieldTransparent[1] = driver->getTexture("textures/field-transparent3.png"); tFieldTransparent[1] = driver->getTexture("textures/field-transparent3.png");
return true; return true;
} }
#ifdef _WIN32
irr::video::ITexture* ImageManager::GetRandomImage(int image_type) { irr::video::ITexture* ImageManager::GetRandomImage(int image_type) {
int count = ImageList[image_type].size(); int count = ImageList[image_type].size();
if(count <= 0) if(count <= 0)
...@@ -102,44 +80,51 @@ irr::video::ITexture* ImageManager::GetRandomImage(int image_type) { ...@@ -102,44 +80,51 @@ irr::video::ITexture* ImageManager::GetRandomImage(int image_type) {
return driver->getTexture(ImageName); return driver->getTexture(ImageName);
} }
void ImageManager::RefreshRandomImageList() { void ImageManager::RefreshRandomImageList() {
RefreshJPGDir(L"bg/", TEXTURE_DUEL); RefreshImageDir(L"bg/", TEXTURE_DUEL);
RefreshJPGDir(L"bg_duel/", TEXTURE_DUEL); RefreshImageDir(L"bg_duel/", TEXTURE_DUEL);
RefreshJPGDir(L"bg_deck/", TEXTURE_DECK); RefreshImageDir(L"bg_deck/", TEXTURE_DECK);
RefreshJPGDir(L"bg_menu/", TEXTURE_MENU); RefreshImageDir(L"bg_menu/", TEXTURE_MENU);
RefreshJPGDir(L"cover/", TEXTURE_COVER_S); RefreshImageDir(L"cover/", TEXTURE_COVER_S);
RefreshJPGDir(L"cover2/", TEXTURE_COVER_O); RefreshImageDir(L"cover2/", TEXTURE_COVER_O);
RefreshPNGDir(L"attack/", TEXTURE_ATTACK); RefreshImageDir(L"attack/", TEXTURE_ATTACK);
RefreshPNGDir(L"act/", TEXTURE_ACTIVATE); RefreshImageDir(L"act/", TEXTURE_ACTIVATE);
} }
void ImageManager::RefreshPNGDir(std::wstring path, int image_type) { void ImageManager::RefreshImageDir(std::wstring path, int image_type) {
#ifdef _WIN32
WIN32_FIND_DATAW fdataw; WIN32_FIND_DATAW fdataw;
std::wstring search = L"./textures/" + path + L"*.png"; std::wstring search = L"./textures/" + path + L"*.*";
HANDLE fh = FindFirstFileW(search.c_str(), &fdataw); HANDLE fh = FindFirstFileW(search.c_str(), &fdataw);
if(fh == INVALID_HANDLE_VALUE) if(fh == INVALID_HANDLE_VALUE)
return; return;
do { do {
if(!(fdataw.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { size_t len = wcslen(fdataw.cFileName);
std::wstring filename = path + (std::wstring)fdataw.cFileName; if((fdataw.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) || len < 5
ImageList[image_type].push_back(filename); || !(wcsicmp(fdataw.cFileName + len - 4, L".jpg") == 0 || wcsicmp(fdataw.cFileName + len - 4, L".png") == 0))
} continue;
std::wstring filename = path + (std::wstring)fdataw.cFileName;
ImageList[image_type].push_back(filename);
} while(FindNextFileW(fh, &fdataw)); } while(FindNextFileW(fh, &fdataw));
FindClose(fh); FindClose(fh);
} #else
void ImageManager::RefreshJPGDir(std::wstring path, int image_type) { DIR * dir;
WIN32_FIND_DATAW fdataw; struct dirent * dirp;
std::wstring search = L"./textures/" + path + L"*.jpg"; std::wstring wsearchpath = L"./textures/" + path;
HANDLE fh = FindFirstFileW(search.c_str(), &fdataw); char searchpath[256];
if(fh == INVALID_HANDLE_VALUE) BufferIO::EncodeUTF8(wsearchpath.c_str(), searchpath);
if((dir = opendir(searchpath)) == NULL)
return; return;
do { while((dirp = readdir(dir)) != NULL) {
if(!(fdataw.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { size_t len = strlen(dirp->d_name);
std::wstring filename = path + (std::wstring)fdataw.cFileName; if(len < 5 || !(strcasecmp(dirp->d_name + len - 4, ".jpg") == 0 || strcasecmp(dirp->d_name + len - 4, ".png")))
ImageList[image_type].push_back(filename); continue;
} wchar_t wname[256];
} while(FindNextFileW(fh, &fdataw)); BufferIO::DecodeUTF8(dirp->d_name, wname);
FindClose(fh); std::wstring filename = path + (std::wstring)wname;
} ImageList[image_type].push_back(filename);
}
closedir(dir);
#endif #endif
}
void ImageManager::SetDevice(irr::IrrlichtDevice* dev) { void ImageManager::SetDevice(irr::IrrlichtDevice* dev) {
device = dev; device = dev;
driver = dev->getVideoDriver(); driver = dev->getVideoDriver();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment