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

Update image_manager.cpp

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