Commit f54214c2 authored by nanahira's avatar nanahira

Merge branch 'patch-deck' of github.com:salix5/ygopro into develop

parents eb429945 3f2b9a01
...@@ -46,6 +46,14 @@ static inline bool havePopupWindow() { ...@@ -46,6 +46,14 @@ static inline bool havePopupWindow() {
return mainGame->wQuery->isVisible() || mainGame->wCategories->isVisible() || mainGame->wLinkMarks->isVisible() || mainGame->wDeckManage->isVisible() || mainGame->wDMQuery->isVisible(); return mainGame->wQuery->isVisible() || mainGame->wCategories->isVisible() || mainGame->wLinkMarks->isVisible() || mainGame->wDeckManage->isVisible() || mainGame->wDMQuery->isVisible();
} }
static inline void get_deck_file(wchar_t* ret) {
deckManager.GetDeckFile(ret, mainGame->cbDBCategory->getSelected(), mainGame->cbDBCategory->getText(), mainGame->cbDBDecks->getText());
}
static inline void load_current_deck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck) {
deckManager.LoadCurrentDeck(cbCategory->getSelected(), cbCategory->getText(), cbDeck->getText());
}
void DeckBuilder::Initialize() { void DeckBuilder::Initialize() {
mainGame->is_building = true; mainGame->is_building = true;
mainGame->is_siding = false; mainGame->is_siding = false;
...@@ -164,7 +172,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -164,7 +172,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(sel == -1) if(sel == -1)
break; break;
wchar_t filepath[256]; wchar_t filepath[256];
deckManager.GetDeckFile(filepath, mainGame->cbDBCategory, mainGame->cbDBDecks); get_deck_file(filepath);
if(deckManager.SaveDeck(deckManager.current_deck, filepath)) { if(deckManager.SaveDeck(deckManager.current_deck, filepath)) {
mainGame->stACMessage->setText(dataManager.GetSysString(1335)); mainGame->stACMessage->setText(dataManager.GetSysString(1335));
mainGame->PopupElement(mainGame->wACMessage, 20); mainGame->PopupElement(mainGame->wACMessage, 20);
...@@ -523,7 +531,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -523,7 +531,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
int decksel = mainGame->lstDecks->getSelected(); int decksel = mainGame->lstDecks->getSelected();
const wchar_t* catename = mainGame->lstCategories->getListItem(catesel); const wchar_t* catename = mainGame->lstCategories->getListItem(catesel);
wchar_t oldfilepath[256]; wchar_t oldfilepath[256];
deckManager.GetDeckFile(oldfilepath, mainGame->cbDBCategory, mainGame->cbDBDecks); get_deck_file(oldfilepath);
const wchar_t* newdeckname = mainGame->ebDMName->getText(); const wchar_t* newdeckname = mainGame->ebDMName->getText();
wchar_t newfilepath[256]; wchar_t newfilepath[256];
if(catesel == 2) { if(catesel == 2) {
...@@ -555,7 +563,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -555,7 +563,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
case BUTTON_DELETE_DECK_DM: { case BUTTON_DELETE_DECK_DM: {
int decksel = mainGame->lstDecks->getSelected(); int decksel = mainGame->lstDecks->getSelected();
wchar_t filepath[256]; wchar_t filepath[256];
deckManager.GetDeckFile(filepath, mainGame->cbDBCategory, mainGame->cbDBDecks); get_deck_file(filepath);
if(deckManager.DeleteDeck(filepath)) { if(deckManager.DeleteDeck(filepath)) {
mainGame->lstDecks->removeItem(decksel); mainGame->lstDecks->removeItem(decksel);
mainGame->cbDBDecks->removeItem(decksel); mainGame->cbDBDecks->removeItem(decksel);
...@@ -566,7 +574,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -566,7 +574,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(decksel != -1) { if(decksel != -1) {
mainGame->lstDecks->setSelected(decksel); mainGame->lstDecks->setSelected(decksel);
mainGame->cbDBDecks->setSelected(decksel); mainGame->cbDBDecks->setSelected(decksel);
deckManager.LoadCurrentDeck(mainGame->cbDBCategory, mainGame->cbDBDecks); load_current_deck(mainGame->cbDBCategory, mainGame->cbDBDecks);
} }
RefreshReadonly(prev_category); RefreshReadonly(prev_category);
prev_deck = decksel; prev_deck = decksel;
...@@ -585,7 +593,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -585,7 +593,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
wchar_t deckname[256]; wchar_t deckname[256];
BufferIO::CopyWideString(olddeckname, deckname); BufferIO::CopyWideString(olddeckname, deckname);
wchar_t oldfilepath[256]; wchar_t oldfilepath[256];
deckManager.GetDeckFile(oldfilepath, mainGame->cbDBCategory, mainGame->cbDBDecks); get_deck_file(oldfilepath);
wchar_t newfilepath[256]; wchar_t newfilepath[256];
if(oldcatesel != 2 && newcatesel == 0) { if(oldcatesel != 2 && newcatesel == 0) {
myswprintf(newfilepath, L"./deck/%ls.ydk", deckname); myswprintf(newfilepath, L"./deck/%ls.ydk", deckname);
...@@ -694,7 +702,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -694,7 +702,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
} }
case BUTTON_SIDE_RELOAD: { case BUTTON_SIDE_RELOAD: {
deckManager.LoadCurrentDeck(mainGame->cbCategorySelect, mainGame->cbDeckSelect); load_current_deck(mainGame->cbCategorySelect, mainGame->cbDeckSelect);
break; break;
} }
case BUTTON_BIG_CARD_ORIG_SIZE: { case BUTTON_BIG_CARD_ORIG_SIZE: {
...@@ -732,7 +740,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -732,7 +740,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
int sel = prev_sel; int sel = prev_sel;
mainGame->cbDBDecks->setSelected(sel); mainGame->cbDBDecks->setSelected(sel);
wchar_t filepath[256]; wchar_t filepath[256];
deckManager.GetDeckFile(filepath, mainGame->cbDBCategory, mainGame->cbDBDecks); get_deck_file(filepath);
if(deckManager.DeleteDeck(filepath)) { if(deckManager.DeleteDeck(filepath)) {
mainGame->cbDBDecks->removeItem(sel); mainGame->cbDBDecks->removeItem(sel);
int count = mainGame->cbDBDecks->getItemCount(); int count = mainGame->cbDBDecks->getItemCount();
...@@ -740,7 +748,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -740,7 +748,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
sel = count - 1; sel = count - 1;
mainGame->cbDBDecks->setSelected(sel); mainGame->cbDBDecks->setSelected(sel);
if(sel != -1) if(sel != -1)
deckManager.LoadCurrentDeck(mainGame->cbDBCategory, mainGame->cbDBDecks); load_current_deck(mainGame->cbDBCategory, mainGame->cbDBDecks);
mainGame->stACMessage->setText(dataManager.GetSysString(1338)); mainGame->stACMessage->setText(dataManager.GetSysString(1338));
mainGame->PopupElement(mainGame->wACMessage, 20); mainGame->PopupElement(mainGame->wACMessage, 20);
prev_deck = sel; prev_deck = sel;
...@@ -754,7 +762,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -754,7 +762,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
ChangeCategory(catesel); ChangeCategory(catesel);
} else if(prev_operation == COMBOBOX_DBDECKS) { } else if(prev_operation == COMBOBOX_DBDECKS) {
int decksel = mainGame->cbDBDecks->getSelected(); int decksel = mainGame->cbDBDecks->getSelected();
deckManager.LoadCurrentDeck(mainGame->cbDBCategory, mainGame->cbDBDecks); load_current_deck(mainGame->cbDBCategory, mainGame->cbDBDecks);
prev_deck = decksel; prev_deck = decksel;
is_modified = false; is_modified = false;
} else if(prev_operation == BUTTON_MANAGE_DECK) { } else if(prev_operation == BUTTON_MANAGE_DECK) {
...@@ -871,7 +879,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -871,7 +879,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
} }
int decksel = mainGame->cbDBDecks->getSelected(); int decksel = mainGame->cbDBDecks->getSelected();
if(decksel >= 0) { if(decksel >= 0) {
deckManager.LoadCurrentDeck(mainGame->cbDBCategory, mainGame->cbDBDecks); load_current_deck(mainGame->cbDBCategory, mainGame->cbDBDecks);
} }
prev_deck = decksel; prev_deck = decksel;
is_modified = false; is_modified = false;
...@@ -1674,7 +1682,7 @@ void DeckBuilder::ChangeCategory(int catesel) { ...@@ -1674,7 +1682,7 @@ void DeckBuilder::ChangeCategory(int catesel) {
mainGame->RefreshDeck(mainGame->cbDBCategory, mainGame->cbDBDecks); mainGame->RefreshDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
mainGame->cbDBDecks->setSelected(0); mainGame->cbDBDecks->setSelected(0);
RefreshReadonly(catesel); RefreshReadonly(catesel);
deckManager.LoadCurrentDeck(mainGame->cbDBCategory, mainGame->cbDBDecks); load_current_deck(mainGame->cbDBCategory, mainGame->cbDBDecks);
is_modified = false; is_modified = false;
prev_category = catesel; prev_category = catesel;
prev_deck = 0; prev_deck = 0;
......
...@@ -256,12 +256,11 @@ void DeckManager::GetCategoryPath(wchar_t* ret, int index, const wchar_t* text) ...@@ -256,12 +256,11 @@ void DeckManager::GetCategoryPath(wchar_t* ret, int index, const wchar_t* text)
} }
BufferIO::CopyWStr(catepath, ret, 256); BufferIO::CopyWStr(catepath, ret, 256);
} }
void DeckManager::GetDeckFile(wchar_t* ret, irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck) { void DeckManager::GetDeckFile(wchar_t* ret, int category_index, const wchar_t* category_name, const wchar_t* deckname) {
wchar_t filepath[256]; wchar_t filepath[256];
wchar_t catepath[256]; wchar_t catepath[256];
const wchar_t* deckname = cbDeck->getItem(cbDeck->getSelected());
if(deckname != nullptr) { if(deckname != nullptr) {
GetCategoryPath(catepath, cbCategory->getSelected(), cbCategory->getText()); GetCategoryPath(catepath, category_index, category_name);
myswprintf(filepath, L"%ls/%ls.ydk", catepath, deckname); myswprintf(filepath, L"%ls/%ls.ydk", catepath, deckname);
BufferIO::CopyWStr(filepath, ret, 256); BufferIO::CopyWStr(filepath, ret, 256);
} }
...@@ -308,10 +307,10 @@ bool DeckManager::LoadCurrentDeck(const wchar_t* file, bool is_packlist) { ...@@ -308,10 +307,10 @@ bool DeckManager::LoadCurrentDeck(const wchar_t* file, bool is_packlist) {
LoadDeck(current_deck, deckStream, is_packlist); LoadDeck(current_deck, deckStream, is_packlist);
return true; // the above LoadDeck has return value but we ignore it here for now return true; // the above LoadDeck has return value but we ignore it here for now
} }
bool DeckManager::LoadCurrentDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck) { bool DeckManager::LoadCurrentDeck(int category_index, const wchar_t* category_name, const wchar_t* deckname) {
wchar_t filepath[256]; wchar_t filepath[256];
GetDeckFile(filepath, cbCategory, cbDeck); GetDeckFile(filepath, category_index, category_name, deckname);
bool is_packlist = cbCategory->getSelected() == 0; bool is_packlist = (category_index == 0);
bool res = LoadCurrentDeck(filepath, is_packlist); bool res = LoadCurrentDeck(filepath, is_packlist);
if (res && mainGame->is_building) if (res && mainGame->is_building)
mainGame->deckBuilder.RefreshPackListScroll(); mainGame->deckBuilder.RefreshPackListScroll();
......
#ifndef DECKMANAGER_H #ifndef DECKMANAGER_H
#define DECKMANAGER_H #define DECKMANAGER_H
#include "config.h"
#include "data_manager.h"
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include <sstream> #include <sstream>
#include "data_manager.h"
#ifndef YGOPRO_MAX_DECK #ifndef YGOPRO_MAX_DECK
#define YGOPRO_MAX_DECK 60 #define YGOPRO_MAX_DECK 60
...@@ -68,11 +67,11 @@ public: ...@@ -68,11 +67,11 @@ public:
int LoadDeck(Deck& deck, std::istringstream& deckStream, bool is_packlist = false); int LoadDeck(Deck& deck, std::istringstream& deckStream, bool is_packlist = false);
bool LoadSide(Deck& deck, int* dbuf, int mainc, int sidec); bool LoadSide(Deck& deck, int* dbuf, int mainc, int sidec);
void GetCategoryPath(wchar_t* ret, int index, const wchar_t* text); void GetCategoryPath(wchar_t* ret, int index, const wchar_t* text);
void GetDeckFile(wchar_t* ret, irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck); void GetDeckFile(wchar_t* ret, int category_index, const wchar_t* category_name, const wchar_t* deckname);
FILE* OpenDeckFile(const wchar_t* file, const char* mode); FILE* OpenDeckFile(const wchar_t* file, const char* mode);
irr::io::IReadFile* OpenDeckReader(const wchar_t* file); irr::io::IReadFile* OpenDeckReader(const wchar_t* file);
bool LoadCurrentDeck(const wchar_t* file, bool is_packlist = false); bool LoadCurrentDeck(const wchar_t* file, bool is_packlist = false);
bool LoadCurrentDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck); bool LoadCurrentDeck(int category_index, const wchar_t* category_name, const wchar_t* deckname);
bool SaveDeck(Deck& deck, const wchar_t* file); bool SaveDeck(Deck& deck, const wchar_t* file);
bool DeleteDeck(const wchar_t* file); bool DeleteDeck(const wchar_t* file);
wchar_t DeckFormatBuffer[128]; wchar_t DeckFormatBuffer[128];
......
...@@ -162,7 +162,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -162,7 +162,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
} }
case BUTTON_HP_READY: { case BUTTON_HP_READY: {
if(mainGame->cbCategorySelect->getSelected() == -1 || mainGame->cbDeckSelect->getSelected() == -1 || if(mainGame->cbCategorySelect->getSelected() == -1 || mainGame->cbDeckSelect->getSelected() == -1 ||
!deckManager.LoadCurrentDeck(mainGame->cbCategorySelect, mainGame->cbDeckSelect)) { !deckManager.LoadCurrentDeck(mainGame->cbCategorySelect->getSelected(), mainGame->cbCategorySelect->getText(), mainGame->cbDeckSelect->getText())) {
mainGame->gMutex.lock(); mainGame->gMutex.lock();
soundManager.PlaySoundEffect(SOUND_INFO); soundManager.PlaySoundEffect(SOUND_INFO);
mainGame->env->addMessageBox(L"", dataManager.GetSysString(1406)); mainGame->env->addMessageBox(L"", dataManager.GetSysString(1406));
...@@ -353,7 +353,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -353,7 +353,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
wchar_t arg1[512]; wchar_t arg1[512];
if(mainGame->botInfo[sel].select_deckfile) { if(mainGame->botInfo[sel].select_deckfile) {
wchar_t botdeck[256]; wchar_t botdeck[256];
deckManager.GetDeckFile(botdeck, mainGame->cbBotDeckCategory, mainGame->cbBotDeck); deckManager.GetDeckFile(botdeck, mainGame->cbBotDeckCategory->getSelected(), mainGame->cbBotDeckCategory->getText(), mainGame->cbBotDeck->getText());
myswprintf(arg1, L"%ls DeckFile='%ls'", mainGame->botInfo[sel].command, botdeck); myswprintf(arg1, L"%ls DeckFile='%ls'", mainGame->botInfo[sel].command, botdeck);
} }
else else
...@@ -372,7 +372,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -372,7 +372,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
wchar_t warg1[512]; wchar_t warg1[512];
if(mainGame->botInfo[sel].select_deckfile) { if(mainGame->botInfo[sel].select_deckfile) {
wchar_t botdeck[256]; wchar_t botdeck[256];
deckManager.GetDeckFile(botdeck, mainGame->cbBotDeckCategory, mainGame->cbBotDeck); deckManager.GetDeckFile(botdeck, mainGame->cbBotDeckCategory->getSelected(), mainGame->cbBotDeckCategory->getText(), mainGame->cbBotDeck->getText());
myswprintf(warg1, L"%ls DeckFile='%ls'", mainGame->botInfo[sel].command, botdeck); myswprintf(warg1, L"%ls DeckFile='%ls'", mainGame->botInfo[sel].command, botdeck);
} }
else else
...@@ -458,7 +458,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -458,7 +458,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
open_file = false; open_file = false;
} }
else if(mainGame->cbDBCategory->getSelected() != -1 && mainGame->cbDBDecks->getSelected() != -1) { else if(mainGame->cbDBCategory->getSelected() != -1 && mainGame->cbDBDecks->getSelected() != -1) {
deckManager.LoadCurrentDeck(mainGame->cbDBCategory, mainGame->cbDBDecks); deckManager.LoadCurrentDeck(mainGame->cbDBCategory->getSelected(), mainGame->cbDBCategory->getText(), mainGame->cbDBDecks->getText());
mainGame->ebDeckname->setText(L""); mainGame->ebDeckname->setText(L"");
} }
mainGame->HideElement(mainGame->wMainMenu); mainGame->HideElement(mainGame->wMainMenu);
...@@ -627,7 +627,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -627,7 +627,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->env->setFocus(mainGame->wHostPrepare); mainGame->env->setFocus(mainGame->wHostPrepare);
if(static_cast<irr::gui::IGUICheckBox*>(caller)->isChecked()) { if(static_cast<irr::gui::IGUICheckBox*>(caller)->isChecked()) {
if(mainGame->cbCategorySelect->getSelected() == -1 || mainGame->cbDeckSelect->getSelected() == -1 || if(mainGame->cbCategorySelect->getSelected() == -1 || mainGame->cbDeckSelect->getSelected() == -1 ||
!deckManager.LoadCurrentDeck(mainGame->cbCategorySelect, mainGame->cbDeckSelect)) { !deckManager.LoadCurrentDeck(mainGame->cbCategorySelect->getSelected(), mainGame->cbCategorySelect->getText(), mainGame->cbDeckSelect->getText())) {
mainGame->gMutex.lock(); mainGame->gMutex.lock();
static_cast<irr::gui::IGUICheckBox*>(caller)->setChecked(false); static_cast<irr::gui::IGUICheckBox*>(caller)->setChecked(false);
soundManager.PlaySoundEffect(SOUND_INFO); soundManager.PlaySoundEffect(SOUND_INFO);
......
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