From dae1b10de187abd65b97e4b5acce9ab9a225fd25 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 5 Aug 2016 21:52:46 +0800 Subject: [PATCH] Copied Token Image If the image is not found, try finding the token counterpart by Id --- projects/mtg/include/WResourceManager.h | 1 + projects/mtg/include/WResourceManagerImpl.h | 1 + projects/mtg/src/CardGui.cpp | 11 ++++++ projects/mtg/src/MTGCardInstance.cpp | 14 ++++++++ projects/mtg/src/WResourceManager.cpp | 40 +++++++++++++++++++++ 5 files changed, 67 insertions(+) diff --git a/projects/mtg/include/WResourceManager.h b/projects/mtg/include/WResourceManager.h index 4abe05ed9..d7f44c2a0 100644 --- a/projects/mtg/include/WResourceManager.h +++ b/projects/mtg/include/WResourceManager.h @@ -80,6 +80,7 @@ public: } }; virtual JQuadPtr RetrieveCard(MTGCard * card, int style = RETRIEVE_NORMAL,int submode = CACHE_NORMAL) = 0; + virtual JQuadPtr RetrieveCardToken(MTGCard * card, int style = RETRIEVE_NORMAL,int submode = CACHE_NORMAL, int tId = 0) = 0; virtual JSample * RetrieveSample(const string& filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL) = 0; virtual JTexture * RetrieveTexture(const string& filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL) = 0; virtual JQuadPtr RetrieveQuad(const string& filename, float offX=0.0f, float offY=0.0f, float width=0.0f, float height=0.0f, string resname="", int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL, int id = 0) = 0; diff --git a/projects/mtg/include/WResourceManagerImpl.h b/projects/mtg/include/WResourceManagerImpl.h index d759f943f..05b18617c 100644 --- a/projects/mtg/include/WResourceManagerImpl.h +++ b/projects/mtg/include/WResourceManagerImpl.h @@ -141,6 +141,7 @@ public: bool IsThreaded(); JQuadPtr RetrieveCard(MTGCard * card, int style = RETRIEVE_NORMAL,int submode = CACHE_NORMAL); + JQuadPtr RetrieveCardToken(MTGCard * card, int style = RETRIEVE_NORMAL,int submode = CACHE_NORMAL, int tId = 0); JSample * RetrieveSample(const string& filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); JTexture * RetrieveTexture(const string& filename, int style = RETRIEVE_NORMAL, int submode = CACHE_NORMAL); JQuadPtr RetrieveQuad(const string& filename, float offX=0.0f, float offY=0.0f, float width=0.0f, float height=0.0f, string resname="", int style = RETRIEVE_LOCK, int submode = CACHE_NORMAL, int id = 0); diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index 145884c06..dd4db8ff7 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -148,6 +148,11 @@ void CardGui::Render() MTGCard * fcard = MTGCollection()->getCardByName(card->name); quad = game->getResourceManager()->RetrieveCard(fcard, CACHE_THUMB); } + if (card->hasCopiedToken && !quad.get()) + { + MTGCard * tcard = MTGCollection()->getCardById(abs(card->copiedID)); + quad = game->getResourceManager()->RetrieveCardToken(tcard, CACHE_THUMB, 1, abs(card->copiedID)); + } if (quad.get()) alternate = false; else @@ -1148,6 +1153,12 @@ void CardGui::RenderBig(MTGCard* card, const Pos& pos, bool thumb, bool noborder MTGCard * fcard = MTGCollection()->getCardByName(kcard->name); quad = WResourceManager::Instance()->RetrieveCard(fcard); } + if (kcard->hasCopiedToken && !quad.get()) + { + MTGCard * tcard = MTGCollection()->getCardById(abs(kcard->copiedID)); + quad = thumb ? WResourceManager::Instance()->RetrieveCardToken(tcard, RETRIEVE_THUMB, 1, abs(kcard->copiedID)) + : WResourceManager::Instance()->RetrieveCardToken(tcard, RETRIEVE_NORMAL, 1, abs(kcard->copiedID)); + } if (quad.get()) { if (quad->mHeight < quad->mWidth) diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index fdb37698d..62bc67ea7 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -149,6 +149,20 @@ void MTGCardInstance::copy(MTGCardInstance * card) backupTargets = this->backupTargets; storedCard = oldStored; miracle = false; + if (card->TokenAndAbility) + { + MTGAbility * andAbilityClone = card->TokenAndAbility->clone(); + andAbilityClone->target = this; + if(card->TokenAndAbility->oneShot) + { + andAbilityClone->resolve(); + SAFE_DELETE(andAbilityClone); + } + else + { + andAbilityClone->addToGame(); + } + } } MTGCardInstance::~MTGCardInstance() diff --git a/projects/mtg/src/WResourceManager.cpp b/projects/mtg/src/WResourceManager.cpp index 46c51df68..3557e0dec 100644 --- a/projects/mtg/src/WResourceManager.cpp +++ b/projects/mtg/src/WResourceManager.cpp @@ -263,6 +263,46 @@ JQuadPtr ResourceManagerImpl::RetrieveCard(MTGCard * card, int style, int submod return JQuadPtr(); } +JQuadPtr ResourceManagerImpl::RetrieveCardToken(MTGCard * card, int style, int submode, int tId) +{ + //Cards are never, ever resource managed, so just check cache. + if (!card || options[Options::DISABLECARDS].number) return JQuadPtr(); + + submode = submode | TEXTURE_SUB_CARD; + + //static std::ostringstream filename; + //filename.str(""); + string filename; + filename.reserve(4096); + //filename << setlist[card->setId] << "/" << card->getImageName(); + filename.append(setlist[card->setId]); + filename.append("/"); + int id = -card->getMTGId(); + if(tId) + id = -tId; + ostringstream imagename; + imagename << "-" << id << "t.jpg"; + filename.append(imagename.str()); + + //Aliases. + if (style == RETRIEVE_THUMB) + { + submode = submode | TEXTURE_SUB_THUMB; + style = RETRIEVE_NORMAL; + } + + JQuadPtr jq = RetrieveQuad(filename, 0, 0, 0, 0, "", style, submode | TEXTURE_SUB_5551, id); + + lastError = textureWCache.mError; + if (jq) + { + jq->SetHotSpot(static_cast (jq->mTex->mWidth / 2), static_cast (jq->mTex->mHeight / 2)); + return jq; + } + + return JQuadPtr(); +} + int ResourceManagerImpl::AddQuadToManaged(const WManagedQuad& inQuad) { int id = mIDLookupMap.size();