diff --git a/projects/mtg/include/CardGui.h b/projects/mtg/include/CardGui.h index 1ad7d18f1..1957a5505 100644 --- a/projects/mtg/include/CardGui.h +++ b/projects/mtg/include/CardGui.h @@ -33,7 +33,7 @@ protected: /* ** Tries to render the Big version of a card picture, backups to text version in case of failure */ - static void RenderBig(MTGCard * card, const Pos& pos); + static void RenderBig(MTGCard * card, const Pos& pos, bool thumb = false); static void RenderCountersBig(MTGCard * card, const Pos& pos, int drawMode = DrawMode::kNormal); static void AlternateRender(MTGCard * card, const Pos& pos); @@ -55,8 +55,8 @@ public: virtual void Render(); virtual void Update(float dt); - void DrawCard(const Pos& inPosition, int inMode = DrawMode::kNormal); - static void DrawCard(MTGCard* inCard, const Pos& inPosition, int inMode = DrawMode::kNormal); + void DrawCard(const Pos& inPosition, int inMode = DrawMode::kNormal, bool thumb = false); + static void DrawCard(MTGCard* inCard, const Pos& inPosition, int inMode = DrawMode::kNormal, bool thumb = false); static JQuadPtr AlternateThumbQuad(MTGCard * card); virtual ostream& toString(ostream&) const; diff --git a/projects/mtg/include/DeckView.h b/projects/mtg/include/DeckView.h index c17d67657..7e3bdeaae 100644 --- a/projects/mtg/include/DeckView.h +++ b/projects/mtg/include/DeckView.h @@ -57,7 +57,7 @@ protected: DeckDataWrapper *mCurrentDeck; CardRep& getCardRep(unsigned int index); - void renderCard(int index, int alpha); + void renderCard(int index, int alpha, bool asThumbnail = false); int getCardIndexNextTo(int x, int y); vector mCards; diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index 490e35488..859a6d936 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -111,17 +111,17 @@ void CardGui::Update(float dt) PlayGuiObject::Update(dt); } -void CardGui::DrawCard(const Pos& inPosition, int inMode) +void CardGui::DrawCard(const Pos& inPosition, int inMode, bool thumb) { - DrawCard(card, inPosition, inMode); + DrawCard(card, inPosition, inMode, thumb); } -void CardGui::DrawCard(MTGCard* inCard, const Pos& inPosition, int inMode) +void CardGui::DrawCard(MTGCard* inCard, const Pos& inPosition, int inMode, bool thumb) { switch (inMode) { case DrawMode::kNormal: - RenderBig(inCard, inPosition); + RenderBig(inCard, inPosition, thumb); break; case DrawMode::kText: AlternateRender(inCard, inPosition); @@ -958,7 +958,7 @@ void CardGui::TinyCropRender(MTGCard * card, const Pos& pos, JQuad * quad) } //Renders a big card on screen. Defaults to the "alternate" rendering if no image is found -void CardGui::RenderBig(MTGCard* card, const Pos& pos) +void CardGui::RenderBig(MTGCard* card, const Pos& pos, bool thumb) { JRenderer * renderer = JRenderer::GetInstance(); //GameObserver * game = GameObserver::GetInstance(); @@ -967,7 +967,8 @@ void CardGui::RenderBig(MTGCard* card, const Pos& pos) //i want this but ai targets cards so quickly that it can crash the game. float x = pos.actX; - JQuadPtr quad = WResourceManager::Instance()->RetrieveCard(card); + JQuadPtr quad = thumb ? WResourceManager::Instance()->RetrieveCard(card, RETRIEVE_THUMB) + : WResourceManager::Instance()->RetrieveCard(card); MTGCardInstance * kcard = dynamic_cast(card); if(kcard && !kcard->isToken && kcard->name != kcard->model->data->name) { diff --git a/projects/mtg/src/DeckView.cpp b/projects/mtg/src/DeckView.cpp index c3b989417..125b00429 100644 --- a/projects/mtg/src/DeckView.cpp +++ b/projects/mtg/src/DeckView.cpp @@ -94,9 +94,12 @@ int DeckView::filter() void DeckView::reloadIndexes() //fixme: feels ugly. check if we can remove this { - for (unsigned int i = 0; i < mCards.size(); i++) + if(deck() != NULL) { - mCards[i].card = deck()->getCard(i); + for (unsigned int i = 0; i < mCards.size(); i++) + { + mCards[i].card = deck()->getCard(i); + } } } @@ -105,7 +108,7 @@ DeckView::CardRep& DeckView::getCardRep(unsigned int index) return mCards[index]; } -void DeckView::renderCard(int index, int alpha) +void DeckView::renderCard(int index, int alpha, bool asThumbnail) { WFont * mFont = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT); @@ -146,13 +149,13 @@ void DeckView::renderCard(int index, int alpha) else { Pos pos = Pos(cardPosition.x, cardPosition.y, cardPosition.scale * 285 / 250, 0.0, 255); - CardGui::DrawCard(cardPosition.card, pos); + CardGui::DrawCard(cardPosition.card, pos, asThumbnail); } } else { Pos pos = Pos(cardPosition.x, cardPosition.y, cardPosition.scale * 285 / 250, 0.0, 255); - CardGui::DrawCard(cardPosition.card, pos, DrawMode::kText); + CardGui::DrawCard(cardPosition.card, pos, DrawMode::kText, asThumbnail); } } else @@ -160,7 +163,7 @@ void DeckView::renderCard(int index, int alpha) int mode = !options[Options::DISABLECARDS].number ? DrawMode::kNormal : DrawMode::kText; Pos pos = Pos(cardPosition.x, cardPosition.y, cardPosition.scale * 285 / 250, 0.0, 255); - CardGui::DrawCard(cardPosition.card, pos, mode); + CardGui::DrawCard(cardPosition.card, pos, mode, asThumbnail); } int quadAlpha = alpha; diff --git a/projects/mtg/src/GridDeckView.cpp b/projects/mtg/src/GridDeckView.cpp index 4d4e1e054..a7e19e14c 100644 --- a/projects/mtg/src/GridDeckView.cpp +++ b/projects/mtg/src/GridDeckView.cpp @@ -108,22 +108,43 @@ void GridDeckView::UpdateCardPosition(CardRep &rep, int index) void GridDeckView::Render() { - for(int i = 0; i < int(mCards.size()); ++i) + int firstVisibleCard = 2; + int lastVisibleCard = mCards.size() - 2; + + if(!mScrollOffset.finished()) { - if (WResourceManager::Instance()->IsThreaded()) - { - WResourceManager::Instance()->RetrieveCard(getCardRep(i).card); + if(mScrollOffset.delta_value < 0){ + firstVisibleCard = 0; } + else + { + lastVisibleCard = mCards.size(); + } + } + + for(int i = firstVisibleCard; i < lastVisibleCard; ++i) + { if(mCurrentSelection != i) { - renderCard(i, 255); + if (WResourceManager::Instance()->IsThreaded()) + { + WResourceManager::Instance()->RetrieveCard(getCardRep(i).card, RETRIEVE_THUMB); + } + renderCard(i, 255, true); + } + else + { + if (WResourceManager::Instance()->IsThreaded()) + { + WResourceManager::Instance()->RetrieveCard(getCardRep(i).card); + } } } if(2 <= mCurrentSelection && mCurrentSelection < 12) { - renderCard(mCurrentSelection, 255); + renderCard(mCurrentSelection, 255, false); } }