Commit 56c43452 authored by nanahira's avatar nanahira

Merge branch 'master' into server

parents a69d6121 6b30e430
Pipeline #40737 passed with stages
in 13 minutes and 46 seconds
......@@ -1932,28 +1932,36 @@ bool DeckBuilder::check_limit(code_pointer pointer) {
auto flit = filterList->content.find(limitcode);
if(flit != filterList->content.end())
limit = flit->second;
auto remaining_credits = filterList->credit_limits;
auto limitcode_credit_it = filterList->credits.find(limitcode);
std::unordered_map<std::wstring, uint32_t> credit_used;
auto spend_credit = [&](uint32_t code) {
auto code_credit_it = filterList->credits.find(code);
if(code_credit_it == filterList->credits.end())
return true;
auto code_credit = code_credit_it->second;
auto valid = true;
for(auto& credit_it : code_credit) {
auto key = credit_it.first;
auto credit_limit_it = filterList->credit_limits.find(key);
if(credit_limit_it == filterList->credit_limits.end())
continue;
auto credit_limit = credit_limit_it->second;
if(credit_used.find(key) == credit_used.end())
credit_used[key] = 0;
auto credit_after = credit_used[key] + credit_it.second;
if(credit_after > credit_limit)
valid = false;
credit_used[key] = credit_after;
}
return valid;
};
auto handle_card = [&](ygo::code_pointer& card) {
if (card->first == limitcode || card->second.alias == limitcode) {
limit--;
if(limit <= 0)
return false;
if(limitcode_credit_it != filterList->credits.end()) {
auto limitcode_credits = limitcode_credit_it->second;
for(auto& credit : limitcode_credits) {
auto key = credit.first;
auto remaining_credit_it = remaining_credits.find(key);
if(remaining_credit_it != remaining_credits.end()) {
auto value = credit.second;
auto remaining_credit = remaining_credit_it->second;
if(remaining_credit < value)
return false;
remaining_credits[key] -= value;
}
}
}
}
auto code = card->second.alias ? card->second.alias : card->first;
spend_credit(code);
return true;
};
for (auto& card : deckManager.current_deck.main) {
......@@ -1968,6 +1976,6 @@ bool DeckBuilder::check_limit(code_pointer pointer) {
if(!handle_card(card))
return false;
}
return true;
return spend_credit(limitcode);
}
}
......@@ -1218,18 +1218,42 @@ void Game::DrawThumb(code_pointer cp, irr::core::vector2di pos, const LFList* lf
otloc = irr::core::recti(pos.X + 7, pos.Y + 50 * mainGame->yScale, pos.X + 37 * mainGame->xScale, pos.Y + 65 * mainGame->yScale);
}
driver->draw2DImage(img, dragloc, irr::core::rect<irr::s32>(0, 0, size.Width, size.Height));
auto current_limitloc = limitloc;
auto credit_max_display = CARD_THUMB_WIDTH / 20;
auto next_limitloc = [&]() {
auto this_limitloc = current_limitloc;
auto width = current_limitloc.getWidth();
current_limitloc.UpperLeftCorner.X += width;
current_limitloc.LowerRightCorner.X += width;
--credit_max_display;
return this_limitloc;
};
auto lfit = lflist->content.find(lcode);
if (lfit != lflist->content.end()) {
switch(lfit->second) {
case 0:
driver->draw2DImage(imageManager.tLim, limitloc, irr::core::recti(0, 0, 64, 64), 0, 0, true);
break;
case 1:
driver->draw2DImage(imageManager.tLim, limitloc, irr::core::recti(64, 0, 128, 64), 0, 0, true);
break;
case 2:
driver->draw2DImage(imageManager.tLim, limitloc, irr::core::recti(0, 64, 64, 128), 0, 0, true);
break;
if (lfit != lflist->content.end() && lfit->second >= 0 && lfit->second <= 2) {
auto lim_texture_offset_x = 0;
auto lim_texture_offset_y = 0;
if(lfit->second == 1) {
lim_texture_offset_x = 64;
} else if(lfit->second == 2) {
lim_texture_offset_y = 64;
}
driver->draw2DImage(imageManager.tLim, next_limitloc(), irr::core::recti(lim_texture_offset_x, lim_texture_offset_y, lim_texture_offset_x + 64, lim_texture_offset_y + 64), 0, 0, true);
}
auto lfcredit = lflist->credits.find(lcode);
if(lfcredit != lflist->credits.end()) {
for(auto& credit_entry : lfcredit->second) {
if(credit_max_display <= 0)
break;
auto value = credit_entry.second;
if(value > 0 && value <= 100) {
auto cvalue = value - 1; // 1-100 => 0-99
// pick the first and second digit
auto digit1 = cvalue / 10;
auto digit2 = cvalue % 10;
auto credit_texture_offset_x = digit2 * 64;
auto credit_texture_offset_y = digit1 * 64;
driver->draw2DImage(imageManager.tLimCredit, next_limitloc(), irr::core::recti(credit_texture_offset_x, credit_texture_offset_y, credit_texture_offset_x + 64, credit_texture_offset_y + 64), 0, 0, true);
}
}
}
bool showAvail = false;
......
......@@ -45,6 +45,7 @@ bool ImageManager::Initial() {
tTarget = driver->getTexture("textures/target.png");
tChainTarget = driver->getTexture("textures/chaintarget.png");
tLim = driver->getTexture("textures/lim.png");
tLimCredit = driver->getTexture("textures/lim_credit.png");
tOT = driver->getTexture("textures/ot.png");
tHand[0] = driver->getTexture("textures/f1.jpg");
tHand[1] = driver->getTexture("textures/f2.jpg");
......
......@@ -57,6 +57,7 @@ public:
irr::video::ITexture* tTarget;
irr::video::ITexture* tChainTarget;
irr::video::ITexture* tLim;
irr::video::ITexture* tLimCredit;
irr::video::ITexture* tOT;
irr::video::ITexture* tHand[3];
irr::video::ITexture* tBackGround;
......
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