Commit f546e271 authored by VanillaSalt's avatar VanillaSalt

update MSG_SELECT_SUM

parent 0811b914
#include "client_field.h"
#include "client_card.h"
#include "duelclient.h"
#include "data_manager.h"
#include "image_manager.h"
#include "game.h"
......@@ -1099,6 +1100,40 @@ void ClientField::FadeCard(ClientCard * pcard, int alpha, int frame) {
pcard->is_fading = true;
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() {
std::set<ClientCard*> selable;
std::set<ClientCard*>::iterator sit;
......@@ -1116,9 +1151,8 @@ bool ClientField::CheckSelectSum() {
selable.erase(selected_cards[i]);
}
selectsum_cards.clear();
bool ret;
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();
for(sit = selectsum_cards.begin(); sit != selectsum_cards.end(); ++sit) {
(*sit)->is_selectable = true;
......@@ -1127,7 +1161,7 @@ bool ClientField::CheckSelectSum() {
return ret;
} else {
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) {
op1 = selected_cards[i]->opParam & 0xffff;
op2 = selected_cards[i]->opParam >> 16;
......@@ -1198,9 +1232,13 @@ bool ClientField::check_min(std::set<ClientCard*>& left, std::set<ClientCard*>::
|| check_min(left, index, min, max);
}
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 (acc == 0)
return true;
if (acc == 0) {
int count = selected_cards.size() - must_select_count;
return count >= select_min && count <= select_max;
}
check_sel_sum_t(left, acc);
return false;
}
......
......@@ -96,6 +96,7 @@ public:
void GetCardLocation(ClientCard* pcard, irr::core::vector3df* t, irr::core::vector3df* r, bool setTrans = false);
void MoveCard(ClientCard* pcard, int frame);
void FadeCard(ClientCard* pcard, int alpha, int frame);
void ShowSelectSum(bool panelmode);
bool CheckSelectSum();
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);
......
......@@ -1460,18 +1460,17 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
panelmode = true;
}
std::sort(mainGame->dField.selectsum_all.begin(), mainGame->dField.selectsum_all.end(), ClientCard::client_card_sort);
mainGame->dField.CheckSelectSum();
if(select_hint)
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);
select_hint = 0;
if (panelmode) {
mainGame->wCardSelect->setText(textBuffer);
mainGame->dField.ShowSelectCard();
} else {
mainGame->stHintMsg->setText(textBuffer);
mainGame->stHintMsg->setVisible(true);
}
mainGame->dField.ShowSelectSum(panelmode);
return false;
}
case MSG_SORT_CARD:
......
......@@ -576,20 +576,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
case MSG_SELECT_SUM: {
command_card = selectable_cards[id - BUTTON_CARD_0 + mainGame->scrCardList->getPos() / 10];
selected_cards.push_back(command_card);
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();
}
ShowSelectSum(true);
break;
}
case MSG_SORT_CHAIN:
......@@ -1218,21 +1205,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
selected_cards.erase(it);
} else
selected_cards.push_back(clicked_card);
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;
ShowSelectSum(false);
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