Commit 7f1d2e63 authored by mercury233's avatar mercury233

Merge branch 'master' of https://github.com/Fluorohydride/ygopro into server-link

parents 5099b8ee a7df04e9
...@@ -131,6 +131,7 @@ public: ...@@ -131,6 +131,7 @@ public:
int list_command; int list_command;
virtual bool OnEvent(const irr::SEvent& event); virtual bool OnEvent(const irr::SEvent& event);
virtual bool OnCommonEvent(const irr::SEvent& event);
void GetHoverField(int x, int y); void GetHoverField(int x, int y);
void ShowMenu(int flag, int x, int y); void ShowMenu(int flag, int x, int y);
void UpdateChainButtons(); void UpdateChainButtons();
......
...@@ -58,7 +58,55 @@ static bool check_set_code(const CardDataC& data, int set_code) { ...@@ -58,7 +58,55 @@ static bool check_set_code(const CardDataC& data, int set_code) {
return res; return res;
} }
void DeckBuilder::Initialize() {
mainGame->is_building = true;
mainGame->is_siding = false;
mainGame->wInfos->setVisible(true);
mainGame->wCardImg->setVisible(true);
mainGame->wDeckEdit->setVisible(true);
mainGame->wFilter->setVisible(true);
mainGame->wSort->setVisible(true);
mainGame->btnLeaveGame->setVisible(true);
mainGame->btnLeaveGame->setText(dataManager.GetSysString(1306));
mainGame->btnSideOK->setVisible(false);
filterList = deckManager._lfList[0].content;
mainGame->cbDBLFList->setSelected(0);
ClearSearch();
mouse_pos.set(0, 0);
hovered_code = 0;
hovered_pos = 0;
hovered_seq = -1;
is_lastcard = 0;
is_draging = false;
is_starting_dragging = false;
prev_deck = mainGame->cbDBDecks->getSelected();
prev_operation = 0;
is_modified = false;
mainGame->device->setEventReceiver(this);
}
void DeckBuilder::Terminate() {
mainGame->is_building = false;
mainGame->wDeckEdit->setVisible(false);
mainGame->wCategories->setVisible(false);
mainGame->wFilter->setVisible(false);
mainGame->wSort->setVisible(false);
mainGame->wCardImg->setVisible(false);
mainGame->wInfos->setVisible(false);
mainGame->btnLeaveGame->setVisible(false);
mainGame->PopupElement(mainGame->wMainMenu);
mainGame->device->setEventReceiver(&mainGame->menuHandler);
mainGame->wACMessage->setVisible(false);
imageManager.ClearTexture();
mainGame->scrFilter->setVisible(false);
int sel = mainGame->cbDBDecks->getSelected();
if(sel >= 0)
BufferIO::CopyWStr(mainGame->cbDBDecks->getItem(sel), mainGame->gameConf.lastdeck, 64);
if(exit_on_return)
mainGame->device->closeDevice();
}
bool DeckBuilder::OnEvent(const irr::SEvent& event) { bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(mainGame->dField.OnCommonEvent(event))
return false;
switch(event.EventType) { switch(event.EventType) {
case irr::EET_GUI_EVENT: { case irr::EET_GUI_EVENT: {
s32 id = event.GUIEvent.Caller->getID(); s32 id = event.GUIEvent.Caller->getID();
...@@ -76,7 +124,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -76,7 +124,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)dataManager.GetSysString(1339)); mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)dataManager.GetSysString(1339));
mainGame->PopupElement(mainGame->wQuery); mainGame->PopupElement(mainGame->wQuery);
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
is_clearing = true; prev_operation = id;
break; break;
} }
case BUTTON_SORT_DECK: { case BUTTON_SORT_DECK: {
...@@ -91,9 +139,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -91,9 +139,10 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
} }
case BUTTON_SAVE_DECK: { case BUTTON_SAVE_DECK: {
int sel = mainGame->cbDBDecks->getSelected(); int sel = mainGame->cbDBDecks->getSelected();
if(sel>-1 && deckManager.SaveDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) { if(sel >= 0 && deckManager.SaveDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) {
mainGame->stACMessage->setText(dataManager.GetSysString(1335)); mainGame->stACMessage->setText(dataManager.GetSysString(1335));
mainGame->PopupElement(mainGame->wACMessage, 20); mainGame->PopupElement(mainGame->wACMessage, 20);
is_modified = false;
} }
break; break;
} }
...@@ -117,6 +166,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -117,6 +166,7 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
if(deckManager.SaveDeck(deckManager.current_deck, dname)) { if(deckManager.SaveDeck(deckManager.current_deck, dname)) {
mainGame->stACMessage->setText(dataManager.GetSysString(1335)); mainGame->stACMessage->setText(dataManager.GetSysString(1335));
mainGame->PopupElement(mainGame->wACMessage, 20); mainGame->PopupElement(mainGame->wACMessage, 20);
is_modified = false;
} }
break; break;
} }
...@@ -130,28 +180,19 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -130,28 +180,19 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)textBuffer); mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)textBuffer);
mainGame->PopupElement(mainGame->wQuery); mainGame->PopupElement(mainGame->wQuery);
mainGame->gMutex.Unlock(); mainGame->gMutex.Unlock();
is_deleting = true; prev_operation = id;
break; break;
} }
case BUTTON_LEAVE_GAME: { case BUTTON_LEAVE_GAME: {
mainGame->is_building = false; if(is_modified && !mainGame->chkIgnoreDeckChanges->isChecked()) {
mainGame->wDeckEdit->setVisible(false); mainGame->gMutex.Lock();
mainGame->wCategories->setVisible(false); mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)dataManager.GetSysString(1356));
mainGame->wFilter->setVisible(false); mainGame->PopupElement(mainGame->wQuery);
mainGame->wSort->setVisible(false); mainGame->gMutex.Unlock();
mainGame->wCardImg->setVisible(false); prev_operation = id;
mainGame->wInfos->setVisible(false); break;
mainGame->btnLeaveGame->setVisible(false);
mainGame->PopupElement(mainGame->wMainMenu);
mainGame->device->setEventReceiver(&mainGame->menuHandler);
mainGame->wACMessage->setVisible(false);
imageManager.ClearTexture();
mainGame->scrFilter->setVisible(false);
if(mainGame->cbDBDecks->getSelected() != -1) {
BufferIO::CopyWStr(mainGame->cbDBDecks->getItem(mainGame->cbDBDecks->getSelected()), mainGame->gameConf.lastdeck, 64);
} }
if(exit_on_return) Terminate();
mainGame->device->closeDevice();
break; break;
} }
case BUTTON_EFFECT_FILTER: { case BUTTON_EFFECT_FILTER: {
...@@ -205,32 +246,42 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -205,32 +246,42 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
mainGame->HideElement(mainGame->wQuery); mainGame->HideElement(mainGame->wQuery);
if(!mainGame->is_building || mainGame->is_siding) if(!mainGame->is_building || mainGame->is_siding)
break; break;
if(is_clearing) { if(prev_operation == BUTTON_CLEAR_DECK) {
deckManager.current_deck.main.clear(); deckManager.current_deck.main.clear();
deckManager.current_deck.extra.clear(); deckManager.current_deck.extra.clear();
deckManager.current_deck.side.clear(); deckManager.current_deck.side.clear();
} else if(is_deleting) { } else if(prev_operation == BUTTON_DELETE_DECK) {
int sel = mainGame->cbDBDecks->getSelected(); int sel = mainGame->cbDBDecks->getSelected();
if (deckManager.DeleteDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) { if(deckManager.DeleteDeck(deckManager.current_deck, mainGame->cbDBDecks->getItem(sel))) {
mainGame->cbDBDecks->removeItem(sel); mainGame->cbDBDecks->removeItem(sel);
int count = mainGame->cbDBDecks->getItemCount(); int count = mainGame->cbDBDecks->getItemCount();
if (sel >= count) if(sel >= count)
sel = count - 1; sel = count - 1;
mainGame->cbDBDecks->setSelected(sel); mainGame->cbDBDecks->setSelected(sel);
if (sel != -1) if(sel != -1)
deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel)); deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel));
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;
is_modified = false;
} }
} else if(prev_operation == BUTTON_LEAVE_GAME) {
Terminate();
} else if(prev_operation == COMBOBOX_DBDECKS) {
int sel = mainGame->cbDBDecks->getSelected();
deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel));
prev_deck = sel;
is_modified = false;
} }
is_clearing = false; prev_operation = 0;
is_deleting = false;
break; break;
} }
case BUTTON_NO: { case BUTTON_NO: {
mainGame->HideElement(mainGame->wQuery); mainGame->HideElement(mainGame->wQuery);
is_deleting = false; if (prev_operation == COMBOBOX_DBDECKS) {
is_clearing = false; mainGame->cbDBDecks->setSelected(prev_deck);
}
prev_operation = 0;
break; break;
} }
case BUTTON_MARKS_FILTER: { case BUTTON_MARKS_FILTER: {
...@@ -262,15 +313,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -262,15 +313,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
} }
case irr::gui::EGET_SCROLL_BAR_CHANGED: { case irr::gui::EGET_SCROLL_BAR_CHANGED: {
switch(id) {
case SCROLL_CARDTEXT: {
u32 pos = mainGame->scrCardText->getPos();
mainGame->SetStaticText(mainGame->stText, mainGame->stText->getRelativePosition().getWidth()-25, mainGame->textFont, mainGame->showingtext, pos);
break; break;
} }
break;
}
}
case irr::gui::EGET_EDITBOX_ENTER: { case irr::gui::EGET_EDITBOX_ENTER: {
switch(id) { switch(id) {
case EDITBOX_KEYWORD: { case EDITBOX_KEYWORD: {
...@@ -297,7 +341,18 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -297,7 +341,18 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
} }
case COMBOBOX_DBDECKS: { case COMBOBOX_DBDECKS: {
deckManager.LoadDeck(mainGame->cbDBDecks->getItem(mainGame->cbDBDecks->getSelected())); if(is_modified && !mainGame->chkIgnoreDeckChanges->isChecked()) {
mainGame->gMutex.Lock();
mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)dataManager.GetSysString(1356));
mainGame->PopupElement(mainGame->wQuery);
mainGame->gMutex.Unlock();
prev_operation = id;
break;
}
int sel = mainGame->cbDBDecks->getSelected();
deckManager.LoadDeck(mainGame->cbDBDecks->getItem(sel));
prev_deck = sel;
is_modified = false;
break; break;
} }
case COMBOBOX_MAINTYPE: { case COMBOBOX_MAINTYPE: {
...@@ -417,7 +472,6 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -417,7 +472,6 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
case irr::EET_MOUSE_INPUT_EVENT: { case irr::EET_MOUSE_INPUT_EVENT: {
switch(event.MouseInput.Event) { switch(event.MouseInput.Event) {
case irr::EMIE_LMOUSE_PRESSED_DOWN: { case irr::EMIE_LMOUSE_PRESSED_DOWN: {
irr::core::position2di mouse_pos(event.MouseInput.X, event.MouseInput.Y);
irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement(); irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
if(root->getElementFromPoint(mouse_pos) != root) if(root->getElementFromPoint(mouse_pos) != root)
break; break;
...@@ -431,100 +485,33 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -431,100 +485,33 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
draging_pointer = dataManager.GetCodePointer(hovered_code); draging_pointer = dataManager.GetCodePointer(hovered_code);
if(draging_pointer == dataManager._datas.end()) if(draging_pointer == dataManager._datas.end())
break; break;
unsigned int limitcode = draging_pointer->second.alias ? draging_pointer->second.alias : draging_pointer->first;
if(hovered_pos == 4) { if(hovered_pos == 4) {
int limit = 3; if(!check_limit(draging_pointer))
if(filterList->count(limitcode))
limit = (*filterList)[limitcode];
for(size_t i = 0; i < deckManager.current_deck.main.size(); ++i)
if(deckManager.current_deck.main[i]->first == limitcode
|| deckManager.current_deck.main[i]->second.alias == limitcode)
limit--;
for(size_t i = 0; i < deckManager.current_deck.extra.size(); ++i)
if(deckManager.current_deck.extra[i]->first == limitcode
|| deckManager.current_deck.extra[i]->second.alias == limitcode)
limit--;
for(size_t i = 0; i < deckManager.current_deck.side.size(); ++i)
if(deckManager.current_deck.side[i]->first == limitcode
|| deckManager.current_deck.side[i]->second.alias == limitcode)
limit--;
if(limit <= 0)
break; break;
} }
if(hovered_pos == 1) is_starting_dragging = true;
deckManager.current_deck.main.erase(deckManager.current_deck.main.begin() + hovered_seq);
else if(hovered_pos == 2)
deckManager.current_deck.extra.erase(deckManager.current_deck.extra.begin() + hovered_seq);
else if(hovered_pos == 3)
deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
is_draging = true;
break; break;
} }
case irr::EMIE_LMOUSE_LEFT_UP: { case irr::EMIE_LMOUSE_LEFT_UP: {
is_starting_dragging = false;
if(!is_draging) if(!is_draging)
break; break;
if(!mainGame->is_siding) { bool pushed = false;
if((hovered_pos == 1 && (draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK))) if(hovered_pos == 1)
|| (hovered_pos == 2 && !(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)))) pushed = push_main(draging_pointer, hovered_seq);
hovered_pos = 0; else if(hovered_pos == 2)
if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 60) { pushed = push_extra(draging_pointer, hovered_seq + is_lastcard);
if(hovered_seq == -1) else if(hovered_pos == 3)
deckManager.current_deck.main.push_back(draging_pointer); pushed = push_side(draging_pointer, hovered_seq + is_lastcard);
else if(hovered_seq < (int)deckManager.current_deck.main.size() && hovered_pos) else if(hovered_pos == 4 && !mainGame->is_siding)
deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, draging_pointer); pushed = true;
else deckManager.current_deck.main.push_back(draging_pointer); if(!pushed) {
is_draging = false;
} else if((hovered_pos == 2 || (hovered_pos == 0 && click_pos == 2)) && deckManager.current_deck.extra.size() < 15) {
if(hovered_seq == -1)
deckManager.current_deck.extra.push_back(draging_pointer);
else if(hovered_seq < (int)deckManager.current_deck.extra.size() && hovered_pos)
deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.extra.push_back(draging_pointer);
is_draging = false;
} else if((hovered_pos == 3 || (hovered_pos == 0 && click_pos == 3)) && deckManager.current_deck.side.size() < 15) {
if(hovered_seq == -1)
deckManager.current_deck.side.push_back(draging_pointer);
else if(hovered_seq < (int)deckManager.current_deck.side.size() && hovered_pos)
deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.side.push_back(draging_pointer);
is_draging = false;
} else if (hovered_pos == 4)
is_draging = false;
} else {
if((hovered_pos == 1 && (draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)))
|| (hovered_pos == 2 && !(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)))
|| hovered_pos == 4)
hovered_pos = 0;
if((hovered_pos == 1 || (hovered_pos == 0 && click_pos == 1)) && deckManager.current_deck.main.size() < 65) {
if(hovered_seq == -1)
deckManager.current_deck.main.push_back(draging_pointer);
else if(hovered_seq < (int)deckManager.current_deck.main.size() && hovered_pos)
deckManager.current_deck.main.insert(deckManager.current_deck.main.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.main.push_back(draging_pointer);
is_draging = false;
} else if((hovered_pos == 2 || (hovered_pos == 0 && click_pos == 2)) && deckManager.current_deck.extra.size() < 20) {
if(hovered_seq == -1)
deckManager.current_deck.extra.push_back(draging_pointer);
else if(hovered_seq < (int)deckManager.current_deck.extra.size() && hovered_pos)
deckManager.current_deck.extra.insert(deckManager.current_deck.extra.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.extra.push_back(draging_pointer);
is_draging = false;
} else if((hovered_pos == 3 || (hovered_pos == 0 && click_pos == 3)) && deckManager.current_deck.side.size() < 20) {
if(hovered_seq == -1)
deckManager.current_deck.side.push_back(draging_pointer);
else if(hovered_seq < (int)deckManager.current_deck.side.size() && hovered_pos)
deckManager.current_deck.side.insert(deckManager.current_deck.side.begin() + hovered_seq, draging_pointer);
else deckManager.current_deck.side.push_back(draging_pointer);
is_draging = false;
}
}
if(is_draging) {
if(click_pos == 1) if(click_pos == 1)
deckManager.current_deck.main.push_back(draging_pointer); push_main(draging_pointer);
else if(click_pos == 2) else if(click_pos == 2)
deckManager.current_deck.extra.push_back(draging_pointer); push_extra(draging_pointer);
else if(click_pos == 3) else if(click_pos == 3)
deckManager.current_deck.side.push_back(draging_pointer); push_side(draging_pointer);
} }
is_draging = false; is_draging = false;
break; break;
...@@ -535,99 +522,53 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -535,99 +522,53 @@ 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;
draging_pointer = dataManager.GetCodePointer(hovered_code); auto pointer = dataManager.GetCodePointer(hovered_code);
if(draging_pointer == dataManager._datas.end()) if(pointer == dataManager._datas.end())
break; break;
if(hovered_pos == 1) { if(hovered_pos == 1) {
if(deckManager.current_deck.side.size() < 20) { if(push_side(pointer))
deckManager.current_deck.main.erase(deckManager.current_deck.main.begin() + hovered_seq); pop_main(hovered_seq);
deckManager.current_deck.side.push_back(draging_pointer);
}
} else if(hovered_pos == 2) { } else if(hovered_pos == 2) {
if(deckManager.current_deck.side.size() < 20) { if(push_side(pointer))
deckManager.current_deck.extra.erase(deckManager.current_deck.extra.begin() + hovered_seq); pop_extra(hovered_seq);
deckManager.current_deck.side.push_back(draging_pointer);
}
} else { } else {
if((draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.extra.size() < 20) { if(push_extra(pointer) || push_main(pointer))
deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq); pop_side(hovered_seq);
deckManager.current_deck.extra.push_back(draging_pointer);
}
if(!(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.main.size() < 64) {
deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
deckManager.current_deck.main.push_back(draging_pointer);
}
} }
break; break;
} }
if(mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible()) if(mainGame->wCategories->isVisible() || mainGame->wQuery->isVisible())
break; break;
if(hovered_pos == 0 || hovered_seq == -1)
break;
if(!is_draging) { if(!is_draging) {
draging_pointer = dataManager.GetCodePointer(hovered_code); if(hovered_pos == 0 || hovered_seq == -1)
if(draging_pointer == dataManager._datas.end())
break; break;
}
if(hovered_pos == 1) { if(hovered_pos == 1) {
if(!is_draging) pop_main(hovered_seq);
deckManager.current_deck.main.erase(deckManager.current_deck.main.begin() + hovered_seq);
else if(deckManager.current_deck.side.size() < 15) {
deckManager.current_deck.side.push_back(draging_pointer);
is_draging = false;
}
} else if(hovered_pos == 2) { } else if(hovered_pos == 2) {
if(!is_draging) pop_extra(hovered_seq);
deckManager.current_deck.extra.erase(deckManager.current_deck.extra.begin() + hovered_seq);
else if(deckManager.current_deck.side.size() < 15) {
deckManager.current_deck.side.push_back(draging_pointer);
is_draging = false;
}
} else if(hovered_pos == 3) { } else if(hovered_pos == 3) {
if(!is_draging) pop_side(hovered_seq);
deckManager.current_deck.side.erase(deckManager.current_deck.side.begin() + hovered_seq);
else {
if((draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.extra.size() < 15) {
deckManager.current_deck.extra.push_back(draging_pointer);
is_draging = false;
} else if(!(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.main.size() < 60) {
deckManager.current_deck.main.push_back(draging_pointer);
is_draging = false;
}
}
} else { } else {
if(is_draging) { auto pointer = dataManager.GetCodePointer(hovered_code);
if(deckManager.current_deck.side.size() < 15) { if(pointer == dataManager._datas.end())
deckManager.current_deck.side.push_back(draging_pointer);
is_draging = false;
}
} else {
unsigned int limitcode = draging_pointer->second.alias ? draging_pointer->second.alias : draging_pointer->first;
int limit = 3;
if(filterList->count(limitcode))
limit = (*filterList)[limitcode];
for(size_t i = 0; i < deckManager.current_deck.main.size(); ++i)
if(deckManager.current_deck.main[i]->first == limitcode
|| deckManager.current_deck.main[i]->second.alias == limitcode)
limit--;
for(size_t i = 0; i < deckManager.current_deck.extra.size(); ++i)
if(deckManager.current_deck.extra[i]->first == limitcode
|| deckManager.current_deck.extra[i]->second.alias == limitcode)
limit--;
for(size_t i = 0; i < deckManager.current_deck.side.size(); ++i)
if(deckManager.current_deck.side[i]->first == limitcode
|| deckManager.current_deck.side[i]->second.alias == limitcode)
limit--;
if(limit <= 0)
break; break;
if((draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.extra.size() < 15) { if(!check_limit(pointer))
deckManager.current_deck.extra.push_back(draging_pointer); break;
} else if(!(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.main.size() < 60) { if(!push_extra(pointer) && !push_main(pointer))
deckManager.current_deck.main.push_back(draging_pointer); push_side(pointer);
} else if (deckManager.current_deck.side.size() < 15) {
deckManager.current_deck.side.push_back(draging_pointer);
} }
} else {
if(click_pos == 1) {
push_side(draging_pointer);
} else if(click_pos == 2) {
push_side(draging_pointer);
} else if(click_pos == 3) {
if(!push_extra(draging_pointer))
push_main(draging_pointer);
} else {
push_side(draging_pointer);
} }
is_draging = false;
} }
break; break;
} }
...@@ -640,169 +581,146 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -640,169 +581,146 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
break; break;
if (is_draging) if (is_draging)
break; break;
draging_pointer = dataManager.GetCodePointer(hovered_code); auto pointer = dataManager.GetCodePointer(hovered_code);
unsigned int limitcode = draging_pointer->second.alias ? draging_pointer->second.alias : draging_pointer->first; if(!check_limit(pointer))
int limit = 3;
if (filterList->count(limitcode))
limit = (*filterList)[limitcode];
for (size_t i = 0; i < deckManager.current_deck.main.size(); ++i)
if (deckManager.current_deck.main[i]->first == limitcode
|| deckManager.current_deck.main[i]->second.alias == limitcode)
limit--;
for (size_t i = 0; i < deckManager.current_deck.extra.size(); ++i)
if (deckManager.current_deck.extra[i]->first == limitcode
|| deckManager.current_deck.extra[i]->second.alias == limitcode)
limit--;
for (size_t i = 0; i < deckManager.current_deck.side.size(); ++i)
if (deckManager.current_deck.side[i]->first == limitcode
|| deckManager.current_deck.side[i]->second.alias == limitcode)
limit--;
if (limit <= 0)
break; break;
if (hovered_pos == 1) { if (hovered_pos == 1) {
if (deckManager.current_deck.main.size() < 60) if(!push_main(pointer))
deckManager.current_deck.main.push_back(draging_pointer); push_side(pointer);
else if (deckManager.current_deck.side.size() < 15)
deckManager.current_deck.side.push_back(draging_pointer);
} else if (hovered_pos == 2) { } else if (hovered_pos == 2) {
if (deckManager.current_deck.extra.size() < 15) if(!push_extra(pointer))
deckManager.current_deck.extra.push_back(draging_pointer); push_side(pointer);
else if (deckManager.current_deck.side.size() < 15)
deckManager.current_deck.side.push_back(draging_pointer);
} else if (hovered_pos == 3) { } else if (hovered_pos == 3) {
if (deckManager.current_deck.side.size() < 15) if(!push_side(pointer) && !push_extra(pointer))
deckManager.current_deck.side.push_back(draging_pointer); push_main(pointer);
else {
if ((draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.extra.size() < 15)
deckManager.current_deck.extra.push_back(draging_pointer);
else if (!(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.main.size() < 60)
deckManager.current_deck.main.push_back(draging_pointer);
}
} else { } else {
if ((draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.extra.size() < 15) if(!push_extra(pointer) && !push_main(pointer))
deckManager.current_deck.extra.push_back(draging_pointer); push_side(pointer);
else if (!(draging_pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && deckManager.current_deck.main.size() < 60)
deckManager.current_deck.main.push_back(draging_pointer);
else if (deckManager.current_deck.side.size() < 15)
deckManager.current_deck.side.push_back(draging_pointer);
} }
break; break;
} }
case irr::EMIE_MOUSE_MOVED: { case irr::EMIE_MOUSE_MOVED: {
int x = event.MouseInput.X; if(is_starting_dragging) {
int y = event.MouseInput.Y; is_draging = true;
irr::core::position2di mouse_pos(x, y); if(hovered_pos == 1)
pop_main(hovered_seq);
else if(hovered_pos == 2)
pop_extra(hovered_seq);
else if(hovered_pos == 3)
pop_side(hovered_seq);
is_starting_dragging = false;
}
mouse_pos.set(event.MouseInput.X, event.MouseInput.Y);
GetHoveredCard();
break;
}
case irr::EMIE_MOUSE_WHEEL: {
if(!mainGame->scrFilter->isVisible())
break;
if(event.MouseInput.Wheel < 0) {
if(mainGame->scrFilter->getPos() < mainGame->scrFilter->getMax())
mainGame->scrFilter->setPos(mainGame->scrFilter->getPos() + 1);
} else {
if(mainGame->scrFilter->getPos() > 0)
mainGame->scrFilter->setPos(mainGame->scrFilter->getPos() - 1);
}
GetHoveredCard();
break;
}
default: break;
}
break;
}
case irr::EET_KEY_INPUT_EVENT: {
break;
}
default: break;
}
return false;
}
void DeckBuilder::GetHoveredCard() {
irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement(); irr::gui::IGUIElement* root = mainGame->env->getRootGUIElement();
if(root->getElementFromPoint(mouse_pos) != root) if(root->getElementFromPoint(mouse_pos) != root)
break; return;
int x = mouse_pos.X;
int y = mouse_pos.Y;
int pre_code = hovered_code; int pre_code = hovered_code;
if(x >= 314 && x <= 794 && y >= 164 && y <= 435) { hovered_pos = 0;
hovered_code = 0;
is_lastcard = 0;
if(x >= 314 && x <= 794) {
if(y >= 164 && y <= 435) {
int lx = 10, px, py = (y - 164) / 68; int lx = 10, px, py = (y - 164) / 68;
hovered_pos = 1; hovered_pos = 1;
if(deckManager.current_deck.main.size() > 40) if(deckManager.current_deck.main.size() > 40)
lx = (deckManager.current_deck.main.size() - 41) / 4 + 11; lx = (deckManager.current_deck.main.size() - 41) / 4 + 11;
if(x >= 750) if(x >= 750)
px = lx - 1; px = lx - 1;
else px = (x - 314) * (lx - 1) / 436; else
if(py*lx + px >= (int)deckManager.current_deck.main.size()) { px = (x - 314) * (lx - 1) / 436;
hovered_seq = py * lx + px;
if(hovered_seq >= (int)deckManager.current_deck.main.size()) {
hovered_seq = -1; hovered_seq = -1;
hovered_code = 0; hovered_code = 0;
} else { } else {
hovered_seq = py * lx + px;
hovered_code = deckManager.current_deck.main[hovered_seq]->first; hovered_code = deckManager.current_deck.main[hovered_seq]->first;
} }
} else if(x >= 314 && x <= 794 && y >= 466 && y <= 530) { } else if(y >= 466 && y <= 530) {
int lx = deckManager.current_deck.extra.size(); int lx = deckManager.current_deck.extra.size();
hovered_pos = 2; hovered_pos = 2;
if(lx < 10) if(lx < 10)
lx = 10; lx = 10;
if(x >= 750) if(x >= 750)
hovered_seq = lx - 1; hovered_seq = lx - 1;
else hovered_seq = (x - 314) * (lx - 1) / 436; else
hovered_seq = (x - 314) * (lx - 1) / 436;
if(hovered_seq >= (int)deckManager.current_deck.extra.size()) { if(hovered_seq >= (int)deckManager.current_deck.extra.size()) {
hovered_seq = -1; hovered_seq = -1;
hovered_code = 0; hovered_code = 0;
} else { } else {
hovered_code = deckManager.current_deck.extra[hovered_seq]->first; hovered_code = deckManager.current_deck.extra[hovered_seq]->first;
if(x >= 772)
is_lastcard = 1;
} }
} else if (x >= 314 && x <= 794 && y >= 564 && y <= 628) { } else if (y >= 564 && y <= 628) {
int lx = deckManager.current_deck.side.size(); int lx = deckManager.current_deck.side.size();
hovered_pos = 3; hovered_pos = 3;
if(lx < 10) if(lx < 10)
lx = 10; lx = 10;
if(x >= 750) if(x >= 750)
hovered_seq = lx - 1; hovered_seq = lx - 1;
else hovered_seq = (x - 314) * (lx - 1) / 436; else
hovered_seq = (x - 314) * (lx - 1) / 436;
if(hovered_seq >= (int)deckManager.current_deck.side.size()) { if(hovered_seq >= (int)deckManager.current_deck.side.size()) {
hovered_seq = -1; hovered_seq = -1;
hovered_code = 0; hovered_code = 0;
} else { } else {
hovered_code = deckManager.current_deck.side[hovered_seq]->first; hovered_code = deckManager.current_deck.side[hovered_seq]->first;
if(x >= 772)
is_lastcard = 1;
}
} }
} else if(x >= 810 && x <= 995 && y >= 165 && y <= 626) { } else if(x >= 810 && x <= 995 && y >= 165 && y <= 626) {
hovered_pos = 4; hovered_pos = 4;
hovered_seq = (y - 165) / 66; hovered_seq = (y - 165) / 66;
if(mainGame->scrFilter->getPos() + hovered_seq >= (int)results.size()) { int pos = mainGame->scrFilter->getPos() + hovered_seq;
if(pos >= (int)results.size()) {
hovered_seq = -1; hovered_seq = -1;
hovered_code = 0; hovered_code = 0;
} else { } else {
hovered_code = results[mainGame->scrFilter->getPos() + hovered_seq]->first; hovered_code = results[pos]->first;
} }
} else {
hovered_pos = 0;
hovered_code = 0;
} }
if(is_draging) { if(is_draging) {
dragx = x; dragx = x;
dragy = y; dragy = y;
} }
if(!is_draging && pre_code != hovered_code) { if(!is_draging && pre_code != hovered_code) {
if(hovered_code) { if(hovered_code)
mainGame->ShowCardInfo(hovered_code); mainGame->ShowCardInfo(hovered_code);
}
if(pre_code) if(pre_code)
imageManager.RemoveTexture(pre_code); imageManager.RemoveTexture(pre_code);
} }
break;
}
case irr::EMIE_MOUSE_WHEEL: {
if(!mainGame->scrFilter->isVisible())
break;
if(event.MouseInput.Wheel < 0) {
if(mainGame->scrFilter->getPos() < mainGame->scrFilter->getMax())
mainGame->scrFilter->setPos(mainGame->scrFilter->getPos() + 1);
} else {
if(mainGame->scrFilter->getPos() > 0)
mainGame->scrFilter->setPos(mainGame->scrFilter->getPos() - 1);
}
SEvent e = event;
e.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
mainGame->device->postEventFromUser(e);
break;
}
default: break;
}
break;
}
case irr::EET_KEY_INPUT_EVENT: {
switch(event.KeyInput.Key) {
case irr::KEY_KEY_R: {
if(!event.KeyInput.PressedDown && !mainGame->HasFocus(EGUIET_EDIT_BOX))
mainGame->textFont->setTransparency(true);
break;
}
case irr::KEY_ESCAPE: {
if(!mainGame->HasFocus(EGUIET_EDIT_BOX))
mainGame->device->minimizeWindow();
break;
}
default: break;
}
break;
}
default: break;
}
return false;
} }
void DeckBuilder::StartFilter() { void DeckBuilder::StartFilter() {
filter_type = mainGame->cbCardType->getSelected(); filter_type = mainGame->cbCardType->getSelected();
...@@ -1013,6 +931,9 @@ bool DeckBuilder::CardNameContains(const wchar_t *haystack, const wchar_t *needl ...@@ -1013,6 +931,9 @@ bool DeckBuilder::CardNameContains(const wchar_t *haystack, const wchar_t *needl
if (!needle[0]) { if (!needle[0]) {
return true; return true;
} }
if (!haystack) {
return false;
}
int i = 0; int i = 0;
int j = 0; int j = 0;
while (haystack[i]) { while (haystack[i]) {
...@@ -1030,4 +951,85 @@ bool DeckBuilder::CardNameContains(const wchar_t *haystack, const wchar_t *needl ...@@ -1030,4 +951,85 @@ bool DeckBuilder::CardNameContains(const wchar_t *haystack, const wchar_t *needl
} }
return false; return false;
} }
bool DeckBuilder::push_main(code_pointer pointer, int seq) {
if(pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK))
return false;
auto& container = deckManager.current_deck.main;
int maxc = mainGame->is_siding ? 64 : 60;
if((int)container.size() >= maxc)
return false;
if(seq >= 0 && seq < (int)container.size())
container.insert(container.begin() + seq, pointer);
else
container.push_back(pointer);
is_modified = true;
GetHoveredCard();
return true;
}
bool DeckBuilder::push_extra(code_pointer pointer, int seq) {
if(!(pointer->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)))
return false;
auto& container = deckManager.current_deck.extra;
int maxc = mainGame->is_siding ? 20 : 15;
if((int)container.size() >= maxc)
return false;
if(seq >= 0 && seq < (int)container.size())
container.insert(container.begin() + seq, pointer);
else
container.push_back(pointer);
is_modified = true;
GetHoveredCard();
return true;
}
bool DeckBuilder::push_side(code_pointer pointer, int seq) {
auto& container = deckManager.current_deck.side;
int maxc = mainGame->is_siding ? 20 : 15;
if((int)container.size() >= maxc)
return false;
if(seq >= 0 && seq < (int)container.size())
container.insert(container.begin() + seq, pointer);
else
container.push_back(pointer);
is_modified = true;
GetHoveredCard();
return true;
}
void DeckBuilder::pop_main(int seq) {
auto& container = deckManager.current_deck.main;
container.erase(container.begin() + seq);
is_modified = true;
GetHoveredCard();
}
void DeckBuilder::pop_extra(int seq) {
auto& container = deckManager.current_deck.extra;
container.erase(container.begin() + seq);
is_modified = true;
GetHoveredCard();
}
void DeckBuilder::pop_side(int seq) {
auto& container = deckManager.current_deck.side;
container.erase(container.begin() + seq);
is_modified = true;
GetHoveredCard();
}
bool DeckBuilder::check_limit(code_pointer pointer) {
unsigned int limitcode = pointer->second.alias ? pointer->second.alias : pointer->first;
int limit = 3;
auto flit = filterList->find(limitcode);
if(flit != filterList->end())
limit = flit->second;
for(auto it = deckManager.current_deck.main.begin(); it != deckManager.current_deck.main.end(); ++it) {
if((*it)->first == limitcode || (*it)->second.alias == limitcode)
limit--;
}
for(auto it = deckManager.current_deck.extra.begin(); it != deckManager.current_deck.extra.end(); ++it) {
if((*it)->first == limitcode || (*it)->second.alias == limitcode)
limit--;
}
for(auto it = deckManager.current_deck.side.begin(); it != deckManager.current_deck.side.end(); ++it) {
if((*it)->first == limitcode || (*it)->second.alias == limitcode)
limit--;
}
return limit > 0;
}
} }
...@@ -11,6 +11,9 @@ namespace ygo { ...@@ -11,6 +11,9 @@ namespace ygo {
class DeckBuilder: public irr::IEventReceiver { class DeckBuilder: public irr::IEventReceiver {
public: public:
virtual bool OnEvent(const irr::SEvent& event); virtual bool OnEvent(const irr::SEvent& event);
void Initialize();
void Terminate();
void GetHoveredCard();
void FilterCards(); void FilterCards();
void StartFilter(); void StartFilter();
void ClearFilter(); void ClearFilter();
...@@ -19,6 +22,14 @@ public: ...@@ -19,6 +22,14 @@ public:
bool CardNameContains(const wchar_t *haystack, const wchar_t *needle); bool CardNameContains(const wchar_t *haystack, const wchar_t *needle);
bool push_main(code_pointer pointer, int seq = -1);
bool push_extra(code_pointer pointer, int seq = -1);
bool push_side(code_pointer pointer, int seq = -1);
void pop_main(int seq);
void pop_extra(int seq);
void pop_side(int seq);
bool check_limit(code_pointer pointer);
long long filter_effect; long long filter_effect;
unsigned int filter_type; unsigned int filter_type;
unsigned int filter_type2; unsigned int filter_type2;
...@@ -34,19 +45,23 @@ public: ...@@ -34,19 +45,23 @@ public:
unsigned int filter_scl; unsigned int filter_scl;
unsigned int filter_marks; unsigned int filter_marks;
int filter_lm; int filter_lm;
position2di mouse_pos;
int hovered_code; int hovered_code;
int hovered_pos; int hovered_pos;
int hovered_seq; int hovered_seq;
int is_lastcard;
int click_pos; int click_pos;
bool is_draging; bool is_draging;
bool is_starting_dragging;
int dragx; int dragx;
int dragy; int dragy;
size_t pre_mainc; size_t pre_mainc;
size_t pre_extrac; size_t pre_extrac;
size_t pre_sidec; size_t pre_sidec;
code_pointer draging_pointer; code_pointer draging_pointer;
bool is_deleting; int prev_deck;
bool is_clearing; s32 prev_operation;
bool is_modified;
std::unordered_map<int, int>* filterList; std::unordered_map<int, int>* filterList;
std::vector<code_pointer> results; std::vector<code_pointer> results;
......
...@@ -198,34 +198,85 @@ void Game::DrawBackGround() { ...@@ -198,34 +198,85 @@ void Game::DrawBackGround() {
} }
void Game::DrawLinkedZones(ClientCard* pcard) { void Game::DrawLinkedZones(ClientCard* pcard) {
int mark = pcard->link_marker; int mark = pcard->link_marker;
matManager.mSelField.AmbientColor = 0xff0261a2; ClientCard* pcard2;
driver->setMaterial(matManager.mSelField);
if (dField.hovered_sequence < 5) { if (dField.hovered_sequence < 5) {
if (mark & LINK_MARKER_LEFT && dField.hovered_sequence > 0) if (mark & LINK_MARKER_LEFT && dField.hovered_sequence > 0) {
pcard2 = mainGame->dField.mzone[dField.hovered_controler][dField.hovered_sequence - 1];
CheckMutual(pcard2, LINK_MARKER_RIGHT);
driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][dField.hovered_sequence - 1], 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][dField.hovered_sequence - 1], 4, matManager.iRectangle, 2);
if (mark & LINK_MARKER_RIGHT && dField.hovered_sequence < 4) }
if (mark & LINK_MARKER_RIGHT && dField.hovered_sequence < 4) {
pcard2 = mainGame->dField.mzone[dField.hovered_controler][dField.hovered_sequence + 1];
CheckMutual(pcard2, LINK_MARKER_LEFT);
driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][dField.hovered_sequence + 1], 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][dField.hovered_sequence + 1], 4, matManager.iRectangle, 2);
}
if (dInfo.duel_rule >= 4) { if (dInfo.duel_rule >= 4) {
if ((mark & LINK_MARKER_TOP_LEFT && dField.hovered_sequence == 2) || (mark & LINK_MARKER_TOP && dField.hovered_sequence == 1) || (mark & LINK_MARKER_TOP_RIGHT && dField.hovered_sequence == 0)) if ((mark & LINK_MARKER_TOP_LEFT && dField.hovered_sequence == 2)
|| (mark & LINK_MARKER_TOP && dField.hovered_sequence == 1)
|| (mark & LINK_MARKER_TOP_RIGHT && dField.hovered_sequence == 0)) {
int mark = (dField.hovered_sequence == 2) ? LINK_MARKER_BOTTOM_RIGHT : (dField.hovered_sequence == 1) ? LINK_MARKER_BOTTOM : LINK_MARKER_BOTTOM_LEFT;
pcard2 = mainGame->dField.mzone[dField.hovered_controler][5];
if (!pcard2) {
pcard2 = mainGame->dField.mzone[1 - dField.hovered_controler][6];
mark = (dField.hovered_sequence == 2) ? LINK_MARKER_TOP_LEFT : (dField.hovered_sequence == 1) ? LINK_MARKER_TOP : LINK_MARKER_TOP_RIGHT;
}
CheckMutual(pcard2, mark);
driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][5], 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][5], 4, matManager.iRectangle, 2);
if ((mark & LINK_MARKER_TOP_LEFT && dField.hovered_sequence == 4) || (mark & LINK_MARKER_TOP && dField.hovered_sequence == 3) || (mark & LINK_MARKER_TOP_RIGHT && dField.hovered_sequence == 2)) }
if ((mark & LINK_MARKER_TOP_LEFT && dField.hovered_sequence == 4)
|| (mark & LINK_MARKER_TOP && dField.hovered_sequence == 3)
|| (mark & LINK_MARKER_TOP_RIGHT && dField.hovered_sequence == 2)) {
int mark = (dField.hovered_sequence == 4) ? LINK_MARKER_BOTTOM_RIGHT : (dField.hovered_sequence == 3) ? LINK_MARKER_BOTTOM : LINK_MARKER_BOTTOM_LEFT;
pcard2 = mainGame->dField.mzone[dField.hovered_controler][6];
if (!pcard2) {
pcard2 = mainGame->dField.mzone[1 - dField.hovered_controler][5];
mark = (dField.hovered_sequence == 4) ? LINK_MARKER_TOP_LEFT : (dField.hovered_sequence == 3) ? LINK_MARKER_TOP : LINK_MARKER_TOP_RIGHT;
}
CheckMutual(pcard2, mark);
driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][6], 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][6], 4, matManager.iRectangle, 2);
} }
}
} else { } else {
int swap = (dField.hovered_sequence == 5) ? 0 : 2; int swap = (dField.hovered_sequence == 5) ? 0 : 2;
if (mark & LINK_MARKER_BOTTOM_LEFT) if (mark & LINK_MARKER_BOTTOM_LEFT) {
pcard2 = mainGame->dField.mzone[dField.hovered_controler][0 + swap];
CheckMutual(pcard2, LINK_MARKER_TOP_RIGHT);
driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][0 + swap], 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][0 + swap], 4, matManager.iRectangle, 2);
if (mark & LINK_MARKER_BOTTOM) }
if (mark & LINK_MARKER_BOTTOM) {
pcard2 = mainGame->dField.mzone[dField.hovered_controler][1 + swap];
CheckMutual(pcard2, LINK_MARKER_TOP);
driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][1 + swap], 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][1 + swap], 4, matManager.iRectangle, 2);
if (mark & LINK_MARKER_BOTTOM_RIGHT) }
if (mark & LINK_MARKER_BOTTOM_RIGHT) {
pcard2 = mainGame->dField.mzone[dField.hovered_controler][2 + swap];
CheckMutual(pcard2, LINK_MARKER_TOP_LEFT);
driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][2 + swap], 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(&matManager.vFieldMzone[dField.hovered_controler][2 + swap], 4, matManager.iRectangle, 2);
if (mark & LINK_MARKER_TOP_LEFT) }
if (mark & LINK_MARKER_TOP_LEFT) {
pcard2 = mainGame->dField.mzone[1 - dField.hovered_controler][4 - swap];
CheckMutual(pcard2, LINK_MARKER_TOP_LEFT);
driver->drawVertexPrimitiveList(&matManager.vFieldMzone[1 - dField.hovered_controler][4 - swap], 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(&matManager.vFieldMzone[1 - dField.hovered_controler][4 - swap], 4, matManager.iRectangle, 2);
if (mark & LINK_MARKER_TOP) }
if (mark & LINK_MARKER_TOP) {
pcard2 = mainGame->dField.mzone[1 - dField.hovered_controler][3 - swap];
CheckMutual(pcard2, LINK_MARKER_TOP);
driver->drawVertexPrimitiveList(&matManager.vFieldMzone[1 - dField.hovered_controler][3 - swap], 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(&matManager.vFieldMzone[1 - dField.hovered_controler][3 - swap], 4, matManager.iRectangle, 2);
if (mark & LINK_MARKER_TOP_RIGHT) }
if (mark & LINK_MARKER_TOP_RIGHT) {
pcard2 = mainGame->dField.mzone[1 - dField.hovered_controler][2 - swap];
CheckMutual(pcard2, LINK_MARKER_TOP_RIGHT);
driver->drawVertexPrimitiveList(&matManager.vFieldMzone[1 - dField.hovered_controler][2 - swap], 4, matManager.iRectangle, 2); driver->drawVertexPrimitiveList(&matManager.vFieldMzone[1 - dField.hovered_controler][2 - swap], 4, matManager.iRectangle, 2);
} }
}
}
void Game::CheckMutual(ClientCard* pcard, int mark) {
matManager.mSelField.AmbientColor = 0xff0261a2;
driver->setMaterial(matManager.mSelField);
if (pcard && pcard->type & TYPE_LINK && pcard->link_marker & mark) {
matManager.mSelField.AmbientColor = 0xff009900;
driver->setMaterial(matManager.mSelField);
}
} }
void Game::DrawCards() { void Game::DrawCards() {
for(int p = 0; p < 2; ++p) { for(int p = 0; p < 2; ++p) {
...@@ -884,6 +935,11 @@ void Game::DrawSpec() { ...@@ -884,6 +935,11 @@ void Game::DrawSpec() {
} }
} }
} }
void Game::DrawBackImage(irr::video::ITexture* texture) {
if(!texture)
return;
driver->draw2DImage(texture, recti(0, 0, 1024, 640), recti(0, 0, texture->getOriginalSize().Width, texture->getOriginalSize().Height));
}
void Game::ShowElement(irr::gui::IGUIElement * win, int autoframe) { void Game::ShowElement(irr::gui::IGUIElement * win, int autoframe) {
FadingUnit fu; FadingUnit fu;
fu.fadingSize = win->getRelativePosition(); fu.fadingSize = win->getRelativePosition();
......
...@@ -2414,6 +2414,11 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -2414,6 +2414,11 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
return true; return true;
} }
case MSG_CHAIN_END: { case MSG_CHAIN_END: {
for(auto chit = mainGame->dField.chains.begin(); chit != mainGame->dField.chains.end(); ++chit) {
for(auto tgit = chit->target.begin(); tgit != chit->target.end(); ++tgit)
(*tgit)->is_showchaintarget = false;
chit->chain_card->is_showchaintarget = false;
}
mainGame->dField.chains.clear(); mainGame->dField.chains.clear();
return true; return true;
} }
......
...@@ -14,17 +14,14 @@ ...@@ -14,17 +14,14 @@
namespace ygo { namespace ygo {
bool ClientField::OnEvent(const irr::SEvent& event) { bool ClientField::OnEvent(const irr::SEvent& event) {
if(OnCommonEvent(event))
return false;
switch(event.EventType) { switch(event.EventType) {
case irr::EET_GUI_EVENT: { case irr::EET_GUI_EVENT: {
s32 id = event.GUIEvent.Caller->getID(); s32 id = event.GUIEvent.Caller->getID();
switch(event.GUIEvent.EventType) { switch(event.GUIEvent.EventType) {
case irr::gui::EGET_BUTTON_CLICKED: { case irr::gui::EGET_BUTTON_CLICKED: {
switch(id) { switch(id) {
case BUTTON_CLEAR_LOG: {
mainGame->lstLog->clear();
mainGame->logParam.clear();
break;
}
case BUTTON_HAND1: case BUTTON_HAND1:
case BUTTON_HAND2: case BUTTON_HAND2:
case BUTTON_HAND3: { case BUTTON_HAND3: {
...@@ -896,13 +893,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -896,13 +893,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
case irr::gui::EGET_LISTBOX_CHANGED: { case irr::gui::EGET_LISTBOX_CHANGED: {
switch(id) { switch(id) {
case LISTBOX_LOG: {
int sel = mainGame->lstLog->getSelected();
if(sel != -1 && (int)mainGame->logParam.size() >= sel && mainGame->logParam[sel]) {
mainGame->ShowCardInfo(mainGame->logParam[sel]);
}
break;
}
case LISTBOX_ANCARD: { case LISTBOX_ANCARD: {
int sel = mainGame->lstANCard->getSelected(); int sel = mainGame->lstANCard->getSelected();
if(sel != -1) { if(sel != -1) {
...@@ -913,18 +903,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -913,18 +903,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
break; break;
} }
case irr::gui::EGET_LISTBOX_SELECTED_AGAIN: {
switch(id) {
case LISTBOX_LOG: {
int sel = mainGame->lstLog->getSelected();
if(sel != -1 && (int)mainGame->logParam.size() >= sel && mainGame->logParam[sel]) {
mainGame->wInfos->setActiveTab(0);
}
break;
}
}
break;
}
case irr::gui::EGET_SCROLL_BAR_CHANGED: { case irr::gui::EGET_SCROLL_BAR_CHANGED: {
switch(id) { switch(id) {
case SCROLL_CARD_SELECT: { case SCROLL_CARD_SELECT: {
...@@ -1034,11 +1012,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1034,11 +1012,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
break; break;
} }
case SCROLL_CARDTEXT: {
u32 pos = mainGame->scrCardText->getPos();
mainGame->SetStaticText(mainGame->stText, mainGame->stText->getRelativePosition().getWidth()-25, mainGame->textFont, mainGame->showingtext, pos);
break;
}
break; break;
} }
} }
...@@ -1893,12 +1866,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1893,12 +1866,6 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
break; break;
} }
case irr::KEY_KEY_R: {
if(mainGame->gameConf.control_mode == 0
&& !event.KeyInput.PressedDown && !mainGame->HasFocus(EGUIET_EDIT_BOX))
mainGame->textFont->setTransparency(true);
break;
}
case irr::KEY_F1: case irr::KEY_F1:
case irr::KEY_F2: case irr::KEY_F2:
case irr::KEY_F3: case irr::KEY_F3:
...@@ -1970,15 +1937,101 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1970,15 +1937,101 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
} }
break; break;
} }
default: break;
}
break;
}
default: break;
}
return false;
}
bool ClientField::OnCommonEvent(const irr::SEvent& event) {
switch(event.EventType) {
case irr::EET_GUI_EVENT: {
s32 id = event.GUIEvent.Caller->getID();
switch(event.GUIEvent.EventType) {
case irr::gui::EGET_BUTTON_CLICKED: {
switch(id) {
case BUTTON_CLEAR_LOG: {
mainGame->lstLog->clear();
mainGame->logParam.clear();
return true;
break;
}
}
break;
}
case irr::gui::EGET_CHECKBOX_CHANGED: {
switch(id) {
case CHECKBOX_AUTO_SEARCH: {
mainGame->gameConf.auto_search_limit = mainGame->chkAutoSearch->isChecked() ? 0 : -1;
return true;
break;
}
}
break;
}
case irr::gui::EGET_LISTBOX_CHANGED: {
switch(id) {
case LISTBOX_LOG: {
int sel = mainGame->lstLog->getSelected();
if(sel != -1 && (int)mainGame->logParam.size() >= sel && mainGame->logParam[sel]) {
mainGame->ShowCardInfo(mainGame->logParam[sel]);
}
return true;
break;
}
}
break;
}
case irr::gui::EGET_LISTBOX_SELECTED_AGAIN: {
switch(id) {
case LISTBOX_LOG: {
int sel = mainGame->lstLog->getSelected();
if(sel != -1 && (int)mainGame->logParam.size() >= sel && mainGame->logParam[sel]) {
mainGame->wInfos->setActiveTab(0);
}
return true;
break;
}
}
break;
}
case irr::gui::EGET_SCROLL_BAR_CHANGED: {
switch(id) {
case SCROLL_CARDTEXT: {
u32 pos = mainGame->scrCardText->getPos();
mainGame->SetStaticText(mainGame->stText, mainGame->stText->getRelativePosition().getWidth() - 25, mainGame->textFont, mainGame->showingtext, pos);
return true;
break;
}
}
break;
}
default: break;
}
break;
}
case irr::EET_KEY_INPUT_EVENT: {
switch(event.KeyInput.Key) {
case irr::KEY_KEY_R: {
if(mainGame->gameConf.control_mode == 0
&& !event.KeyInput.PressedDown && !mainGame->HasFocus(EGUIET_EDIT_BOX))
mainGame->textFont->setTransparency(true);
return true;
break;
}
case irr::KEY_F9: { case irr::KEY_F9: {
if(mainGame->gameConf.control_mode == 1 if(mainGame->gameConf.control_mode == 1
&& !event.KeyInput.PressedDown && !mainGame->HasFocus(EGUIET_EDIT_BOX)) && !event.KeyInput.PressedDown && !mainGame->HasFocus(EGUIET_EDIT_BOX))
mainGame->textFont->setTransparency(true); mainGame->textFont->setTransparency(true);
return true;
break; break;
} }
case irr::KEY_ESCAPE: { case irr::KEY_ESCAPE: {
if(!mainGame->HasFocus(EGUIET_EDIT_BOX)) if(!mainGame->HasFocus(EGUIET_EDIT_BOX))
mainGame->device->minimizeWindow(); mainGame->device->minimizeWindow();
return true;
break; break;
} }
default: break; default: break;
......
...@@ -269,6 +269,7 @@ bool Game::Initialize() { ...@@ -269,6 +269,7 @@ bool Game::Initialize() {
btnEP->setVisible(false); btnEP->setVisible(false);
//tab //tab
wInfos = env->addTabControl(rect<s32>(1, 275, 301, 639), 0, true); wInfos = env->addTabControl(rect<s32>(1, 275, 301, 639), 0, true);
wInfos->setTabExtraWidth(16);
wInfos->setVisible(false); wInfos->setVisible(false);
//info //info
irr::gui::IGUITab* tabInfo = wInfos->addTab(dataManager.GetSysString(1270)); irr::gui::IGUITab* tabInfo = wInfos->addTab(dataManager.GetSysString(1270));
...@@ -290,26 +291,44 @@ bool Game::Initialize() { ...@@ -290,26 +291,44 @@ bool Game::Initialize() {
lstLog = env->addListBox(rect<s32>(10, 10, 290, 290), tabLog, LISTBOX_LOG, false); lstLog = env->addListBox(rect<s32>(10, 10, 290, 290), tabLog, LISTBOX_LOG, false);
lstLog->setItemHeight(18); lstLog->setItemHeight(18);
btnClearLog = env->addButton(rect<s32>(160, 300, 260, 325), tabLog, BUTTON_CLEAR_LOG, dataManager.GetSysString(1272)); btnClearLog = env->addButton(rect<s32>(160, 300, 260, 325), tabLog, BUTTON_CLEAR_LOG, dataManager.GetSysString(1272));
//system //helper
irr::gui::IGUITab* tabSystem = wInfos->addTab(dataManager.GetSysString(1273)); irr::gui::IGUITab* tabHelper = wInfos->addTab(dataManager.GetSysString(1298));
chkMAutoPos = env->addCheckBox(false, rect<s32>(20, 20, 280, 45), tabSystem, -1, dataManager.GetSysString(1274)); int posX = 20;
int posY = 20;
chkMAutoPos = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabHelper, -1, dataManager.GetSysString(1274));
chkMAutoPos->setChecked(gameConf.chkMAutoPos != 0); chkMAutoPos->setChecked(gameConf.chkMAutoPos != 0);
chkSTAutoPos = env->addCheckBox(false, rect<s32>(20, 50, 280, 75), tabSystem, -1, dataManager.GetSysString(1278)); posY += 30;
chkSTAutoPos = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabHelper, -1, dataManager.GetSysString(1278));
chkSTAutoPos->setChecked(gameConf.chkSTAutoPos != 0); chkSTAutoPos->setChecked(gameConf.chkSTAutoPos != 0);
chkRandomPos = env->addCheckBox(false, rect<s32>(40, 80, 300, 105), tabSystem, -1, dataManager.GetSysString(1275)); posY += 30;
chkRandomPos = env->addCheckBox(false, rect<s32>(posX + 20, posY, posX + 20 + 260, posY + 25), tabHelper, -1, dataManager.GetSysString(1275));
chkRandomPos->setChecked(gameConf.chkRandomPos != 0); chkRandomPos->setChecked(gameConf.chkRandomPos != 0);
chkAutoChain = env->addCheckBox(false, rect<s32>(20, 110, 280, 135), tabSystem, -1, dataManager.GetSysString(1276)); posY += 30;
chkAutoChain = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabHelper, -1, dataManager.GetSysString(1276));
chkAutoChain->setChecked(gameConf.chkAutoChain != 0); chkAutoChain->setChecked(gameConf.chkAutoChain != 0);
chkWaitChain = env->addCheckBox(false, rect<s32>(20, 140, 280, 165), tabSystem, -1, dataManager.GetSysString(1277)); posY += 30;
chkWaitChain = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabHelper, -1, dataManager.GetSysString(1277));
chkWaitChain->setChecked(gameConf.chkWaitChain != 0); chkWaitChain->setChecked(gameConf.chkWaitChain != 0);
chkIgnore1 = env->addCheckBox(false, rect<s32>(20, 200, 280, 225), tabSystem, -1, dataManager.GetSysString(1290)); //system
irr::gui::IGUITab* tabSystem = wInfos->addTab(dataManager.GetSysString(1273));
posY = 20;
chkIgnore1 = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1290));
chkIgnore1->setChecked(gameConf.chkIgnore1 != 0); chkIgnore1->setChecked(gameConf.chkIgnore1 != 0);
chkIgnore2 = env->addCheckBox(false, rect<s32>(20, 230, 280, 255), tabSystem, -1, dataManager.GetSysString(1291)); posY += 30;
chkIgnore2 = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1291));
chkIgnore2->setChecked(gameConf.chkIgnore2 != 0); chkIgnore2->setChecked(gameConf.chkIgnore2 != 0);
chkHideSetname = env->addCheckBox(false, rect<s32>(20, 260, 280, 285), tabSystem, -1, dataManager.GetSysString(1354)); posY += 30;
chkHideSetname = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1354));
chkHideSetname->setChecked(gameConf.chkHideSetname != 0); chkHideSetname->setChecked(gameConf.chkHideSetname != 0);
chkHideHintButton = env->addCheckBox(false, rect<s32>(20, 290, 280, 315), tabSystem, -1, dataManager.GetSysString(1355)); posY += 30;
chkHideHintButton = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1355));
chkHideHintButton->setChecked(gameConf.chkHideHintButton != 0); chkHideHintButton->setChecked(gameConf.chkHideHintButton != 0);
posY += 30;
chkIgnoreDeckChanges = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, -1, dataManager.GetSysString(1357));
chkIgnoreDeckChanges->setChecked(gameConf.chkIgnoreDeckChanges != 0);
posY += 30;
chkAutoSearch = env->addCheckBox(false, rect<s32>(posX, posY, posX + 260, posY + 25), tabSystem, CHECKBOX_AUTO_SEARCH, dataManager.GetSysString(1358));
chkAutoSearch->setChecked(gameConf.auto_search_limit >= 0);
// //
wHand = env->addWindow(rect<s32>(500, 450, 825, 605), false, L""); wHand = env->addWindow(rect<s32>(500, 450, 825, 605), false, L"");
wHand->getCloseButton()->setVisible(false); wHand->getCloseButton()->setVisible(false);
...@@ -624,12 +643,12 @@ bool Game::Initialize() { ...@@ -624,12 +643,12 @@ bool Game::Initialize() {
btnChainIgnore->setVisible(false); btnChainIgnore->setVisible(false);
btnChainAlways->setVisible(false); btnChainAlways->setVisible(false);
btnChainWhenAvail->setVisible(false); btnChainWhenAvail->setVisible(false);
//cancel or finish
btnCancelOrFinish = env->addButton(rect<s32>(205, 230, 295, 265), 0, BUTTON_CANCEL_OR_FINISH, dataManager.GetSysString(1295));
btnCancelOrFinish->setVisible(false);
//shuffle //shuffle
btnShuffle = env->addButton(rect<s32>(205, 230, 295, 265), 0, BUTTON_CMD_SHUFFLE, dataManager.GetSysString(1297)); btnShuffle = env->addButton(rect<s32>(205, 230, 295, 265), 0, BUTTON_CMD_SHUFFLE, dataManager.GetSysString(1297));
btnShuffle->setVisible(false); btnShuffle->setVisible(false);
//cancel or finish
btnCancelOrFinish = env->addButton(rect<s32>(205, 230, 295, 265), 0, BUTTON_CANCEL_OR_FINISH, dataManager.GetSysString(1295));
btnCancelOrFinish->setVisible(false);
//leave/surrender/exit //leave/surrender/exit
btnLeaveGame = env->addButton(rect<s32>(205, 5, 295, 80), 0, BUTTON_LEAVE_GAME, L""); btnLeaveGame = env->addButton(rect<s32>(205, 5, 295, 80), 0, BUTTON_LEAVE_GAME, L"");
btnLeaveGame->setVisible(false); btnLeaveGame->setVisible(false);
...@@ -676,10 +695,9 @@ void Game::MainLoop() { ...@@ -676,10 +695,9 @@ void Game::MainLoop() {
atkframe += 0.1f; atkframe += 0.1f;
atkdy = (float)sin(atkframe); atkdy = (float)sin(atkframe);
driver->beginScene(true, true, SColor(0, 0, 0, 0)); driver->beginScene(true, true, SColor(0, 0, 0, 0));
if(imageManager.tBackGround)
driver->draw2DImage(imageManager.tBackGround, recti(0, 0, 1024, 640), recti(0, 0, imageManager.tBackGround->getOriginalSize().Width, imageManager.tBackGround->getOriginalSize().Height));
gMutex.Lock(); gMutex.Lock();
if(dInfo.isStarted) { if(dInfo.isStarted) {
DrawBackImage(imageManager.tBackGround);
DrawBackGround(); DrawBackGround();
DrawCards(); DrawCards();
DrawMisc(); DrawMisc();
...@@ -687,12 +705,10 @@ void Game::MainLoop() { ...@@ -687,12 +705,10 @@ void Game::MainLoop() {
driver->setMaterial(irr::video::IdentityMaterial); driver->setMaterial(irr::video::IdentityMaterial);
driver->clearZBuffer(); driver->clearZBuffer();
} else if(is_building) { } else if(is_building) {
if(imageManager.tBackGround_deck) DrawBackImage(imageManager.tBackGround_deck);
driver->draw2DImage(imageManager.tBackGround_deck, recti(0, 0, 1024, 640), recti(0, 0, imageManager.tBackGround->getOriginalSize().Width, imageManager.tBackGround->getOriginalSize().Height));
DrawDeckBd(); DrawDeckBd();
} else { } else {
if(imageManager.tBackGround_menu) DrawBackImage(imageManager.tBackGround_menu);
driver->draw2DImage(imageManager.tBackGround_menu, recti(0, 0, 1024, 640), recti(0, 0, imageManager.tBackGround->getOriginalSize().Width, imageManager.tBackGround->getOriginalSize().Height));
} }
DrawGUI(); DrawGUI();
DrawSpec(); DrawSpec();
...@@ -970,6 +986,7 @@ void Game::LoadConfig() { ...@@ -970,6 +986,7 @@ void Game::LoadConfig() {
gameConf.draw_field_spell = 1; gameConf.draw_field_spell = 1;
gameConf.separate_clear_button = 1; gameConf.separate_clear_button = 1;
gameConf.auto_search_limit = -1; gameConf.auto_search_limit = -1;
gameConf.chkIgnoreDeckChanges = 0;
fseek(fp, 0, SEEK_END); fseek(fp, 0, SEEK_END);
int fsize = ftell(fp); int fsize = ftell(fp);
fseek(fp, 0, SEEK_SET); fseek(fp, 0, SEEK_SET);
...@@ -1028,6 +1045,8 @@ void Game::LoadConfig() { ...@@ -1028,6 +1045,8 @@ void Game::LoadConfig() {
gameConf.separate_clear_button = atoi(valbuf); gameConf.separate_clear_button = atoi(valbuf);
} else if(!strcmp(strbuf, "auto_search_limit")) { } else if(!strcmp(strbuf, "auto_search_limit")) {
gameConf.auto_search_limit = atoi(valbuf); gameConf.auto_search_limit = atoi(valbuf);
} else if(!strcmp(strbuf, "ignore_deck_changes")) {
gameConf.chkIgnoreDeckChanges = atoi(valbuf);
} else { } else {
// options allowing multiple words // options allowing multiple words
sscanf(linebuf, "%s = %240[^\n]", strbuf, valbuf); sscanf(linebuf, "%s = %240[^\n]", strbuf, valbuf);
...@@ -1084,6 +1103,7 @@ void Game::SaveConfig() { ...@@ -1084,6 +1103,7 @@ void Game::SaveConfig() {
fprintf(fp, "separate_clear_button = %d\n", gameConf.separate_clear_button); fprintf(fp, "separate_clear_button = %d\n", gameConf.separate_clear_button);
fprintf(fp, "#auto_search_limit >= 0: Start search automatically when the user enters N chars\n"); fprintf(fp, "#auto_search_limit >= 0: Start search automatically when the user enters N chars\n");
fprintf(fp, "auto_search_limit = %d\n", gameConf.auto_search_limit); fprintf(fp, "auto_search_limit = %d\n", gameConf.auto_search_limit);
fprintf(fp, "ignore_deck_changes = %d\n", ((mainGame->chkIgnoreDeckChanges->isChecked()) ? 1 : 0));
fclose(fp); fclose(fp);
} }
void Game::ShowCardInfo(int code) { void Game::ShowCardInfo(int code) {
......
...@@ -38,6 +38,7 @@ struct Config { ...@@ -38,6 +38,7 @@ struct Config {
int draw_field_spell; int draw_field_spell;
int separate_clear_button; int separate_clear_button;
int auto_search_limit; int auto_search_limit;
int chkIgnoreDeckChanges;
}; };
struct DuelInfo { struct DuelInfo {
...@@ -94,12 +95,14 @@ public: ...@@ -94,12 +95,14 @@ public:
void DrawSelectionLine(irr::video::S3DVertex* vec, bool strip, int width, float* cv); void DrawSelectionLine(irr::video::S3DVertex* vec, bool strip, int width, float* cv);
void DrawBackGround(); void DrawBackGround();
void DrawLinkedZones(ClientCard* pcard); void DrawLinkedZones(ClientCard* pcard);
void CheckMutual(ClientCard* pcard, int mark);
void DrawCards(); void DrawCards();
void DrawCard(ClientCard* pcard); void DrawCard(ClientCard* pcard);
void DrawMisc(); void DrawMisc();
void DrawStatus(ClientCard* pcard, int x1, int y1, int x2, int y2); void DrawStatus(ClientCard* pcard, int x1, int y1, int x2, int y2);
void DrawGUI(); void DrawGUI();
void DrawSpec(); void DrawSpec();
void DrawBackImage(irr::video::ITexture* texture);
void ShowElement(irr::gui::IGUIElement* element, int autoframe = 0); void ShowElement(irr::gui::IGUIElement* element, int autoframe = 0);
void HideElement(irr::gui::IGUIElement* element, bool set_action = false); void HideElement(irr::gui::IGUIElement* element, bool set_action = false);
void PopupElement(irr::gui::IGUIElement* element, int hideframe = 0); void PopupElement(irr::gui::IGUIElement* element, int hideframe = 0);
...@@ -214,6 +217,8 @@ public: ...@@ -214,6 +217,8 @@ public:
irr::gui::IGUICheckBox* chkWaitChain; irr::gui::IGUICheckBox* chkWaitChain;
irr::gui::IGUICheckBox* chkHideSetname; irr::gui::IGUICheckBox* chkHideSetname;
irr::gui::IGUICheckBox* chkHideHintButton; irr::gui::IGUICheckBox* chkHideHintButton;
irr::gui::IGUICheckBox* chkIgnoreDeckChanges;
irr::gui::IGUICheckBox* chkAutoSearch;
irr::gui::IGUIListBox* lstLog; irr::gui::IGUIListBox* lstLog;
irr::gui::IGUIButton* btnClearLog; irr::gui::IGUIButton* btnClearLog;
irr::gui::IGUIButton* btnSaveLog; irr::gui::IGUIButton* btnSaveLog;
...@@ -565,6 +570,7 @@ extern unsigned char draw_count; ...@@ -565,6 +570,7 @@ extern unsigned char draw_count;
#define LISTBOX_SINGLEPLAY_LIST 350 #define LISTBOX_SINGLEPLAY_LIST 350
#define BUTTON_LOAD_SINGLEPLAY 351 #define BUTTON_LOAD_SINGLEPLAY 351
#define BUTTON_CANCEL_SINGLEPLAY 352 #define BUTTON_CANCEL_SINGLEPLAY 352
#define CHECKBOX_AUTO_SEARCH 360
#define COMBOBOX_SORTTYPE 370 #define COMBOBOX_SORTTYPE 370
#define BUTTON_MARKS_FILTER 380 #define BUTTON_MARKS_FILTER 380
......
...@@ -28,7 +28,11 @@ bool ImageManager::Initial() { ...@@ -28,7 +28,11 @@ bool ImageManager::Initial() {
tHand[2] = driver->getTexture("textures/f3.jpg"); tHand[2] = driver->getTexture("textures/f3.jpg");
tBackGround = driver->getTexture("textures/bg.jpg"); tBackGround = driver->getTexture("textures/bg.jpg");
tBackGround_menu = driver->getTexture("textures/bg_menu.jpg"); tBackGround_menu = driver->getTexture("textures/bg_menu.jpg");
if(!tBackGround_menu)
tBackGround_menu = tBackGround;
tBackGround_deck = driver->getTexture("textures/bg_deck.jpg"); tBackGround_deck = driver->getTexture("textures/bg_deck.jpg");
if(!tBackGround_deck)
tBackGround_deck = tBackGround;
tField[0] = driver->getTexture("textures/field2.png"); tField[0] = driver->getTexture("textures/field2.png");
tFieldTransparent[0] = driver->getTexture("textures/field-transparent2.png"); tFieldTransparent[0] = driver->getTexture("textures/field-transparent2.png");
tField[1] = driver->getTexture("textures/field3.png"); tField[1] = driver->getTexture("textures/field3.png");
......
...@@ -244,46 +244,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -244,46 +244,7 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
mainGame->ebDeckname->setText(L""); mainGame->ebDeckname->setText(L"");
} }
mainGame->HideElement(mainGame->wMainMenu); mainGame->HideElement(mainGame->wMainMenu);
mainGame->is_building = true; mainGame->deckBuilder.Initialize();
mainGame->is_siding = false;
mainGame->wInfos->setVisible(true);
mainGame->wCardImg->setVisible(true);
mainGame->wDeckEdit->setVisible(true);
mainGame->wFilter->setVisible(true);
mainGame->wSort->setVisible(true);
mainGame->btnLeaveGame->setVisible(true);
mainGame->btnLeaveGame->setText(dataManager.GetSysString(1306));
mainGame->btnSideOK->setVisible(false);
mainGame->deckBuilder.filterList = deckManager._lfList[0].content;
mainGame->cbDBLFList->setSelected(0);
mainGame->cbCardType->setSelected(0);
mainGame->cbCardType2->setSelected(0);
mainGame->cbAttribute->setSelected(0);
mainGame->cbRace->setSelected(0);
mainGame->ebAttack->setText(L"");
mainGame->ebDefense->setText(L"");
mainGame->ebStar->setText(L"");
mainGame->ebScale->setText(L"");
mainGame->cbCardType2->setEnabled(false);
mainGame->cbAttribute->setEnabled(false);
mainGame->cbRace->setEnabled(false);
mainGame->ebAttack->setEnabled(false);
mainGame->ebDefense->setEnabled(false);
mainGame->ebStar->setEnabled(false);
mainGame->ebScale->setEnabled(false);
mainGame->deckBuilder.filter_effect = 0;
mainGame->deckBuilder.filter_marks = 0;
mainGame->deckBuilder.result_string[0] = L'0';
mainGame->deckBuilder.result_string[1] = 0;
mainGame->deckBuilder.results.clear();
mainGame->deckBuilder.is_draging = false;
mainGame->deckBuilder.is_deleting = false;
mainGame->deckBuilder.is_clearing = false;
mainGame->device->setEventReceiver(&mainGame->deckBuilder);
for(int i = 0; i < 32; ++i)
mainGame->chkCategory[i]->setChecked(false);
for(int i = 0; i < 8; i++)
mainGame->btnMark[i]->setPressed(false);
break; break;
} }
} }
......
...@@ -303,6 +303,7 @@ ...@@ -303,6 +303,7 @@
!system 1295 取消操作 !system 1295 取消操作
!system 1296 完成选择 !system 1296 完成选择
!system 1297 切洗手卡 !system 1297 切洗手卡
!system 1298 辅助功能
!system 1300 禁限卡表: !system 1300 禁限卡表:
!system 1301 卡组列表: !system 1301 卡组列表:
!system 1302 保存 !system 1302 保存
...@@ -356,6 +357,9 @@ ...@@ -356,6 +357,9 @@
!system 1353 播放起始于回合: !system 1353 播放起始于回合:
!system 1354 不显示卡片系列 !system 1354 不显示卡片系列
!system 1355 不显示提示按钮 !system 1355 不显示提示按钮
!system 1356 是否要放弃对卡组的修改?
!system 1357 不提示保留对卡组的修改
!system 1358 键入关键字后自动进行搜索
!system 1360 上一步 !system 1360 上一步
!system 1370 星数↑ !system 1370 星数↑
!system 1371 攻击↑ !system 1371 攻击↑
......
...@@ -26,3 +26,4 @@ draw_field_spell = 1 ...@@ -26,3 +26,4 @@ draw_field_spell = 1
separate_clear_button = 1 separate_clear_button = 1
#auto_search_limit >= 0: Start search automatically when the user enters N chars. #auto_search_limit >= 0: Start search automatically when the user enters N chars.
auto_search_limit = -1 auto_search_limit = -1
ignore_deck_changes = 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