Commit 7330ba83 authored by fallenstardust's avatar fallenstardust

drag 宣言卡名与卡牌选择列表

可在准备界面刷新黑块
parent 824588e0
......@@ -15,13 +15,17 @@ ClientField::ClientField() {
//drag cardtext and lists
is_dragging_cardtext = false;
is_dragging_lstLog = false;
is_dragging_tabHelper = false;
is_dragging_tabSystem = false;
is_dragging_lstReplayList = false;
is_dragging_lstSinglePlayList = false;
is_dragging_lstBotList = false;
is_dragging_lstDecks = false;
is_dragging_lstANCard = false;
is_dragging_CardSelect = false;
is_dragging_CardDisplay = false;
is_dragging_tabHelper = false;
is_dragging_tabSystem = false;
dragging_tab_start_pos = 0;
dragging_tab_start_x = 0;
dragging_tab_start_y = 0;
hovered_card = 0;
......
......@@ -120,13 +120,17 @@ public:
irr::gui::IGUIElement* panel;
bool is_dragging_cardtext;
bool is_dragging_lstLog;
bool is_dragging_tabHelper;
bool is_dragging_tabSystem;
bool is_dragging_lstReplayList;
bool is_dragging_lstSinglePlayList;
bool is_dragging_lstBotList;
bool is_dragging_lstDecks;
int dragging_tab_start_pos;
bool is_dragging_lstANCard;
bool is_dragging_CardSelect;
bool is_dragging_CardDisplay;
bool is_dragging_tabHelper;
bool is_dragging_tabSystem;
int dragging_tab_start_pos;
int dragging_tab_start_x;
int dragging_tab_start_y;
std::vector<int> ancard;
int hovered_controler;
......
......@@ -1978,6 +1978,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
position2di mousepos = position2di(event.MouseInput.X, event.MouseInput.Y);
switch(event.MouseInput.Event) {
case irr::EMIE_LMOUSE_PRESSED_DOWN: {
//vertical scrollbar
if(root->getElementFromPoint(mousepos) == mainGame->stText) {
if(!mainGame->scrCardText->isVisible()) {
break;
......@@ -2032,7 +2033,15 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
dragging_tab_start_y = event.MouseInput.Y;
return true;
}
if(root->getElementFromPoint(mousepos) == mainGame->lstANCard) {
if(!mainGame->lstANCard->getVerticalScrollBar()->isVisible()) {
break;
}
is_dragging_lstANCard = true;
dragging_tab_start_pos = mainGame->lstANCard->getVerticalScrollBar()->getPos();
dragging_tab_start_y = event.MouseInput.Y;
return true;
}
if(root->getElementFromPoint(mousepos) == mainGame->tabHelper){
if(!mainGame->scrTabHelper->isVisible()) {
break;
......@@ -2050,28 +2059,56 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
dragging_tab_start_pos = mainGame->scrTabSystem->getPos();
dragging_tab_start_y = event.MouseInput.Y;
return true;
}
//horizontal scollbar
for(int i=0; i<5; i++) {
if(root->getElementFromPoint(mousepos) == mainGame->btnCardSelect[i] ||
root->getElementFromPoint(mousepos) == mainGame->stCardPos[i]) {
if(!mainGame->scrCardList->isVisible()) {
break;
}
is_dragging_CardSelect = true;
dragging_tab_start_pos = mainGame->scrCardList->getPos();
dragging_tab_start_x = event.MouseInput.X;
return true;
}
if(root->getElementFromPoint(mousepos) == mainGame->btnCardDisplay[i] ||
root->getElementFromPoint(mousepos) == mainGame->stDisplayPos[i]) {
if(!mainGame->scrDisplayList->isVisible()) {
break;
}
is_dragging_CardDisplay = true;
dragging_tab_start_pos = mainGame->scrDisplayList->getPos();
dragging_tab_start_x = event.MouseInput.X;
return true;
}
}
break;
}
case irr::EMIE_LMOUSE_LEFT_UP: {
if (root->getElementFromPoint(mousepos) == mainGame->stText) {
if (root->getElementFromPoint(mousepos) == mainGame->stText ||
root->getElementFromPoint(mousepos) == mainGame->wHostPrepare) {
mainGame->gMutex.lock();
mainGame->textFont->setTransparency(true);
mainGame->ClearChatMsg();
mainGame->gMutex.unlock();
break;
}//touch the pic of detail to refresh textfonts
}//touch the target place to refresh textfonts
is_dragging_cardtext = false;
is_dragging_lstLog = false;
is_dragging_lstReplayList = false;
is_dragging_lstSinglePlayList = false;
is_dragging_lstBotList = false;
is_dragging_lstDecks = false;
is_dragging_lstANCard = false;
is_dragging_CardSelect = false;
is_dragging_CardDisplay = false;
is_dragging_tabHelper = false;
is_dragging_tabSystem = false;
break;
}
case irr::EMIE_MOUSE_MOVED: {
//vertical scrollbar
if(is_dragging_cardtext) {
if(!mainGame->scrCardText->isVisible()) {
is_dragging_cardtext = false;
......@@ -2149,6 +2186,19 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
if(pos > max) pos = max;
mainGame->lstDecks->getVerticalScrollBar()->setPos(pos);
mainGame->lstDecks->getItemAt(lstDeckspos.UpperLeftCorner.X, mainGame->lstDecks->getVerticalScrollBar()->getPos());
}
if(is_dragging_lstANCard) {
if(!mainGame->lstANCard->getVerticalScrollBar()->isVisible()) {
is_dragging_lstANCard = false;
break;
}
rect<s32> lstANCardpos = mainGame->lstANCard->getRelativePosition();
int pos = dragging_tab_start_pos + ((dragging_tab_start_y - event.MouseInput.Y));
int max = mainGame->lstANCard->getVerticalScrollBar()->getMax();
if(pos < 0) pos = 0;
if(pos > max) pos = max;
mainGame->lstANCard->getVerticalScrollBar()->setPos(pos);
mainGame->lstANCard->getItemAt(lstANCardpos.UpperLeftCorner.X, mainGame->lstANCard->getVerticalScrollBar()->getPos());
}
if(is_dragging_tabHelper) {
if(!mainGame->scrTabHelper->isVisible()) {
......@@ -2176,7 +2226,132 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
mainGame->scrTabSystem->setPos(pos);
mainGame->tabSystem->setRelativePosition(recti(0, mainGame->scrTabSystem->getPos() * -1, tabSystempos.LowerRightCorner.X, tabSystempos.LowerRightCorner.Y));
}
break;
//horizontal scrollbar
if(is_dragging_CardSelect) {
if(!mainGame->scrCardList->isVisible()) {
is_dragging_CardSelect = false;
break;
}
int spos = dragging_tab_start_pos + ((dragging_tab_start_x - event.MouseInput.X));
int max = mainGame->scrCardList->getMax();
if(spos < 0) spos = 0;
if(spos > max) spos = max;
mainGame->scrCardList->setPos(spos);
int pos = mainGame->scrCardList->getPos() / 10;
for(int i = 0; i < 5; ++i) {
// draw selectable_cards[i + pos] in btnCardSelect[i]
mainGame->stCardPos[i]->enableOverrideColor(false);
// image
if(selectable_cards[i + pos]->code)
mainGame->btnCardSelect[i]->setImage(imageManager.GetTexture(selectable_cards[i + pos]->code));
else if(conti_selecting)
mainGame->btnCardSelect[i]->setImage(imageManager.GetTexture(selectable_cards[i + pos]->chain_code));
else
mainGame->btnCardSelect[i]->setImage(imageManager.tCover[selectable_cards[i + pos]->controler]);
mainGame->btnCardSelect[i]->setRelativePosition(rect<s32>((30 + i * 125) * mainGame->xScale, 55 * mainGame->yScale, (30 + 120 + i * 125) * mainGame->xScale, 225 * mainGame->yScale));
// text
wchar_t formatBuffer[2048];
if(sort_list.size()) {
if(sort_list[pos + i] > 0)
myswprintf(formatBuffer, L"%d", sort_list[pos + i]);
else
myswprintf(formatBuffer, L"");
} else {
if(conti_selecting)
myswprintf(formatBuffer, L"%ls", DataManager::unknown_string);
else if(selectable_cards[i + pos]->location == LOCATION_OVERLAY)
myswprintf(formatBuffer, L"%ls[%d](%d)",
dataManager.FormatLocation(selectable_cards[i + pos]->overlayTarget->location, selectable_cards[i + pos]->overlayTarget->sequence),
selectable_cards[i + pos]->overlayTarget->sequence + 1, selectable_cards[i + pos]->sequence + 1);
else
myswprintf(formatBuffer, L"%ls[%d]", dataManager.FormatLocation(selectable_cards[i + pos]->location, selectable_cards[i + pos]->sequence),
selectable_cards[i + pos]->sequence + 1);
}
mainGame->stCardPos[i]->setText(formatBuffer);
// color
if(conti_selecting)
mainGame->stCardPos[i]->setBackgroundColor(0xff56649f);
else if(selectable_cards[i + pos]->location == LOCATION_OVERLAY) {
if(selectable_cards[i + pos]->owner != selectable_cards[i + pos]->overlayTarget->controler)
mainGame->stCardPos[i]->setOverrideColor(0xff0000ff);
if(selectable_cards[i + pos]->is_selected)
mainGame->stCardPos[i]->setBackgroundColor(0x6011113d);
else if(selectable_cards[i + pos]->overlayTarget->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xff5a5a5a);
else
mainGame->stCardPos[i]->setBackgroundColor(0xff56649f);
} else if(selectable_cards[i + pos]->location == LOCATION_DECK || selectable_cards[i + pos]->location == LOCATION_EXTRA || selectable_cards[i + pos]->location == LOCATION_REMOVED) {
if(selectable_cards[i + pos]->position & POS_FACEDOWN)
mainGame->stCardPos[i]->setOverrideColor(0xff0000ff);
if(selectable_cards[i + pos]->is_selected)
mainGame->stCardPos[i]->setBackgroundColor(0x6011113d);
else if(selectable_cards[i + pos]->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xff5a5a5a);
else
mainGame->stCardPos[i]->setBackgroundColor(0xff56649f);
} else {
if(selectable_cards[i + pos]->is_selected)
mainGame->stCardPos[i]->setBackgroundColor(0x6011113d);
else if(selectable_cards[i + pos]->controler)
mainGame->stCardPos[i]->setBackgroundColor(0xff5a5a5a);
else
mainGame->stCardPos[i]->setBackgroundColor(0xff56649f);
}
}
break;
}
if(is_dragging_CardDisplay) {
if(!mainGame->scrDisplayList->isVisible()) {
is_dragging_CardDisplay = false;
break;
}
int dpos = dragging_tab_start_pos + ((dragging_tab_start_x - event.MouseInput.X));
int max = mainGame->scrDisplayList->getMax();
if(dpos < 0) dpos = 0;
if(dpos > max) dpos = max;
mainGame->scrDisplayList->setPos(dpos);
int pos = mainGame->scrDisplayList->getPos() / 10;
for(int i = 0; i < 5; ++i) {
// draw display_cards[i + pos] in btnCardDisplay[i]
mainGame->stDisplayPos[i]->enableOverrideColor(false);
if(display_cards[i + pos]->code)
mainGame->btnCardDisplay[i]->setImage(imageManager.GetTexture(display_cards[i + pos]->code));
else
mainGame->btnCardDisplay[i]->setImage(imageManager.tCover[display_cards[i + pos]->controler]);
mainGame->btnCardDisplay[i]->setRelativePosition(rect<s32>((30 + i * 125) * mainGame->xScale, 55 * mainGame->yScale, (30 + 120 + i * 125) * mainGame->xScale, 225 * mainGame->yScale));
wchar_t formatBuffer[2048];
if(display_cards[i + pos]->location == LOCATION_OVERLAY) {
myswprintf(formatBuffer, L"%ls[%d](%d)",
dataManager.FormatLocation(display_cards[i + pos]->overlayTarget->location, display_cards[i + pos]->overlayTarget->sequence),
display_cards[i + pos]->overlayTarget->sequence + 1, display_cards[i + pos]->sequence + 1);
} else
myswprintf(formatBuffer, L"%ls[%d]", dataManager.FormatLocation(display_cards[i + pos]->location, display_cards[i + pos]->sequence),
display_cards[i + pos]->sequence + 1);
mainGame->stDisplayPos[i]->setText(formatBuffer);
if(display_cards[i + pos]->location == LOCATION_OVERLAY) {
if(display_cards[i + pos]->owner != display_cards[i + pos]->overlayTarget->controler)
mainGame->stDisplayPos[i]->setOverrideColor(0xff0000ff);
// BackgroundColor: controller of the xyz monster
if(display_cards[i + pos]->overlayTarget->controler)
mainGame->stDisplayPos[i]->setBackgroundColor(0xff5a5a5a);
else
mainGame->stDisplayPos[i]->setBackgroundColor(0xff56649f);
} else if(display_cards[i + pos]->location == LOCATION_EXTRA || display_cards[i + pos]->location == LOCATION_REMOVED) {
if(display_cards[i + pos]->position & POS_FACEDOWN)
mainGame->stDisplayPos[i]->setOverrideColor(0xff0000ff);
if(display_cards[i + pos]->controler)
mainGame->stDisplayPos[i]->setBackgroundColor(0xff5a5a5a);
else
mainGame->stDisplayPos[i]->setBackgroundColor(0xff56649f);
} else {
if(display_cards[i + pos]->controler)
mainGame->stDisplayPos[i]->setBackgroundColor(0xff5a5a5a);
else
mainGame->stDisplayPos[i]->setBackgroundColor(0xff56649f);
}
}
break;
}
}
default: break;
}
......
......@@ -893,7 +893,7 @@ bool Game::Initialize() {
chkBotHand = env->addCheckBox(false, rect<s32>(360 * xScale, 140 * yScale, 560 * xScale, 170 * yScale), tabBot, -1, dataManager.GetSysString(1384));
chkBotNoCheckDeck = env->addCheckBox(false, rect<s32>(360 * xScale, 180 * yScale, 560 * xScale, 210 * yScale), tabBot, -1, dataManager.GetSysString(1229));
chkBotNoShuffleDeck = env->addCheckBox(false, rect<s32>(360 * xScale, 220 * yScale, 560 * xScale, 250 * yScale), tabBot, -1, dataManager.GetSysString(1230));
} else { // avoid null pointer
} else { // avoid null object reference
btnStartBot = env->addButton(rect<s32>(0, 0, 0, 0), wSinglePlay);
btnBotCancel = env->addButton(rect<s32>(0, 0, 0, 0), wSinglePlay);
btnStartBot->setVisible(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