Commit f546e271 authored by VanillaSalt's avatar VanillaSalt

update MSG_SELECT_SUM

parent 0811b914
#include "client_field.h" #include "client_field.h"
#include "client_card.h" #include "client_card.h"
#include "duelclient.h"
#include "data_manager.h" #include "data_manager.h"
#include "image_manager.h" #include "image_manager.h"
#include "game.h" #include "game.h"
...@@ -1099,6 +1100,40 @@ void ClientField::FadeCard(ClientCard * pcard, int alpha, int frame) { ...@@ -1099,6 +1100,40 @@ void ClientField::FadeCard(ClientCard * pcard, int alpha, int frame) {
pcard->is_fading = true; pcard->is_fading = true;
pcard->aniFrame = frame; pcard->aniFrame = frame;
} }
void ClientField::ShowSelectSum(bool panelmode) {
if(panelmode) {
if(CheckSelectSum()) {
if(selectsum_cards.size() == 0 || selectable_cards.size() == 0) {
SetResponseSelectedCards();
mainGame->HideElement(mainGame->wCardSelect, true);
} else {
select_ready = true;
mainGame->wCardSelect->setVisible(false);
mainGame->dField.ShowSelectCard(true);
}
} else {
select_ready = false;
mainGame->wCardSelect->setVisible(false);
mainGame->dField.ShowSelectCard();
}
} else {
if(CheckSelectSum()) {
if(selectsum_cards.size() == 0 || selectable_cards.size() == 0) {
SetResponseSelectedCards();
DuelClient::SendResponse();
} else {
select_ready = true;
wchar_t wbuf[256], *pwbuf = wbuf;
BufferIO::CopyWStrRef(dataManager.GetSysString(209), pwbuf, 256);
*pwbuf++ = L'\n';
BufferIO::CopyWStrRef(dataManager.GetSysString(210), pwbuf, 256);
mainGame->stQMessage->setText(wbuf);
mainGame->PopupElement(mainGame->wQuery);
}
} else
select_ready = false;
}
}
bool ClientField::CheckSelectSum() { bool ClientField::CheckSelectSum() {
std::set<ClientCard*> selable; std::set<ClientCard*> selable;
std::set<ClientCard*>::iterator sit; std::set<ClientCard*>::iterator sit;
...@@ -1116,9 +1151,8 @@ bool ClientField::CheckSelectSum() { ...@@ -1116,9 +1151,8 @@ bool ClientField::CheckSelectSum() {
selable.erase(selected_cards[i]); selable.erase(selected_cards[i]);
} }
selectsum_cards.clear(); selectsum_cards.clear();
bool ret;
if (select_mode == 0) { if (select_mode == 0) {
ret = check_sel_sum_s(selable, 0, select_sumval); bool ret = check_sel_sum_s(selable, 0, select_sumval);
selectable_cards.clear(); selectable_cards.clear();
for(sit = selectsum_cards.begin(); sit != selectsum_cards.end(); ++sit) { for(sit = selectsum_cards.begin(); sit != selectsum_cards.end(); ++sit) {
(*sit)->is_selectable = true; (*sit)->is_selectable = true;
...@@ -1127,7 +1161,7 @@ bool ClientField::CheckSelectSum() { ...@@ -1127,7 +1161,7 @@ bool ClientField::CheckSelectSum() {
return ret; return ret;
} else { } else {
int op1, op2, mm = -1, ms, m, max = 0, sumc = 0, sums; int op1, op2, mm = -1, ms, m, max = 0, sumc = 0, sums;
ret = false; bool ret = false;
for (size_t i = 0; i < selected_cards.size(); ++i) { for (size_t i = 0; i < selected_cards.size(); ++i) {
op1 = selected_cards[i]->opParam & 0xffff; op1 = selected_cards[i]->opParam & 0xffff;
op2 = selected_cards[i]->opParam >> 16; op2 = selected_cards[i]->opParam >> 16;
...@@ -1198,9 +1232,13 @@ bool ClientField::check_min(std::set<ClientCard*>& left, std::set<ClientCard*>:: ...@@ -1198,9 +1232,13 @@ bool ClientField::check_min(std::set<ClientCard*>& left, std::set<ClientCard*>::
|| check_min(left, index, min, max); || check_min(left, index, min, max);
} }
bool ClientField::check_sel_sum_s(const std::set<ClientCard*>& left, int index, int acc) { bool ClientField::check_sel_sum_s(const std::set<ClientCard*>& left, int index, int acc) {
if (acc < 0)
return false;
if (index == (int)selected_cards.size()) { if (index == (int)selected_cards.size()) {
if (acc == 0) if (acc == 0) {
return true; int count = selected_cards.size() - must_select_count;
return count >= select_min && count <= select_max;
}
check_sel_sum_t(left, acc); check_sel_sum_t(left, acc);
return false; return false;
} }
......
...@@ -96,6 +96,7 @@ public: ...@@ -96,6 +96,7 @@ public:
void GetCardLocation(ClientCard* pcard, irr::core::vector3df* t, irr::core::vector3df* r, bool setTrans = false); void GetCardLocation(ClientCard* pcard, irr::core::vector3df* t, irr::core::vector3df* r, bool setTrans = false);
void MoveCard(ClientCard* pcard, int frame); void MoveCard(ClientCard* pcard, int frame);
void FadeCard(ClientCard* pcard, int alpha, int frame); void FadeCard(ClientCard* pcard, int alpha, int frame);
void ShowSelectSum(bool panelmode);
bool CheckSelectSum(); bool CheckSelectSum();
bool check_min(std::set<ClientCard*>& left, std::set<ClientCard*>::iterator index, int min, int max); bool check_min(std::set<ClientCard*>& left, std::set<ClientCard*>::iterator index, int min, int max);
bool check_sel_sum_s(const std::set<ClientCard*>& left, int index, int acc); bool check_sel_sum_s(const std::set<ClientCard*>& left, int index, int acc);
......
...@@ -1460,18 +1460,17 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) { ...@@ -1460,18 +1460,17 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
panelmode = true; panelmode = true;
} }
std::sort(mainGame->dField.selectsum_all.begin(), mainGame->dField.selectsum_all.end(), ClientCard::client_card_sort); std::sort(mainGame->dField.selectsum_all.begin(), mainGame->dField.selectsum_all.end(), ClientCard::client_card_sort);
mainGame->dField.CheckSelectSum();
if(select_hint) if(select_hint)
myswprintf(textBuffer, L"%ls(%d)", dataManager.GetDesc(select_hint), mainGame->dField.select_sumval); myswprintf(textBuffer, L"%ls(%d)", dataManager.GetDesc(select_hint), mainGame->dField.select_sumval);
else myswprintf(textBuffer, L"%ls(%d)", dataManager.GetSysString(560), mainGame->dField.select_sumval); else myswprintf(textBuffer, L"%ls(%d)", dataManager.GetSysString(560), mainGame->dField.select_sumval);
select_hint = 0; select_hint = 0;
if (panelmode) { if (panelmode) {
mainGame->wCardSelect->setText(textBuffer); mainGame->wCardSelect->setText(textBuffer);
mainGame->dField.ShowSelectCard();
} else { } else {
mainGame->stHintMsg->setText(textBuffer); mainGame->stHintMsg->setText(textBuffer);
mainGame->stHintMsg->setVisible(true); mainGame->stHintMsg->setVisible(true);
} }
mainGame->dField.ShowSelectSum(panelmode);
return false; return false;
} }
case MSG_SORT_CARD: case MSG_SORT_CARD:
......
...@@ -576,20 +576,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -576,20 +576,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case MSG_SELECT_SUM: { case MSG_SELECT_SUM: {
command_card = selectable_cards[id - BUTTON_CARD_0 + mainGame->scrCardList->getPos() / 10]; command_card = selectable_cards[id - BUTTON_CARD_0 + mainGame->scrCardList->getPos() / 10];
selected_cards.push_back(command_card); selected_cards.push_back(command_card);
if (CheckSelectSum()) { ShowSelectSum(true);
if(selectsum_cards.size() == 0 || selectable_cards.size() == 0) {
SetResponseSelectedCards();
mainGame->HideElement(mainGame->wCardSelect, true);
} else {
select_ready = true;
mainGame->wCardSelect->setVisible(false);
mainGame->dField.ShowSelectCard(true);
}
} else {
select_ready = false;
mainGame->wCardSelect->setVisible(false);
mainGame->dField.ShowSelectCard();
}
break; break;
} }
case MSG_SORT_CHAIN: case MSG_SORT_CHAIN:
...@@ -1218,21 +1205,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) { ...@@ -1218,21 +1205,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
selected_cards.erase(it); selected_cards.erase(it);
} else } else
selected_cards.push_back(clicked_card); selected_cards.push_back(clicked_card);
if (CheckSelectSum()) { ShowSelectSum(false);
if(selectsum_cards.size() == 0 || selectable_cards.size() == 0) {
SetResponseSelectedCards();
DuelClient::SendResponse();
} else {
select_ready = true;
wchar_t wbuf[256], *pwbuf = wbuf;
BufferIO::CopyWStrRef(dataManager.GetSysString(209), pwbuf, 256);
*pwbuf++ = L'\n';
BufferIO::CopyWStrRef(dataManager.GetSysString(210), pwbuf, 256);
mainGame->stQMessage->setText(wbuf);
mainGame->PopupElement(mainGame->wQuery);
}
} else
select_ready = false;
break; break;
} }
} }
......
Subproject commit 6207519a410f53a2c25e30d19a739000fcf29032 Subproject commit 68920d7142b4af9c65af5d3ee4673651727ec59e
Subproject commit b69936137b2a53affa7dd4a111b92fbc66be016b Subproject commit 7154552ca78d01b4cddd19ea3c7152e8d919c6eb
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