Commit c9fc242b authored by mercury233's avatar mercury233

Merge branch 'master' of https://github.com/Fluorohydride/ygopro

parents d5b8446f f28da3a2
......@@ -594,18 +594,23 @@ void ClientField::ShowSelectOption(int select_hint) {
selected_option = 0;
wchar_t textBuffer[256];
int count = select_options.size();
bool quickmode = (count <= 5);
bool quickmode = true;
mainGame->gMutex.Lock();
for(int i = 0; (i < count) && quickmode; i++) {
const wchar_t* option = dataManager.GetDesc(select_options[i]);
irr::core::dimension2d<unsigned int> dtxt = mainGame->guiFont->getDimension(option);
if(dtxt.Width > 310) {
for(auto option : select_options) {
if(mainGame->guiFont->getDimension(dataManager.GetDesc(option)).Width > 310) {
quickmode = false;
break;
}
}
for(int i = 0; (i < count) && (i < 5) && quickmode; i++) {
const wchar_t* option = dataManager.GetDesc(select_options[i]);
mainGame->btnOption[i]->setText(option);
}
if(quickmode) {
bool scrollbar = count > 5;
mainGame->scrOption->setVisible(scrollbar);
mainGame->scrOption->setPos(0);
mainGame->scrOption->setMax(scrollbar ? (count - 5) : 1);
mainGame->stOptions->setVisible(false);
mainGame->btnOptionp->setVisible(false);
mainGame->btnOptionn->setVisible(false);
......@@ -613,9 +618,10 @@ void ClientField::ShowSelectOption(int select_hint) {
for(int i = 0; i < 5; i++)
mainGame->btnOption[i]->setVisible(i < count);
recti pos = mainGame->wOptions->getRelativePosition();
int newheight = 30 + 40 * count;
int newheight = 30 + 40 * (scrollbar ? 5 : count);
int oldheight = pos.LowerRightCorner.Y - pos.UpperLeftCorner.Y;
pos.UpperLeftCorner.Y = pos.UpperLeftCorner.Y + (oldheight - newheight) / 2;
pos.LowerRightCorner.X = pos.UpperLeftCorner.X + (scrollbar ? 375 : 350);
pos.LowerRightCorner.Y = pos.UpperLeftCorner.Y + newheight;
mainGame->wOptions->setRelativePosition(pos);
} else {
......
......@@ -334,6 +334,12 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break;
}
case irr::gui::EGET_SCROLL_BAR_CHANGED: {
switch(id) {
case SCROLL_FILTER: {
GetHoveredCard();
break;
}
}
break;
}
case irr::gui::EGET_EDITBOX_ENTER: {
......
......@@ -291,33 +291,14 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame->SetStaticText(mainGame->stOptions, 310, mainGame->guiFont, dataManager.GetDesc(select_options[selected_option]));
break;
}
case BUTTON_OPTION_0: {
soundManager.PlaySoundEffect(SOUND_BUTTON);
selected_option = 0;
SetResponseSelectedOption();
break;
}
case BUTTON_OPTION_1: {
soundManager.PlaySoundEffect(SOUND_BUTTON);
selected_option = 1;
SetResponseSelectedOption();
break;
}
case BUTTON_OPTION_2: {
soundManager.PlaySoundEffect(SOUND_BUTTON);
selected_option = 2;
SetResponseSelectedOption();
break;
}
case BUTTON_OPTION_3: {
soundManager.PlaySoundEffect(SOUND_BUTTON);
selected_option = 3;
SetResponseSelectedOption();
break;
}
case BUTTON_OPTION_0:
case BUTTON_OPTION_1:
case BUTTON_OPTION_2:
case BUTTON_OPTION_3:
case BUTTON_OPTION_4: {
soundManager.PlaySoundEffect(SOUND_BUTTON);
selected_option = 4;
int step = mainGame->scrOption->isVisible() ? mainGame->scrOption->getPos() : 0;
selected_option = id - BUTTON_OPTION_0 + step;
SetResponseSelectedOption();
break;
}
......@@ -846,6 +827,14 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
}
case irr::gui::EGET_SCROLL_BAR_CHANGED: {
switch(id) {
case SCROLL_OPTION_SELECT: {
int step = mainGame->scrOption->isVisible() ? mainGame->scrOption->getPos() : 0;
for(int i = 0; i < 5; i++) {
const wchar_t* option = dataManager.GetDesc(select_options[i + step]);
mainGame->btnOption[i]->setText(option);
}
break;
}
case SCROLL_CARD_SELECT: {
int pos = mainGame->scrCardList->getPos() / 10;
for(int i = 0; i < 5; ++i) {
......
......@@ -397,6 +397,10 @@ bool Game::Initialize() {
for(int i = 0; i < 5; ++i) {
btnOption[i] = env->addButton(rect<s32>(10, 30 + 40 * i, 340, 60 + 40 * i), wOptions, BUTTON_OPTION_0 + i, L"");
}
scrOption = env->addScrollBar(false, rect<s32>(350, 30, 365, 220), wOptions, SCROLL_OPTION_SELECT);
scrOption->setLargeStep(1);
scrOption->setSmallStep(1);
scrOption->setMin(0);
//pos select
wPosSelect = env->addWindow(rect<s32>(340, 200, 935, 410), false, dataManager.GetSysString(561));
wPosSelect->getCloseButton()->setVisible(false);
......
......@@ -388,6 +388,7 @@ public:
irr::gui::IGUIButton* btnOptionn;
irr::gui::IGUIButton* btnOptionOK;
irr::gui::IGUIButton* btnOption[5];
irr::gui::IGUIScrollBar* scrOption;
//pos selection
irr::gui::IGUIWindow* wPosSelect;
irr::gui::CGUIImageButton* btnPSAU;
......@@ -595,6 +596,7 @@ extern Game* mainGame;
#define BUTTON_OPTION_2 225
#define BUTTON_OPTION_3 226
#define BUTTON_OPTION_4 227
#define SCROLL_OPTION_SELECT 228
#define BUTTON_CARD_0 230
#define BUTTON_CARD_1 231
#define BUTTON_CARD_2 232
......
......@@ -8,6 +8,8 @@
#ifndef _WIN32
#include <dirent.h>
#include <sys/stat.h>
#include <vector>
#include <algorithm>
#endif
#ifdef _WIN32
......@@ -109,21 +111,41 @@ public:
return MakeDir(dir);
}
struct file_unit {
std::string filename;
bool is_dir;
};
static void TraversalDir(const char* path, const std::function<void(const char*, bool)>& cb) {
DIR* dir = nullptr;
struct dirent* dirp = nullptr;
if((dir = opendir(path)) == nullptr)
return;
struct stat fileStat;
std::vector<file_unit> file_list;
while((dirp = readdir(dir)) != nullptr) {
file_unit funit;
char fname[1024];
strcpy(fname, path);
strcat(fname, "/");
strcat(fname, dirp->d_name);
stat(fname, &fileStat);
cb(dirp->d_name, S_ISDIR(fileStat.st_mode));
funit.filename = std::string(dirp->d_name);
funit.is_dir = S_ISDIR(fileStat.st_mode);
file_list.push_back(funit);
}
closedir(dir);
std::sort(file_list.begin(), file_list.end(), TraversalDirSort);
for (file_unit funit : file_list)
cb(funit.filename.c_str(), funit.is_dir);
}
static bool TraversalDirSort(file_unit file1, file_unit file2) {
if(file1.is_dir != file2.is_dir) {
return file2.is_dir;
} else {
return file1.filename < file2.filename;
}
}
static void TraversalDir(const wchar_t* wpath, const std::function<void(const wchar_t*, bool)>& cb) {
......
......@@ -1359,7 +1359,7 @@ int TagDuel::Analyze(char* msgbuffer, unsigned int len) {
case MSG_ROCK_PAPER_SCISSORS: {
player = BufferIO::ReadInt8(pbuf);
WaitforResponse(player);
NetServer::SendBufferToPlayer(players[player], STOC_GAME_MSG, offset, pbuf - offset);
NetServer::SendBufferToPlayer(cur_player[player], STOC_GAME_MSG, offset, pbuf - offset);
return 1;
}
case MSG_HAND_RES: {
......
......@@ -728,7 +728,7 @@
!setname 0x73 超量 エクシーズ
!setname 0x1073 混沌超量 CX(カオスエクシーズ)
!setname 0x2073 超量龙 エクシーズ・ドラゴン
!setname 0x74 水精鱗
!setname 0x74 水精鳞 水精
!setname 0x75 深渊 アビス
!setname 0x76 纹章兽 紋章獣
!setname 0x77 海皇
......@@ -952,3 +952,6 @@
!setname 0x128 魔女术 ウィッチクラフト
!setname 0x129 咒眼 呪眼
!setname 0x12a 恩底弥翁 エンディミオン
!setname 0x12b 海晶少女 マリンセス
!setname 0x12c 天威
!setname 0x12d 斯摩夫 シムルグ
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