Commit ab550a4b authored by VanillaSalt's avatar VanillaSalt

fix

parent 673e09d5
......@@ -406,6 +406,60 @@ void ClientField::ShowSelectCard(bool buttonok) {
else mainGame->btnSelectOK->setVisible(false);
mainGame->PopupElement(mainGame->wCardSelect);
}
void ClientField::ShowChainCard() {
if(selectable_cards.size() <= 5) {
int startpos = 30 + 125 * (5 - selectable_cards.size()) / 2;
for(size_t i = 0; i < selectable_cards.size(); ++i) {
if(selectable_cards[i]->code)
mainGame->imageLoading.insert(std::make_pair(mainGame->btnCardSelect[i], selectable_cards[i]->code));
else
mainGame->btnCardSelect[i]->setImage(imageManager.tCover);
mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(startpos + i * 125, 55, startpos + 120 + i * 125, 225));
mainGame->btnCardSelect[i]->setPressed(false);
mainGame->btnCardSelect[i]->setVisible(true);
myswprintf(formatBuffer, L"%ls[%d]", dataManager.FormatLocation(selectable_cards[i]->location, selectable_cards[i]->sequence),
selectable_cards[i]->sequence + 1);
mainGame->stCardPos[i]->setText(formatBuffer);
mainGame->stCardPos[i]->setVisible(true);;
if(selectable_cards[i]->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
mainGame->stCardPos[i]->setRelativePosition(rect<s32>(startpos + 10 + i * 125, 30, startpos + 109 + i * 125, 50));
}
for(int i = selectable_cards.size(); i < 5; ++i) {
mainGame->btnCardSelect[i]->setVisible(false);
mainGame->stCardPos[i]->setVisible(false);
}
mainGame->scrCardList->setPos(0);
mainGame->scrCardList->setVisible(false);
} else {
for(int i = 0; i < 5; ++i) {
if(selectable_cards[i]->code)
mainGame->imageLoading.insert(std::make_pair(mainGame->btnCardSelect[i], selectable_cards[i]->code));
else
mainGame->btnCardSelect[i]->setImage(imageManager.tCover);
mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>(30 + i * 125, 55, 30 + 120 + i * 125, 225));
mainGame->btnCardSelect[i]->setPressed(false);
mainGame->btnCardSelect[i]->setVisible(true);
myswprintf(formatBuffer, L"%ls[%d]", dataManager.FormatLocation(selectable_cards[i]->location, selectable_cards[i]->sequence),
selectable_cards[i]->sequence + 1);
mainGame->stCardPos[i]->setText(formatBuffer);
mainGame->stCardPos[i]->setVisible(true);
if(selectable_cards[i]->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xffd0d0d0);
else mainGame->stCardPos[i]->setBackgroundColor(0xffffffff);
mainGame->stCardPos[i]->setRelativePosition(rect<s32>(40 + i * 125, 30, 139 + i * 125, 50));
}
mainGame->scrCardList->setVisible(true);
mainGame->scrCardList->setMin(0);
mainGame->scrCardList->setMax((selectable_cards.size() - 5) * 10 + 9);
mainGame->scrCardList->setPos(0);
}
if(!chain_forced)
mainGame->btnSelectOK->setVisible(true);
else mainGame->btnSelectOK->setVisible(false);
mainGame->PopupElement(mainGame->wCardSelect);
}
void ClientField::ReplaySwap() {
std::swap(deck[0], deck[1]);
std::swap(hand[0], hand[1]);
......
......@@ -82,6 +82,7 @@ public:
void ClearSelect();
void ClearChainSelect();
void ShowSelectCard(bool buttonok = false);
void ShowChainCard();
void ReplaySwap();
void RefreshAllCards();
......
......@@ -1152,6 +1152,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
/*int hint1 = */BufferIO::ReadInt32(pbuf);
int c, l, s, ss, desc;
ClientCard* pcard;
bool panelmode = false;
mainGame->dField.chain_forced = (forced != 0);
mainGame->dField.activatable_cards.clear();
mainGame->dField.activatable_descs.clear();
......@@ -1168,10 +1169,12 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
pcard->is_selectable = true;
pcard->is_selected = false;
pcard->cmdFlag |= COMMAND_ACTIVATE;
if (pcard->location == LOCATION_GRAVE)
if(l == LOCATION_GRAVE)
mainGame->dField.grave_act = true;
if (pcard->location == LOCATION_REMOVED)
if(l == LOCATION_REMOVED)
mainGame->dField.remove_act = true;
if(l & 0xc1)
panelmode = true;
}
if(!forced && (mainGame->ignore_chain || ((count == 0 || specount == 0) && !mainGame->always_chain))) {
SetResponseI(-1);
......@@ -1191,6 +1194,14 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->gMutex.Lock();
mainGame->stHintMsg->setText(dataManager.GetSysString(550));
mainGame->stHintMsg->setVisible(true);
if(panelmode) {
mainGame->dField.list_command = COMMAND_ACTIVATE;
mainGame->dField.selectable_cards = mainGame->dField.activatable_cards;
std::sort(mainGame->dField.selectable_cards.begin(), mainGame->dField.selectable_cards.end());
auto eit = std::unique(mainGame->dField.selectable_cards.begin(), mainGame->dField.selectable_cards.end());
mainGame->dField.selectable_cards.erase(eit, mainGame->dField.selectable_cards.end());
mainGame->dField.ShowChainCard();
} else {
if(!forced) {
if(count == 0)
myswprintf(textBuffer, L"%ls\n%ls", dataManager.GetSysString(201), dataManager.GetSysString(202));
......@@ -1199,6 +1210,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
mainGame->SetStaticText(mainGame->stQMessage, 310, mainGame->textFont, (wchar_t*)textBuffer);
mainGame->PopupElement(mainGame->wQuery);
}
}
mainGame->gMutex.Unlock();
return false;
}
......
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