Commit 822aa75f authored by edo9300's avatar edo9300

improved card search, fixed text infobox and chat

parent 416a3123
......@@ -263,6 +263,31 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
}
break;
}
case irr::gui::EGET_EDITBOX_CHANGED: {
switch (id) {
case EDITBOX_KEYWORD: {
stringw filter = mainGame->ebCardName->getText();
if (filter.size() > 2) {
filter_type = mainGame->cbCardType->getSelected();
filter_type2 = mainGame->cbCardType2->getItemData(mainGame->cbCardType2->getSelected());
filter_lm = mainGame->cbLimit->getSelected();
if (filter_type == 1) {
filter_attrib = mainGame->cbAttribute->getItemData(mainGame->cbAttribute->getSelected());
filter_race = mainGame->cbRace->getItemData(mainGame->cbRace->getSelected());
filter_atk = parse_filter(mainGame->ebAttack->getText(), &filter_atktype);
filter_def = parse_filter(mainGame->ebDefense->getText(), &filter_deftype);
filter_lv = parse_filter(mainGame->ebStar->getText(), &filter_lvtype);
filter_scl = parse_filter(mainGame->ebScale->getText(), &filter_scltype);
}
FilterCards();
if (!mainGame->gameConf.separate_clear_button)
ClearFilter();
}
break;
}
}
break;
}
case irr::gui::EGET_COMBO_BOX_CHANGED: {
switch(id) {
case COMBOBOX_DBLFLIST: {
......@@ -361,6 +386,37 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break;
}
}
filter_type = mainGame->cbCardType->getSelected();
filter_type2 = mainGame->cbCardType2->getItemData(mainGame->cbCardType2->getSelected());
filter_lm = mainGame->cbLimit->getSelected();
if (filter_type == 1) {
filter_attrib = mainGame->cbAttribute->getItemData(mainGame->cbAttribute->getSelected());
filter_race = mainGame->cbRace->getItemData(mainGame->cbRace->getSelected());
filter_atk = parse_filter(mainGame->ebAttack->getText(), &filter_atktype);
filter_def = parse_filter(mainGame->ebDefense->getText(), &filter_deftype);
filter_lv = parse_filter(mainGame->ebStar->getText(), &filter_lvtype);
filter_scl = parse_filter(mainGame->ebScale->getText(), &filter_scltype);
}
FilterCards();
if (!mainGame->gameConf.separate_clear_button)
ClearFilter();
break;
}
case COMBOBOX_OTHER_FILT: {
filter_type = mainGame->cbCardType->getSelected();
filter_type2 = mainGame->cbCardType2->getItemData(mainGame->cbCardType2->getSelected());
filter_lm = mainGame->cbLimit->getSelected();
if(filter_type == 1) {
filter_attrib = mainGame->cbAttribute->getItemData(mainGame->cbAttribute->getSelected());
filter_race = mainGame->cbRace->getItemData(mainGame->cbRace->getSelected());
filter_atk = parse_filter(mainGame->ebAttack->getText(), &filter_atktype);
filter_def = parse_filter(mainGame->ebDefense->getText(), &filter_deftype);
filter_lv = parse_filter(mainGame->ebStar->getText(), &filter_lvtype);
filter_scl = parse_filter(mainGame->ebScale->getText(), &filter_scltype);
}
FilterCards();
if(!mainGame->gameConf.separate_clear_button)
ClearFilter();
break;
}
case COMBOBOX_SORTTYPE: {
......@@ -772,9 +828,7 @@ void DeckBuilder::FilterCards() {
return;
}
unsigned int set_code = 0;
if(pstr[0] == L'@')
set_code = dataManager.GetSetCode(&pstr[1]);
if(pstr[0] == 0 || (pstr[0] == L'$' && pstr[1] == 0) || (pstr[0] == L'@' && pstr[1] == 0))
if(pstr[0] == 0)
pstr = 0;
auto strpointer = dataManager._strings.begin();
for(code_pointer ptr = dataManager._datas.begin(); ptr != dataManager._datas.end(); ++ptr, ++strpointer) {
......@@ -846,19 +900,12 @@ void DeckBuilder::FilterCards() {
continue;
}
if(pstr) {
if(pstr[0] == L'$') {
if(wcsstr(text.name, &pstr[1]) == 0)
continue;
} else if(pstr[0] == L'@' && set_code) {
if(!check_set_code(data, set_code)) continue;
} else {
if(wcsstr(text.name, pstr) == 0 && wcsstr(text.text, pstr) == 0) {
if(!(CardNameCompare(text.name, pstr)) && !(CardNameCompare(text.text, pstr))) {
set_code = dataManager.GetSetCode(&pstr[0]);
if(!set_code || !check_set_code(data, set_code))
if (!set_code || !check_set_code(data, set_code))
continue;
}
}
}
results.push_back(ptr);
}
myswprintf(result_string, L"%d", results.size());
......@@ -872,6 +919,33 @@ void DeckBuilder::FilterCards() {
}
SortList();
}
bool DeckBuilder::CardNameCompare(const wchar_t *sa, const wchar_t *sb)
{
int i = 0;
int j = 0;
wchar_t ca;
wchar_t cb;
if (!sa || !sb)
return false;
while (sa[i])
{
ca = towupper(sa[i]);
cb = towupper(sb[j]);
if (ca == '-') ca = ' ';
if (cb == '-') cb = ' ';
if (ca == cb)
{
j++;
if (!sb[j])
return true;
}
else
j = 0;
i++;
}
return false;
}
void DeckBuilder::ClearSearch() {
mainGame->cbCardType->setSelected(0);
mainGame->cbCardType2->setSelected(0);
......
......@@ -16,6 +16,8 @@ public:
void ClearSearch();
void SortList();
static bool CardNameCompare(const wchar_t *sa, const wchar_t *sb);
long long filter_effect;
unsigned int filter_type;
unsigned int filter_type2;
......
......@@ -66,6 +66,15 @@ wchar_t* DeckManager::GetLFListName(int lfhash) {
}
return (wchar_t*)dataManager.unknown_string;
}
int DeckManager::TypeCount(std::vector<code_pointer> cards, int type) {
int count = 0;
for (size_t i = 0; i < cards.size(); ++i) {
code_pointer cit = cards[i];
if (cit->second.type & type)
count++;
}
return count;
}
int DeckManager::CheckLFList(Deck& deck, int lfhash, bool allow_ocg, bool allow_tcg) {
std::unordered_map<int, int> ccount;
std::unordered_map<int, int>* list = 0;
......
......@@ -38,6 +38,7 @@ public:
void LoadLFList();
wchar_t* GetLFListName(int lfhash);
int CheckLFList(Deck& deck, int lfhash, bool allow_ocg, bool allow_tcg);
int TypeCount(std::vector<code_pointer> cards, int type);
void LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec);
bool LoadSide(Deck& deck, int* dbuf, int mainc, int sidec);
bool LoadDeck(const wchar_t* file);
......
This diff is collapsed.
......@@ -1783,7 +1783,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
}
should_show_tip = true;
irr::core::dimension2d<unsigned int> dtip = mainGame->textFont->getDimension(str.c_str()) + irr::core::dimension2d<unsigned int>(10, 10);
mainGame->stTip->setRelativePosition(recti(x - 10 - dtip.Width, y - 10 - dtip.Height, x - 10, y - 10));
mainGame->stTip->setRelativePosition(recti(mousepos.X - 10 - dtip.Width, mousepos.Y - 10 - dtip.Height, mousepos.X - 10, mousepos.Y - 10));
mainGame->stTip->setText(str.c_str());
}
} else {
......@@ -1821,7 +1821,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
}
should_show_tip = true;
irr::core::dimension2d<unsigned int> dtip = mainGame->textFont->getDimension(str.c_str()) + irr::core::dimension2d<unsigned int>(10, 10);
mainGame->stTip->setRelativePosition(recti(x - 10 - dtip.Width, y + 10, x - 10, y + 10 + dtip.Height));
mainGame->stTip->setRelativePosition(recti(mousepos.X - 10 - dtip.Width, mousepos.Y + 10, mousepos.X - 10, mousepos.Y + 10 + dtip.Height));
mainGame->stTip->setText(str.c_str());
}
hovered_player = mplayer;
......
......@@ -453,11 +453,11 @@ bool Game::Initialize() {
cbCardType->addItem(dataManager.GetSysString(1312));
cbCardType->addItem(dataManager.GetSysString(1313));
cbCardType->addItem(dataManager.GetSysString(1314));
cbCardType2 = env->addComboBox(rect<s32>(125, 25 / 6, 200, 20 + 25 / 6), wFilter, -1);
cbCardType2 = env->addComboBox(rect<s32>(125, 25 / 6, 200, 20 + 25 / 6), wFilter, COMBOBOX_OTHER_FILT);
cbCardType2->setMaxSelectionRows(10);
cbCardType2->addItem(dataManager.GetSysString(1310), 0);
stLimit = env->addStaticText(dataManager.GetSysString(1315), rect<s32>(205, 2 + 25 / 6, 280, 22 + 25 / 6), false, false, wFilter);
cbLimit = env->addComboBox(rect<s32>(260, 25 / 6, 390, 20 + 25 / 6), wFilter, -1);
cbLimit = env->addComboBox(rect<s32>(260, 25 / 6, 390, 20 + 25 / 6), wFilter, COMBOBOX_OTHER_FILT);
cbLimit->setMaxSelectionRows(10);
cbLimit->addItem(dataManager.GetSysString(1310));
cbLimit->addItem(dataManager.GetSysString(1316));
......@@ -468,13 +468,13 @@ bool Game::Initialize() {
cbLimit->addItem(dataManager.GetSysString(1242));
cbLimit->addItem(dataManager.GetSysString(1243));
stAttribute = env->addStaticText(dataManager.GetSysString(1319), rect<s32>(10, 22 + 50 / 6, 70, 42 + 50 / 6), false, false, wFilter);
cbAttribute = env->addComboBox(rect<s32>(60, 20 + 50 / 6, 190, 40 + 50 / 6), wFilter, -1);
cbAttribute = env->addComboBox(rect<s32>(60, 20 + 50 / 6, 190, 40 + 50 / 6), wFilter, COMBOBOX_OTHER_FILT);
cbAttribute->setMaxSelectionRows(10);
cbAttribute->addItem(dataManager.GetSysString(1310), 0);
for(int filter = 0x1; filter != 0x80; filter <<= 1)
cbAttribute->addItem(dataManager.FormatAttribute(filter), filter);
stRace = env->addStaticText(dataManager.GetSysString(1321), rect<s32>(10, 42 + 75 / 6, 70, 62 + 75 / 6), false, false, wFilter);
cbRace = env->addComboBox(rect<s32>(60, 40 + 75 / 6, 190, 60 + 75 / 6), wFilter, -1);
cbRace = env->addComboBox(rect<s32>(60, 40 + 75 / 6, 190, 60 + 75 / 6), wFilter, COMBOBOX_OTHER_FILT);
cbRace->setMaxSelectionRows(10);
cbRace->addItem(dataManager.GetSysString(1310), 0);
for(int filter = 0x1; filter != 0x1000000; filter <<= 1)
......@@ -713,27 +713,41 @@ void Game::InitStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth, u32 cH
scrCardText->setPos(0);
}
void Game::SetStaticText(irr::gui::IGUIStaticText* pControl, u32 cWidth, irr::gui::CGUITTFont* font, const wchar_t* text, u32 pos) {
int pbuffer = 0;
u32 _width = 0, _height = 0;
for(size_t i = 0; text[i] != 0 && i < wcslen(text); ++i) {
u32 w = font->getCharDimension(text[i]).Width;
if(text[i] == L'\n') {
int pbuffer = 0, lsnz = 0;
u32 _width = 0, _height = 0, s = font->getCharDimension(L' ').Width;
for (size_t i = 0; text[i] != 0 && i < wcslen(text); ++i) {
if (text[i] == L' ') {
lsnz = i;
if (_width + s > cWidth) {
dataManager.strBuffer[pbuffer++] = L'\n';
_width = 0;
_height++;
if(_height == pos)
pbuffer = 0;
continue;
} else if(_width > 0 && _width + w > cWidth) {
}
else {
dataManager.strBuffer[pbuffer++] = L' ';
_width += s;
}
}
else if(text[i] == L'\n') {
dataManager.strBuffer[pbuffer++] = L'\n';
_width = 0;
_height++;
if(_height == pos)
pbuffer = 0;
}
_width += w;
else {
if((_width += font->getCharDimension(text[i]).Width) > cWidth) {
dataManager.strBuffer[lsnz] = L'\n';
_width = 0;
for(int j = lsnz + 1; j < i; j++) {
_width += font->getCharDimension(text[j]).Width;
}
}
dataManager.strBuffer[pbuffer++] = text[i];
}
}
dataManager.strBuffer[pbuffer] = 0;
pControl->setText(dataManager.strBuffer);
}
......@@ -1075,7 +1089,7 @@ void Game::ShowCardInfo(int code) {
}
showingtext = dataManager.GetText(code);
const auto& tsize = stText->getRelativePosition();
InitStaticText(stText, tsize.getWidth(), tsize.getHeight(), textFont, showingtext);
InitStaticText(stText, tsize.getWidth() - 30, tsize.getHeight(), textFont, showingtext);
}
void Game::AddChatMsg(wchar_t* msg, int player) {
for(int i = 7; i > 0; --i) {
......
......@@ -545,6 +545,7 @@ extern Game* mainGame;
#define SCROLL_FILTER 314
#define EDITBOX_KEYWORD 315
#define BUTTON_CLEAR_FILTER 316
#define COMBOBOX_OTHER_FILT 319
#define BUTTON_REPLAY_START 320
#define BUTTON_REPLAY_PAUSE 321
#define BUTTON_REPLAY_STEP 322
......
......@@ -76,7 +76,7 @@ irr::video::ITexture* ImageManager::GetTexture(int code) {
if(tit->second)
return tit->second;
else
return GetTextureThumb(code);
return tUnknown;
}
irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
if(code == 0)
......@@ -101,7 +101,7 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
if(tit->second)
return tit->second;
else
return tUnknown;
return GetTexture(code);
}
irr::video::ITexture* ImageManager::GetTextureField(int code) {
if(code == 0)
......
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