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,8 +386,39 @@ 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: {
SortList();
mainGame->env->setFocus(0);
......@@ -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,17 +900,10 @@ void DeckBuilder::FilterCards() {
continue;
}
if(pstr) {
if(pstr[0] == L'$') {
if(wcsstr(text.name, &pstr[1]) == 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))
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) {
set_code = dataManager.GetSetCode(&pstr[0]);
if(!set_code || !check_set_code(data, set_code))
continue;
}
}
}
results.push_back(ptr);
......@@ -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);
......
......@@ -674,7 +674,7 @@ void Game::DrawSpec() {
break;
}
case 6: {
driver->draw2DImage(imageManager.GetTexture(showcardcode), position2di(574, 150));
driver->draw2DImage(imageManager.GetTexture(showcardcode), mainGame->Resize(574, 150));
driver->draw2DImage(imageManager.tNumber, mainGame->ResizeElem(536 + showcarddif, 141 + showcarddif, 793 - showcarddif, 397 - showcarddif),
recti((showcardp % 5) * 64, (showcardp / 5) * 64, (showcardp % 5 + 1) * 64, (showcardp / 5 + 1) * 64), 0, 0, true);
if(showcarddif < 64)
......@@ -701,8 +701,8 @@ void Game::DrawSpec() {
}
case 100: {
if(showcardp < 60) {
driver->draw2DImage(imageManager.tHand[(showcardcode >> 16) & 0x3], position2di(615, showcarddif));
driver->draw2DImage(imageManager.tHand[showcardcode & 0x3], position2di(615, 540 - showcarddif));
driver->draw2DImage(imageManager.tHand[(showcardcode >> 16) & 0x3], mainGame->Resize(615, showcarddif));
driver->draw2DImage(imageManager.tHand[showcardcode & 0x3], mainGame->Resize(615, 540 - showcarddif));
float dy = -0.333333f * showcardp + 10;
showcardp++;
if(showcardp < 30)
......@@ -769,6 +769,7 @@ void Game::DrawSpec() {
if(dInfo.vic_string && (showcardcode == 1 || showcardcode == 2)) {
s32 vicx = (260 + pos.Width) / 2 - 260;
recti vicloc = recti(loc.UpperLeftCorner.X + vicx, loc.UpperLeftCorner.Y + 50, loc.UpperLeftCorner.X + vicx + 260, loc.UpperLeftCorner.Y + 70);
vicloc += position2di(2, 2);
driver->draw2DRectangle(0xa0000000, vicloc);
guiFont->draw(dInfo.vic_string, vicloc, 0xff000000, true, true);
vicloc.UpperLeftCorner.X -= 2;
......@@ -813,9 +814,16 @@ void Game::DrawSpec() {
if(!showChat && i > 2)
continue;
int w = textFont->getDimension(chatMsg[i].c_str()).Width;
driver->draw2DRectangle(recti(305, 596 - 20 * i, 307 + w, 616 - 20 * i), 0xa0000000, 0xa0000000, 0xa0000000, 0xa0000000);
textFont->draw(chatMsg[i].c_str(), rect<s32>(305, 595 - 20 * i, 1020, 615 - 20 * i), 0xff000000, false, false);
textFont->draw(chatMsg[i].c_str(), rect<s32>(306, 596 - 20 * i, 1021, 616 - 20 * i), chatColor[chatType[i]], false, false);
recti rectloc(305, mainGame->window_size.Height - 45, 307 + w, mainGame->window_size.Height - 25);
rectloc -= position2di(0, i * 20);
recti msgloc(305, mainGame->window_size.Height - 45, mainGame->window_size.Width - 4, mainGame->window_size.Height - 25);
msgloc -= position2di(0, i * 20);
recti shadowloc = msgloc + position2di(1, 1);
driver->draw2DRectangle(rectloc, 0xa0000000, 0xa0000000, 0xa0000000, 0xa0000000);
textFont->draw(chatMsg[i].c_str(), msgloc, 0xff000000, false, false);
textFont->draw(chatMsg[i].c_str(), shadowloc, chatColor[chatType[i]], false, false);
}
}
}
......@@ -954,13 +962,22 @@ void Game::DrawThumb(code_pointer cp, position2di pos, std::unordered_map<int, i
void Game::DrawDeckBd() {
wchar_t textBuffer[64];
//main deck
driver->draw2DRectangle(mainGame->Resize(310, 137, 410, 157), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
driver->draw2DRectangleOutline(mainGame->Resize(309, 136, 410, 157));
driver->draw2DRectangle(mainGame->Resize(310, 137, 797, 157), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
driver->draw2DRectangleOutline(mainGame->Resize(309, 136, 797, 157));
textFont->draw(dataManager.GetSysString(1330), mainGame->Resize(314, 136, 409, 156), 0xff000000, false, true);
textFont->draw(dataManager.GetSysString(1330), mainGame->Resize(315, 137, 410, 157), 0xffffffff, false, true);
numFont->draw(dataManager.numStrings[deckManager.current_deck.main.size()], mainGame->Resize(379, 137, 439, 157), 0xff000000, false, true);
numFont->draw(dataManager.numStrings[deckManager.current_deck.main.size()], mainGame->Resize(380, 138, 440, 158), 0xffffffff, false, true);
driver->draw2DRectangle(mainGame->Resize(310, 160, 797, 436), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
recti mainpos = mainGame->Resize(310, 137, 797, 157);
stringw mainDeckTypeCount = stringw(dataManager.GetSysString(1312)) + " " + stringw(deckManager.TypeCount(deckManager.current_deck.main, TYPE_MONSTER)) + " " +
stringw(dataManager.GetSysString(1313)) + " " + stringw(deckManager.TypeCount(deckManager.current_deck.main, TYPE_SPELL)) + " " +
stringw(dataManager.GetSysString(1314)) + " " + stringw(deckManager.TypeCount(deckManager.current_deck.main, TYPE_TRAP));
irr::core::dimension2d<u32> mainDeckTypeSize = textFont->getDimension(mainDeckTypeCount);
textFont->draw(mainDeckTypeCount, recti(mainpos.LowerRightCorner.X - mainDeckTypeSize.Width - 5, mainpos.UpperLeftCorner.Y,
mainpos.LowerRightCorner.X, mainpos.LowerRightCorner.Y), 0xff000000, false, true);
textFont->draw(mainDeckTypeCount, recti(mainpos.LowerRightCorner.X - mainDeckTypeSize.Width - 4, mainpos.UpperLeftCorner.Y + 1,
mainpos.LowerRightCorner.X + 1, mainpos.LowerRightCorner.Y + 1), 0xffffffff, false, true);
driver->draw2DRectangleOutline(mainGame->Resize(309, 159, 797, 436));
int lx;
float dx;
......@@ -977,12 +994,21 @@ void Game::DrawDeckBd() {
driver->draw2DRectangleOutline(mainGame->Resize(313 + (i % lx) * dx, 163 + (i / lx) * 68, 359 + (i % lx) * dx, 228 + (i / lx) * 68));
}
//extra deck
driver->draw2DRectangle(mainGame->Resize(310, 440, 410, 460), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
driver->draw2DRectangleOutline(mainGame->Resize(309, 439, 410, 460));
driver->draw2DRectangle(mainGame->Resize(310, 440, 797, 460), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
driver->draw2DRectangleOutline(mainGame->Resize(309, 439, 797, 460));
textFont->draw(dataManager.GetSysString(1331), mainGame->Resize(314, 439, 409, 459), 0xff000000, false, true);
textFont->draw(dataManager.GetSysString(1331), mainGame->Resize(315, 440, 410, 460), 0xffffffff, false, true);
numFont->draw(dataManager.numStrings[deckManager.current_deck.extra.size()], mainGame->Resize(379, 440, 439, 460), 0xff000000, false, true);
numFont->draw(dataManager.numStrings[deckManager.current_deck.extra.size()], mainGame->Resize(380, 441, 440, 461), 0xffffffff, false, true);
recti extrapos = mainGame->Resize(310, 440, 797, 460);
stringw extraDeckTypeCount = stringw(dataManager.GetSysString(1056)) + " " + stringw(deckManager.TypeCount(deckManager.current_deck.extra, TYPE_FUSION)) + " " +
stringw(dataManager.GetSysString(1073)) + " " + stringw(deckManager.TypeCount(deckManager.current_deck.extra, TYPE_XYZ)) + " " +
stringw(dataManager.GetSysString(1063)) + " " + stringw(deckManager.TypeCount(deckManager.current_deck.extra, TYPE_SYNCHRO));
irr::core::dimension2d<u32> extraDeckTypeSize = textFont->getDimension(extraDeckTypeCount);
textFont->draw(extraDeckTypeCount, recti(extrapos.LowerRightCorner.X - extraDeckTypeSize.Width - 5, extrapos.UpperLeftCorner.Y,
extrapos.LowerRightCorner.X, extrapos.LowerRightCorner.Y), 0xff000000, false, true);
textFont->draw(extraDeckTypeCount, recti(extrapos.LowerRightCorner.X - extraDeckTypeSize.Width - 4, extrapos.UpperLeftCorner.Y + 1,
extrapos.LowerRightCorner.X + 1, extrapos.LowerRightCorner.Y + 1), 0xffffffff, false, true);
driver->draw2DRectangle(mainGame->Resize(310, 463, 797, 533), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
driver->draw2DRectangleOutline(mainGame->Resize(309, 462, 797, 533));
if(deckManager.current_deck.extra.size() <= 10)
......@@ -994,12 +1020,21 @@ void Game::DrawDeckBd() {
driver->draw2DRectangleOutline(mainGame->Resize(313 + i * dx, 465, 359 + i * dx, 531));
}
//side deck
driver->draw2DRectangle(mainGame->Resize(310, 537, 410, 557), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
driver->draw2DRectangleOutline(mainGame->Resize(309, 536, 410, 557));
driver->draw2DRectangle(mainGame->Resize(310, 537, 797, 557), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
driver->draw2DRectangleOutline(mainGame->Resize(309, 536, 797, 557));
textFont->draw(dataManager.GetSysString(1332), mainGame->Resize(314, 536, 409, 556), 0xff000000, false, true);
textFont->draw(dataManager.GetSysString(1332), mainGame->Resize(315, 537, 410, 557), 0xffffffff, false, true);
numFont->draw(dataManager.numStrings[deckManager.current_deck.side.size()], mainGame->Resize(379, 537, 439, 557), 0xff000000, false, true);
numFont->draw(dataManager.numStrings[deckManager.current_deck.side.size()], mainGame->Resize(380, 538, 440, 558), 0xffffffff, false, true);
numFont->draw(dataManager.numStrings[deckManager.current_deck.side.size()], mainGame->Resize(379, 537, 439, 557), 0xffffffff, false, true);
recti sidepos = mainGame->Resize(310, 537, 797, 557);
stringw sideDeckTypeCount = stringw(dataManager.GetSysString(1312)) + " " + stringw(deckManager.TypeCount(deckManager.current_deck.side, TYPE_MONSTER)) + " " +
stringw(dataManager.GetSysString(1313)) + " " + stringw(deckManager.TypeCount(deckManager.current_deck.side, TYPE_SPELL)) + " " +
stringw(dataManager.GetSysString(1314)) + " " + stringw(deckManager.TypeCount(deckManager.current_deck.side, TYPE_TRAP));
irr::core::dimension2d<u32> sideDeckTypeSize = textFont->getDimension(sideDeckTypeCount);
textFont->draw(sideDeckTypeCount, recti(sidepos.LowerRightCorner.X - sideDeckTypeSize.Width - 5, sidepos.UpperLeftCorner.Y,
sidepos.LowerRightCorner.X, sidepos.LowerRightCorner.Y), 0xff000000, false, true);
textFont->draw(sideDeckTypeCount, recti(sidepos.LowerRightCorner.X - sideDeckTypeSize.Width - 4, sidepos.UpperLeftCorner.Y + 1,
sidepos.LowerRightCorner.X + 1, sidepos.LowerRightCorner.Y + 1), 0xffffffff, false, true);
driver->draw2DRectangle(mainGame->Resize(310, 560, 797, 630), 0x400000ff, 0x400000ff, 0x40000000, 0x40000000);
driver->draw2DRectangleOutline(mainGame->Resize(309, 559, 797, 630));
if(deckManager.current_deck.side.size() <= 10)
......@@ -1049,7 +1084,7 @@ void Game::DrawDeckBd() {
else if((ptr->second.ot & 0x3) == 2)
wcscat(textBuffer, L" [TCG]");
else if((ptr->second.ot & 0x7) == 4)
wcscat(textBuffer, L" [Custom]");
wcscat(textBuffer, L" [Anime]");
textFont->draw(textBuffer, mainGame->Resize(859, 208 + i * 66, 955, 229 + i * 66), 0xff000000, false, false);
textFont->draw(textBuffer, mainGame->Resize(860, 209 + i * 66, 955, 229 + i * 66), 0xffffffff, false, false);
} else {
......@@ -1065,7 +1100,7 @@ void Game::DrawDeckBd() {
else if((ptr->second.ot & 0x3) == 2)
wcscat(textBuffer, L"[TCG]");
else if((ptr->second.ot & 0x7) == 4)
wcscat(textBuffer, L"[Custom]");
wcscat(textBuffer, L"[Anime]");
textFont->draw(textBuffer, mainGame->Resize(859, 208 + i * 66, 955, 229 + i * 66), 0xff000000, false, false);
textFont->draw(textBuffer, mainGame->Resize(860, 209 + i * 66, 955, 229 + i * 66), 0xffffffff, false, false);
}
......
......@@ -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,26 +713,40 @@ 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') {
dataManager.strBuffer[pbuffer++] = L'\n';
_width = 0;
_height++;
if(_height == pos)
pbuffer = 0;
continue;
} else if(_width > 0 && _width + w > cWidth) {
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;
}
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;
dataManager.strBuffer[pbuffer++] = text[i];
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