Commit 18b078ba authored by fallenstardust's avatar fallenstardust

showing pack lists

minor change declare order
parent a6f67de7
...@@ -11,13 +11,8 @@ DataManager dataManager; ...@@ -11,13 +11,8 @@ DataManager dataManager;
bool DataManager::LoadDB(const wchar_t* wfile) { bool DataManager::LoadDB(const wchar_t* wfile) {
char file[256]; char file[256];
wchar_t strBuffer[4096];
BufferIO::EncodeUTF8(wfile, file); BufferIO::EncodeUTF8(wfile, file);
#ifdef _WIN32
IReadFile* reader = FileSystem->createAndOpenFile(wfile);
#else
IReadFile* reader = FileSystem->createAndOpenFile(file); IReadFile* reader = FileSystem->createAndOpenFile(file);
#endif
if(reader == NULL) if(reader == NULL)
return false; return false;
spmemvfs_db_t db; spmemvfs_db_t db;
...@@ -42,6 +37,7 @@ bool DataManager::LoadDB(const wchar_t* wfile) { ...@@ -42,6 +37,7 @@ bool DataManager::LoadDB(const wchar_t* wfile) {
} }
CardDataC cd; CardDataC cd;
CardString cs; CardString cs;
wchar_t strBuffer[4096];
int step = 0; int step = 0;
do { do {
step = sqlite3_step(pStmt); step = sqlite3_step(pStmt);
...@@ -99,7 +95,7 @@ bool DataManager::LoadStrings(const char* file) { ...@@ -99,7 +95,7 @@ bool DataManager::LoadStrings(const char* file) {
ReadStringConfLine(linebuf); ReadStringConfLine(linebuf);
} }
fclose(fp); fclose(fp);
for(int i = 0; i < 255; ++i) for(int i = 0; i < 301; ++i)
myswprintf(numStrings[i], L"%d", i); myswprintf(numStrings[i], L"%d", i);
return true; return true;
} }
...@@ -191,10 +187,10 @@ const wchar_t* DataManager::GetText(int code) { ...@@ -191,10 +187,10 @@ const wchar_t* DataManager::GetText(int code) {
return csit->second.text.c_str(); return csit->second.text.c_str();
return unknown_string; return unknown_string;
} }
const wchar_t* DataManager::GetDesc(int strCode) { const wchar_t* DataManager::GetDesc(unsigned int strCode) {
if((unsigned int)strCode < 10000u) if(strCode < 10000u)
return GetSysString(strCode); return GetSysString(strCode);
unsigned int code = strCode >> 4; unsigned int code = (strCode >> 4) & 0x0fffffff;
unsigned int offset = strCode & 0xf; unsigned int offset = strCode & 0xf;
auto csit = _strings.find(code); auto csit = _strings.find(code);
if(csit == _strings.end()) if(csit == _strings.end())
......
...@@ -26,7 +26,7 @@ public: ...@@ -26,7 +26,7 @@ public:
bool GetString(int code, CardString* pStr); bool GetString(int code, CardString* pStr);
const wchar_t* GetName(int code); const wchar_t* GetName(int code);
const wchar_t* GetText(int code); const wchar_t* GetText(int code);
const wchar_t* GetDesc(int strCode); const wchar_t* GetDesc(unsigned int strCode);
const wchar_t* GetSysString(int code); const wchar_t* GetSysString(int code);
const wchar_t* GetVictoryString(int code); const wchar_t* GetVictoryString(int code);
const wchar_t* GetCounterName(int code); const wchar_t* GetCounterName(int code);
...@@ -47,7 +47,7 @@ public: ...@@ -47,7 +47,7 @@ public:
std::unordered_map<unsigned int, std::wstring> _setnameStrings; std::unordered_map<unsigned int, std::wstring> _setnameStrings;
std::unordered_map<unsigned int, std::wstring> _sysStrings; std::unordered_map<unsigned int, std::wstring> _sysStrings;
wchar_t numStrings[256][4]; wchar_t numStrings[301][4];
wchar_t numBuffer[6]; wchar_t numBuffer[6];
wchar_t attBuffer[128]; wchar_t attBuffer[128];
wchar_t racBuffer[128]; wchar_t racBuffer[128];
......
...@@ -92,6 +92,7 @@ void DeckBuilder::Initialize() { ...@@ -92,6 +92,7 @@ void DeckBuilder::Initialize() {
prev_deck = mainGame->cbDBDecks->getSelected(); prev_deck = mainGame->cbDBDecks->getSelected();
prev_category = mainGame->cbDBCategory->getSelected(); prev_category = mainGame->cbDBCategory->getSelected();
RefreshReadonly(prev_category); RefreshReadonly(prev_category);
RefreshPackListScroll();
prev_operation = 0; prev_operation = 0;
prev_sel = -1; prev_sel = -1;
is_modified = false; is_modified = false;
...@@ -116,6 +117,8 @@ void DeckBuilder::Terminate() { ...@@ -116,6 +117,8 @@ void DeckBuilder::Terminate() {
mainGame->wACMessage->setVisible(false); mainGame->wACMessage->setVisible(false);
mainGame->ClearTextures(); mainGame->ClearTextures();
mainGame->scrFilter->setVisible(false); mainGame->scrFilter->setVisible(false);
mainGame->scrPackCards->setVisible(false);
mainGame->scrPackCards->setPos(0);
int catesel = mainGame->cbDBCategory->getSelected(); int catesel = mainGame->cbDBCategory->getSelected();
char linebuf[256]; char linebuf[256];
if(catesel >= 0) if(catesel >= 0)
...@@ -1047,7 +1050,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -1047,7 +1050,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
wchar_t catepath[256]; wchar_t catepath[256];
deckManager.GetCategoryPath(catepath, mainGame->lstCategories->getSelected(), mainGame->lstCategories->getListItem(mainGame->lstCategories->getSelected())); deckManager.GetCategoryPath(catepath, mainGame->lstCategories->getSelected(), mainGame->lstCategories->getListItem(mainGame->lstCategories->getSelected()));
myswprintf(filepath, L"%ls/%ls.ydk", catepath, mainGame->lstDecks->getListItem(decksel)); myswprintf(filepath, L"%ls/%ls.ydk", catepath, mainGame->lstDecks->getListItem(decksel));
deckManager.LoadDeck(filepath); deckManager.LoadDeck(filepath, showing_pack);
RefreshPackListScroll();
prev_deck = decksel; prev_deck = decksel;
break; break;
} }
...@@ -1069,6 +1073,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -1069,6 +1073,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(hovered_pos == 0 || hovered_seq == -1) if(hovered_pos == 0 || hovered_seq == -1)
break; break;
click_pos = hovered_pos; click_pos = hovered_pos;
if(readonly)
break;
dragx = event.MouseInput.X; dragx = event.MouseInput.X;
dragy = event.MouseInput.Y; dragy = event.MouseInput.Y;
draging_pointer = dataManager.GetCodePointer(hovered_code); draging_pointer = dataManager.GetCodePointer(hovered_code);
...@@ -1141,6 +1147,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -1141,6 +1147,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(!is_draging) { if(!is_draging) {
if(hovered_pos == 0 || hovered_seq == -1) if(hovered_pos == 0 || hovered_seq == -1)
break; break;
if(readonly)
break;
mainGame->soundManager->PlaySoundEffect(SoundManager::SFX::CARD_DROP); mainGame->soundManager->PlaySoundEffect(SoundManager::SFX::CARD_DROP);
if(hovered_pos == 1) { if(hovered_pos == 1) {
pop_main(hovered_seq); pop_main(hovered_seq);
...@@ -1180,6 +1188,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -1180,6 +1188,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
if (hovered_pos == 0 || hovered_seq == -1) if (hovered_pos == 0 || hovered_seq == -1)
break; break;
if (readonly)
break;
if (is_draging) if (is_draging)
break; break;
auto pointer = dataManager.GetCodePointer(hovered_code); auto pointer = dataManager.GetCodePointer(hovered_code);
...@@ -1257,7 +1267,33 @@ void DeckBuilder::GetHoveredCard() { ...@@ -1257,7 +1267,33 @@ void DeckBuilder::GetHoveredCard() {
int y = mouse_pos.Y; int y = mouse_pos.Y;
is_lastcard = 0; is_lastcard = 0;
if(x >= 314 * mainGame->xScale && x <= 794 * mainGame->xScale) { if(x >= 314 * mainGame->xScale && x <= 794 * mainGame->xScale) {
if(y >= 164 * mainGame->yScale && y <= 435 * mainGame->yScale) { if(showing_pack) {
if((x <= 772 * mainGame->xScale || !mainGame->scrPackCards->isVisible()) && y >= 164 * mainGame->yScale && y <= 624 * mainGame->yScale) {
int mainsize = deckManager.current_deck.main.size();
int lx = 10;
int dy = 68 * mainGame->yScale;
if(mainsize > 10 * 7)
lx = 11;
if(mainsize > 11 * 7)
lx = 12;
if(mainsize > 60)
dy = 66 * mainGame->yScale;
int px;
int py = (y - 164 * mainGame->yScale) / dy;
hovered_pos = 1;
if(x >= 750 * mainGame->xScale)
px = lx - 1;
else
px = (x - 314 * mainGame->xScale) * (lx - 1) / ((mainGame->scrPackCards->isVisible() ? 414.0f : 436.0f) * mainGame->xScale);
hovered_seq = py * lx + px + mainGame->scrPackCards->getPos() * lx;
if(hovered_seq >= mainsize) {
hovered_seq = -1;
hovered_code = 0;
} else {
hovered_code = deckManager.current_deck.main[hovered_seq]->first;
}
}
} else if(y >= 164 * mainGame->yScale && y <= 435 * mainGame->yScale) {
int lx = 10, px, py = (y - 164 * mainGame->yScale) / (68 * mainGame->yScale); int lx = 10, px, py = (y - 164 * mainGame->yScale) / (68 * mainGame->yScale);
hovered_pos = 1; hovered_pos = 1;
if(deckManager.current_deck.main.size() > 40) if(deckManager.current_deck.main.size() > 40)
...@@ -1603,21 +1639,17 @@ void DeckBuilder::RefreshDeckList() { ...@@ -1603,21 +1639,17 @@ void DeckBuilder::RefreshDeckList() {
wchar_t catepath[256]; wchar_t catepath[256];
deckManager.GetCategoryPath(catepath, lstCategories->getSelected(), lstCategories->getListItem(lstCategories->getSelected())); deckManager.GetCategoryPath(catepath, lstCategories->getSelected(), lstCategories->getListItem(lstCategories->getSelected()));
lstDecks->clear(); lstDecks->clear();
FileSystem::TraversalDir(catepath, [lstDecks](const wchar_t* name, bool isdir) { mainGame->RefreshDeck(catepath, [lstDecks](const wchar_t* item) { lstDecks->addItem(item); });
if(!isdir && wcsrchr(name, '.') && !wcsncasecmp(wcsrchr(name, '.'), L".ydk", 4)) {
size_t len = wcslen(name);
wchar_t deckname[256];
wcsncpy(deckname, name, len - 4);
deckname[len - 4] = 0;
lstDecks->addItem(deckname);
}
});
} }
void DeckBuilder::RefreshReadonly(int catesel) { void DeckBuilder::RefreshReadonly(int catesel) {
bool hasDeck = mainGame->cbDBDecks->getItemCount() != 0; bool hasDeck = mainGame->cbDBDecks->getItemCount() != 0;
readonly = catesel < 2; readonly = catesel < 2;
showing_pack = catesel == 0;
mainGame->btnSaveDeck->setEnabled(!readonly); mainGame->btnSaveDeck->setEnabled(!readonly);
mainGame->btnSaveDeckAs->setEnabled(!readonly); mainGame->btnSaveDeckAs->setEnabled(!readonly);
mainGame->btnClearDeck->setEnabled(!readonly);
mainGame->btnShuffleDeck->setEnabled(!readonly);
mainGame->btnSortDeck->setEnabled(!readonly);
mainGame->btnDeleteDeck->setEnabled(hasDeck && !readonly); mainGame->btnDeleteDeck->setEnabled(hasDeck && !readonly);
mainGame->btnRenameCategory->setEnabled(catesel > 3); mainGame->btnRenameCategory->setEnabled(catesel > 3);
mainGame->btnDeleteCategory->setEnabled(catesel > 3); mainGame->btnDeleteCategory->setEnabled(catesel > 3);
...@@ -1627,11 +1659,26 @@ void DeckBuilder::RefreshReadonly(int catesel) { ...@@ -1627,11 +1659,26 @@ void DeckBuilder::RefreshReadonly(int catesel) {
mainGame->btnMoveDeck->setEnabled(hasDeck && !readonly); mainGame->btnMoveDeck->setEnabled(hasDeck && !readonly);
mainGame->btnCopyDeck->setEnabled(hasDeck); mainGame->btnCopyDeck->setEnabled(hasDeck);
} }
void DeckBuilder::RefreshPackListScroll() {
if(showing_pack) {
mainGame->scrPackCards->setPos(0);
int mainsize = deckManager.current_deck.main.size();
if(mainsize <= 7 * 12) {
mainGame->scrPackCards->setVisible(false);
} else {
mainGame->scrPackCards->setVisible(true);
mainGame->scrPackCards->setMax((int)ceil(((float)mainsize - 7 * 12) / 12.0f));
}
} else {
mainGame->scrPackCards->setVisible(false);
mainGame->scrPackCards->setPos(0);
}
}
void DeckBuilder::ChangeCategory(int catesel) { 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);
deckManager.LoadDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
RefreshReadonly(catesel); RefreshReadonly(catesel);
deckManager.LoadDeck(mainGame->cbDBCategory, mainGame->cbDBDecks);
is_modified = false; is_modified = false;
prev_category = catesel; prev_category = catesel;
prev_deck = 0; prev_deck = 0;
...@@ -1651,7 +1698,7 @@ void DeckBuilder::ShowDeckManage() { ...@@ -1651,7 +1698,7 @@ void DeckBuilder::ShowDeckManage() {
if(isdir) { if(isdir) {
lstCategories->addItem(name); lstCategories->addItem(name);
} }
}); });
lstCategories->setSelected(prev_category); lstCategories->setSelected(prev_category);
RefreshDeckList(); RefreshDeckList();
RefreshReadonly(prev_category); RefreshReadonly(prev_category);
......
...@@ -28,6 +28,7 @@ public: ...@@ -28,6 +28,7 @@ public:
void RefreshDeckList(); void RefreshDeckList();
void RefreshReadonly(int catesel); void RefreshReadonly(int catesel);
void RefreshPackListScroll();
void ChangeCategory(int catesel); void ChangeCategory(int catesel);
void ShowDeckManage(); void ShowDeckManage();
...@@ -78,11 +79,13 @@ public: ...@@ -78,11 +79,13 @@ public:
int prev_sel; int prev_sel;
bool is_modified; bool is_modified;
bool readonly; bool readonly;
bool showing_pack;
mt19937 rnd; mt19937 rnd;
std::unordered_map<int, int>* filterList; const std::unordered_map<int, int>* filterList;
std::vector<code_pointer> results; std::vector<code_pointer> results;
wchar_t result_string[8]; wchar_t result_string[8];
std::vector<std::wstring> expansionPacks;
}; };
} }
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
namespace ygo { namespace ygo {
char DeckManager::deckBuffer[0x10000];
DeckManager deckManager; DeckManager deckManager;
void DeckManager::LoadLFListSingle(const char* path) { void DeckManager::LoadLFListSingle(const char* path) {
...@@ -65,7 +66,7 @@ const wchar_t* DeckManager::GetLFListName(int lfhash) { ...@@ -65,7 +66,7 @@ const wchar_t* DeckManager::GetLFListName(int lfhash) {
return lit->listName.c_str(); return lit->listName.c_str();
return dataManager.unknown_string; return dataManager.unknown_string;
} }
std::unordered_map<int, int>* DeckManager::GetLFListContent(int lfhash) { const std::unordered_map<int, int>* DeckManager::GetLFListContent(int lfhash) {
auto lit = std::find_if(_lfList.begin(), _lfList.end(), [lfhash](const ygo::LFList& list) { auto lit = std::find_if(_lfList.begin(), _lfList.end(), [lfhash](const ygo::LFList& list) {
return list.hash == lfhash; return list.hash == lfhash;
}); });
...@@ -142,7 +143,7 @@ int DeckManager::CheckDeck(Deck& deck, int lfhash, int rule) { ...@@ -142,7 +143,7 @@ int DeckManager::CheckDeck(Deck& deck, int lfhash, int rule) {
} }
return 0; return 0;
} }
int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec) { int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, bool is_packlist) {
deck.clear(); deck.clear();
int code; int code;
int errorcode = 0; int errorcode = 0;
...@@ -155,6 +156,10 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec) { ...@@ -155,6 +156,10 @@ int DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec) {
} }
if(cd.type & TYPE_TOKEN) if(cd.type & TYPE_TOKEN)
continue; continue;
else if(is_packlist) {
deck.main.push_back(dataManager.GetCodePointer(code));
continue;
}
else if(cd.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) { else if(cd.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) {
if(deck.extra.size() >= 15) if(deck.extra.size() >= 15)
continue; continue;
...@@ -236,7 +241,11 @@ void DeckManager::GetDeckFile(wchar_t* ret, irr::gui::IGUIComboBox* cbCategory, ...@@ -236,7 +241,11 @@ void DeckManager::GetDeckFile(wchar_t* ret, irr::gui::IGUIComboBox* cbCategory,
bool DeckManager::LoadDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck) { bool DeckManager::LoadDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck) {
wchar_t filepath[256]; wchar_t filepath[256];
GetDeckFile(filepath, cbCategory, cbDeck); GetDeckFile(filepath, cbCategory, cbDeck);
return LoadDeck(filepath); bool is_packlist = cbCategory->getSelected() == 0;
bool res = LoadDeck(filepath, is_packlist);
if(res && mainGame->is_building)
mainGame->deckBuilder.RefreshPackListScroll();
return res;
} }
FILE* DeckManager::OpenDeckFile(const wchar_t* file, const char* mode) { FILE* DeckManager::OpenDeckFile(const wchar_t* file, const char* mode) {
#ifdef WIN32 #ifdef WIN32
...@@ -248,20 +257,43 @@ FILE* DeckManager::OpenDeckFile(const wchar_t* file, const char* mode) { ...@@ -248,20 +257,43 @@ FILE* DeckManager::OpenDeckFile(const wchar_t* file, const char* mode) {
#endif #endif
return fp; return fp;
} }
bool DeckManager::LoadDeck(const wchar_t* file) { IReadFile* DeckManager::OpenDeckReader(const wchar_t* file) {
int sp = 0, ct = 0, mainc = 0, sidec = 0, code; char file2[256];
FILE* fp = OpenDeckFile(file, "r"); BufferIO::EncodeUTF8(file, file2);
if(!fp) { IReadFile* reader = dataManager.FileSystem->createAndOpenFile(file2);
return reader;
}
bool DeckManager::LoadDeck(const wchar_t* file, bool is_packlist) {
IReadFile* reader = OpenDeckReader(file);
if(!reader) {
wchar_t localfile[64]; wchar_t localfile[64];
myswprintf(localfile, L"./deck/%ls.ydk", file); myswprintf(localfile, L"./deck/%ls.ydk", file);
fp = OpenDeckFile(localfile, "r"); reader = OpenDeckReader(localfile);
} }
if(!fp) if(!reader && !wcsncasecmp(file, L"./pack", 6)) {
wchar_t zipfile[64];
myswprintf(zipfile, L"%ls", file + 2);
reader = OpenDeckReader(zipfile);
}
if(!reader)
return false;
size_t size = reader->getSize();
if(size >= 0x20000) {
reader->drop();
return false; return false;
int cardlist[128]; }
memset(deckBuffer, 0, sizeof(deckBuffer));
reader->read(deckBuffer, size);
reader->drop();
std::istringstream deckStream(deckBuffer);
return LoadDeck(&deckStream, is_packlist);
}
bool DeckManager::LoadDeck(std::istringstream* deckStream, bool is_packlist) {
int sp = 0, ct = 0, mainc = 0, sidec = 0, code;
int cardlist[300];
bool is_side = false; bool is_side = false;
char linebuf[256]; std::string linebuf;
while(fgets(linebuf, 256, fp) && ct < 128) { while(std::getline(*deckStream, linebuf) && ct < 300) {
if(linebuf[0] == '!') { if(linebuf[0] == '!') {
is_side = true; is_side = true;
continue; continue;
...@@ -271,14 +303,13 @@ bool DeckManager::LoadDeck(const wchar_t* file) { ...@@ -271,14 +303,13 @@ bool DeckManager::LoadDeck(const wchar_t* file) {
sp = 0; sp = 0;
while(linebuf[sp] >= '0' && linebuf[sp] <= '9') sp++; while(linebuf[sp] >= '0' && linebuf[sp] <= '9') sp++;
linebuf[sp] = 0; linebuf[sp] = 0;
code = atoi(linebuf); code = std::stoi(linebuf);
cardlist[ct++] = code; cardlist[ct++] = code;
if(is_side) sidec++; if(is_side) sidec++;
else mainc++; else mainc++;
} }
fclose(fp); LoadDeck(current_deck, cardlist, mainc, sidec, is_packlist);
LoadDeck(current_deck, cardlist, mainc, sidec); return true; // the above LoadDeck has return value but we ignore it here for now
return true;
} }
bool DeckManager::SaveDeck(Deck& deck, const wchar_t* file) { bool DeckManager::SaveDeck(Deck& deck, const wchar_t* file) {
if(!FileSystem::IsDirExists(L"./deck") && !FileSystem::MakeDir(L"./deck")) if(!FileSystem::IsDirExists(L"./deck") && !FileSystem::MakeDir(L"./deck"))
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "client_card.h" #include "client_card.h"
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include <sstream>
namespace ygo { namespace ygo {
...@@ -35,18 +36,22 @@ public: ...@@ -35,18 +36,22 @@ public:
Deck current_deck; Deck current_deck;
std::vector<LFList> _lfList; std::vector<LFList> _lfList;
static char deckBuffer[0x10000];
void LoadLFListSingle(const char* path); void LoadLFListSingle(const char* path);
void LoadLFList(android::InitOptions *options); void LoadLFList(android::InitOptions *options);
const wchar_t* GetLFListName(int lfhash); const wchar_t* GetLFListName(int lfhash);
std::unordered_map<int, int>* GetLFListContent(int lfhash); const std::unordered_map<int, int>* GetLFListContent(int lfhash);
int CheckDeck(Deck& deck, int lfhash, int rule); int CheckDeck(Deck& deck, int lfhash, int rule);
int LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec); int LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec, 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, irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck);
bool LoadDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck); bool LoadDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck);
FILE* OpenDeckFile(const wchar_t * file, const char * mode); FILE* OpenDeckFile(const wchar_t* file, const char* mode);
bool LoadDeck(const wchar_t* file); IReadFile* OpenDeckReader(const wchar_t* file);
bool LoadDeck(const wchar_t* file, bool is_packlist = false);
bool LoadDeck(std::istringstream* deckStream, bool is_packlist = false);
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);
bool CreateCategory(const wchar_t* name); bool CreateCategory(const wchar_t* name);
......
This diff is collapsed.
...@@ -394,6 +394,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) { ...@@ -394,6 +394,8 @@ void DuelClient::HandleSTOCPacketLan(char* data, unsigned int len) {
mainGame->deckBuilder.hovered_code = 0; mainGame->deckBuilder.hovered_code = 0;
mainGame->deckBuilder.is_draging = false; mainGame->deckBuilder.is_draging = false;
mainGame->deckBuilder.is_starting_dragging = false; mainGame->deckBuilder.is_starting_dragging = false;
mainGame->deckBuilder.readonly = false;
mainGame->deckBuilder.showing_pack = false;
mainGame->deckBuilder.pre_mainc = deckManager.current_deck.main.size(); mainGame->deckBuilder.pre_mainc = deckManager.current_deck.main.size();
mainGame->deckBuilder.pre_extrac = deckManager.current_deck.extra.size(); mainGame->deckBuilder.pre_extrac = deckManager.current_deck.extra.size();
mainGame->deckBuilder.pre_sidec = deckManager.current_deck.side.size(); mainGame->deckBuilder.pre_sidec = deckManager.current_deck.side.size();
......
...@@ -906,6 +906,10 @@ bool Game::Initialize(ANDROID_APP app, android::InitOptions *options) { ...@@ -906,6 +906,10 @@ bool Game::Initialize(ANDROID_APP app, android::InitOptions *options) {
btnDMOK = env->addButton(rect<s32>(70 * xScale, 100 * yScale, 160 * xScale, 150 * yScale), wDMQuery, BUTTON_DM_OK, dataManager.GetSysString(1211)); btnDMOK = env->addButton(rect<s32>(70 * xScale, 100 * yScale, 160 * xScale, 150 * yScale), wDMQuery, BUTTON_DM_OK, dataManager.GetSysString(1211));
ChangeToIGUIImageButton(btnDMOK, imageManager.tButton_S, imageManager.tButton_S_pressed); ChangeToIGUIImageButton(btnDMOK, imageManager.tButton_S, imageManager.tButton_S_pressed);
btnDMCancel = env->addButton(rect<s32>(180 * xScale, 100 * yScale, 270 * xScale, 150 * yScale), wDMQuery, BUTTON_DM_CANCEL, dataManager.GetSysString(1212)); btnDMCancel = env->addButton(rect<s32>(180 * xScale, 100 * yScale, 270 * xScale, 150 * yScale), wDMQuery, BUTTON_DM_CANCEL, dataManager.GetSysString(1212));
scrPackCards = env->addScrollBar(false, recti(775 * xScale, 161 * yScale, 795 * xScale, 629 * yScale), 0, SCROLL_FILTER);
scrPackCards->setLargeStep(1);
scrPackCards->setSmallStep(1);
scrPackCards->setVisible(false);
ChangeToIGUIImageButton(btnDMCancel, imageManager.tButton_S, imageManager.tButton_S_pressed); ChangeToIGUIImageButton(btnDMCancel, imageManager.tButton_S, imageManager.tButton_S_pressed);
stDBCategory = env->addStaticText(dataManager.GetSysString(1300), rect<s32>(10 * xScale, 9 * yScale, 100 * xScale, 29 * yScale), false, false, wDeckEdit); stDBCategory = env->addStaticText(dataManager.GetSysString(1300), rect<s32>(10 * xScale, 9 * yScale, 100 * xScale, 29 * yScale), false, false, wDeckEdit);
cbDBCategory = CAndroidGUIComboBox::addAndroidComboBox(env, rect<s32>(80 * xScale, 5 * yScale, 220 * xScale, 30 * yScale), wDeckEdit, COMBOBOX_DBCATEGORY); cbDBCategory = CAndroidGUIComboBox::addAndroidComboBox(env, rect<s32>(80 * xScale, 5 * yScale, 220 * xScale, 30 * yScale), wDeckEdit, COMBOBOX_DBCATEGORY);
...@@ -1635,19 +1639,29 @@ void Game::RefreshCategoryDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGU ...@@ -1635,19 +1639,29 @@ void Game::RefreshCategoryDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGU
} }
} }
void Game::RefreshDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck) { void Game::RefreshDeck(irr::gui::IGUIComboBox* cbCategory, irr::gui::IGUIComboBox* cbDeck) {
if(cbCategory != cbDBCategory && cbCategory->getSelected() == 0) {
// can't use pack list in duel
cbDeck->clear();
return;
}
wchar_t catepath[256]; wchar_t catepath[256];
deckManager.GetCategoryPath(catepath, cbCategory->getSelected(), cbCategory->getText()); deckManager.GetCategoryPath(catepath, cbCategory->getSelected(), cbCategory->getText());
RefreshDeck(catepath, cbDeck);
}
void Game::RefreshDeck(const wchar_t* deckpath, irr::gui::IGUIComboBox* cbDeck) {
cbDeck->clear(); cbDeck->clear();
FileSystem::TraversalDir(deckpath, [cbDeck](const wchar_t* name, bool isdir) { RefreshDeck(catepath, [cbDeck](const wchar_t* item) { cbDeck->addItem(item); });
}
void Game::RefreshDeck(const wchar_t* deckpath, const std::function<void(const wchar_t*)>& additem) {
if(!wcsncasecmp(deckpath, L"./pack", 6)) {
for(auto pack : deckBuilder.expansionPacks) {
additem(pack.substr(5, pack.size() - 9).c_str());
}
}
FileSystem::TraversalDir(deckpath, [additem](const wchar_t* name, bool isdir) {
if(!isdir && wcsrchr(name, '.') && !wcsncasecmp(wcsrchr(name, '.'), L".ydk", 4)) { if(!isdir && wcsrchr(name, '.') && !wcsncasecmp(wcsrchr(name, '.'), L".ydk", 4)) {
size_t len = wcslen(name); size_t len = wcslen(name);
wchar_t deckname[256]; wchar_t deckname[256];
wcsncpy(deckname, name, len - 4); wcsncpy(deckname, name, len - 4);
deckname[len - 4] = 0; deckname[len - 4] = 0;
cbDeck->addItem(deckname); additem(deckname);
} }
}); });
} }
......
This diff is collapsed.
...@@ -486,6 +486,7 @@ ...@@ -486,6 +486,7 @@
!system 1474 已存在同名分类 !system 1474 已存在同名分类
!system 1475 已存在同名卡组 !system 1475 已存在同名卡组
!system 1476 删除失败 !system 1476 删除失败
!system 1477 卡片数:
!system 1481 OCG !system 1481 OCG
!system 1482 TCG !system 1482 TCG
!system 1483 简体中文 !system 1483 简体中文
......
...@@ -486,6 +486,7 @@ ...@@ -486,6 +486,7 @@
!system 1474 There is already a category with this name. !system 1474 There is already a category with this name.
!system 1475 There is already a deck with this name. !system 1475 There is already a deck with this name.
!system 1476 Delete failed. !system 1476 Delete failed.
!system 1477 count:
!system 1481 OCG !system 1481 OCG
!system 1482 TCG !system 1482 TCG
!system 1483 Simplified Chinese !system 1483 Simplified Chinese
......
...@@ -486,6 +486,7 @@ ...@@ -486,6 +486,7 @@
!system 1474 같은 이름의 카테고리가 존재합니다. !system 1474 같은 이름의 카테고리가 존재합니다.
!system 1475 같은 이름의 덱이 존재합니다. !system 1475 같은 이름의 덱이 존재합니다.
!system 1476 제거 실패 !system 1476 제거 실패
!system 1477 계수:
!system 1481 OCG !system 1481 OCG
!system 1482 TCG !system 1482 TCG
!system 1483 CCG !system 1483 CCG
......
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