diff --git a/projects/mtg/include/ActionStack.h b/projects/mtg/include/ActionStack.h index a7e57766a..6366b530f 100644 --- a/projects/mtg/include/ActionStack.h +++ b/projects/mtg/include/ActionStack.h @@ -58,6 +58,7 @@ class Interruptible: public PlayGuiObject, public Targetable{ int typeAsTarget(){return TARGET_STACKACTION;}; Interruptible(bool hasFocus = false):PlayGuiObject(40,x,y,hasFocus){state=NOT_RESOLVED;display=0;source=NULL;}; virtual const string getDisplayName() const {return "stack object";}; + void Render(MTGCardInstance * source, JQuad * targetQuad, string alt1, string alt2, string action, bool bigQuad = false); #if defined (WIN32) || defined (LINUX) virtual void Dump(); #endif diff --git a/projects/mtg/include/CardGui.h b/projects/mtg/include/CardGui.h index ba3f16b78..e2a82fbbf 100644 --- a/projects/mtg/include/CardGui.h +++ b/projects/mtg/include/CardGui.h @@ -27,6 +27,7 @@ struct CardGui : public PlayGuiObject { CardGui(MTGCardInstance* card, const Pos& ref); virtual void Render(); void RenderBig(const Pos&); //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); void alternateRenderBig(const Pos&); //Renders Text Version of a card virtual void Update(float dt); static void alternateRender(MTGCard * card, const Pos& pos); diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index ddffb0f22..32c569274 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -128,6 +128,8 @@ class MTGCardInstance: public MTGCard, public Damageable { void resetAllDamage(); JSample * getSample(); + JQuad * getIcon(); + ostream& toString(ostream&) const; static MTGCardInstance AnyCard; diff --git a/projects/mtg/src/ActionStack.cpp b/projects/mtg/src/ActionStack.cpp index 5998af275..c33784534 100644 --- a/projects/mtg/src/ActionStack.cpp +++ b/projects/mtg/src/ActionStack.cpp @@ -50,26 +50,58 @@ ostream& NextGamePhase::toString(ostream& out) const return out; } +void Interruptible::Render(MTGCardInstance * source, JQuad * targetQuad, string alt1, string alt2, string action, bool bigQuad){ + JLBFont * mFont = resources.GetJLBFont(Constants::MAIN_FONT); + mFont->SetBase(0); + mFont->SetScale(DEFAULT_MAIN_FONT_SCALE); + mFont->DrawString(_(action).c_str(), x + 30 , y, JGETEXT_LEFT); + JRenderer * renderer = JRenderer::GetInstance(); + JQuad * quad = resources.RetrieveCard(source,CACHE_THUMB); + if (quad){ + quad->SetColor(ARGB(255,255,255,255)); + float scale = mHeight / quad->mHeight; + renderer->RenderQuad(quad, x+10*scale , y+15*scale , 0,scale,scale); + }else if (alt1.size()){ + mFont->DrawString(_(alt1).c_str(),x,y-15); + } + + if (bigQuad){ + GameObserver * game = GameObserver::GetInstance(); + int showMode = game->mLayers->cs->bigMode; + Pos pos = Pos(CardGui::BigWidth / 2, CardGui::BigHeight / 2 - 10, 1.0, 0.0, 220); + switch(showMode){ + case BIG_MODE_SHOW: + CardGui::RenderBig(source,pos); + break; + case BIG_MODE_TEXT: + CardGui::alternateRender(source, pos); + break; + default: + break; + } + } + + if (targetQuad){ + float backupX = targetQuad->mHotSpotX; + float backupY = targetQuad->mHotSpotY; + targetQuad->SetColor(ARGB(255,255,255,255)); + targetQuad->SetHotSpot(targetQuad->mWidth / 2, targetQuad->mHeight / 2); + float scale = mHeight / targetQuad->mHeight; + renderer->RenderQuad(targetQuad, x + 150 , y+15*scale , 0,scale,scale); + targetQuad->SetHotSpot(backupX, backupY); + }else if (alt2.size()){ + mFont->DrawString(_(alt2).c_str(),x+120,y); + } +} + /* Ability */ int StackAbility::resolve(){ return (ability->resolve()); } void StackAbility::Render(){ - JLBFont * mFont = resources.GetJLBFont(Constants::MAIN_FONT); - mFont->SetBase(0); - mFont->SetScale(DEFAULT_MAIN_FONT_SCALE); - char buffer[200]; - sprintf(buffer, "%s", _(ability->getMenuText()).c_str()); - mFont->DrawString(buffer, x + 30 , y, JGETEXT_LEFT); - JRenderer * renderer = JRenderer::GetInstance(); - JQuad * quad = resources.RetrieveCard(ability->source,CACHE_THUMB); - if (quad){ - quad->SetColor(ARGB(255,255,255,255)); - float scale = 30 / quad->mHeight; - renderer->RenderQuad(quad, x , y , 0,scale,scale); - }else{ - mFont->DrawString(_(ability->source->getName()).c_str(),x,y-15); - } + string action = ability->getMenuText(); + MTGCardInstance * source = ability->source; + string alt1 = source->getName(); Targetable * _target = ability->target; if (ability->tc){ @@ -80,17 +112,17 @@ void StackAbility::Render(){ if (_target!= ability->source && (_target->typeAsTarget() == TARGET_CARD || _target->typeAsTarget() == TARGET_PLAYER)){ target = (Damageable *) _target; } + + JQuad * quad = NULL; + string alt2 = ""; if (target){ quad = target->getIcon(); - if (quad){ - quad->SetColor(ARGB(255,255,255,255)); - float scale = 30 / quad->mHeight; - renderer->RenderQuad(quad, x + 150 , y , 0,scale,scale); - }else{ - if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) - mFont->DrawString(_(((MTGCardInstance *)target)->name).c_str(),x+120,y); + if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) { + alt2 = ((MTGCardInstance *)target)->name; } } + + Interruptible::Render(source,quad,alt1,alt2,action); } StackAbility::StackAbility(int id,MTGAbility * _ability): Interruptible(id),ability(_ability){ type=ACTION_ABILITY; @@ -202,63 +234,19 @@ MTGCardInstance * Spell::getNextCardTarget(MTGCardInstance * previous){ } void Spell::Render(){ - JLBFont * mFont = resources.GetJLBFont(Constants::MAIN_FONT); - mFont->SetBase(0); - mFont->SetScale(DEFAULT_MAIN_FONT_SCALE); - mFont->DrawString(_(source->name).c_str(), x + 30 , y, JGETEXT_LEFT); - JRenderer * renderer = JRenderer::GetInstance(); - JQuad * quad = resources.RetrieveCard(source,CACHE_THUMB); - if (quad){ - quad->SetColor(ARGB(255,255,255,255)); - float scale = mHeight / quad->mHeight; - renderer->RenderQuad(quad, x+10*scale , y+15*scale , 0,scale,scale); - }else{ - // - } - // WALDORF - added these lines to render a big card as well as the small one - // in the interrupt window. A big card will be rendered no matter whether - // the user has been using big cards or not. However, I do take into which - // kind of big card they like. - // The card will be rendered in the same place as the GuiHand - // card. It doesn't attempt to hide the GUIHand card, it - // just overwrites it. - // I stole the render code from RenderBig() in CardGUI.cpp - - quad = resources.RetrieveCard(source); - if (quad){ - quad->SetColor(ARGB(220,255,255,255)); - float scale = 257.f / quad->mHeight; - renderer->RenderQuad(quad, 10+100*scale , 20+145*scale , 0.0f,scale,scale); - } - else - { - MTGCard * mtgcard = source->model; - Pos pos = Pos(10 + 90, 20 + 130, 0.9f, 0.0, 255); - CardGui::alternateRender(mtgcard, pos); - - quad = resources.RetrieveCard(source,CACHE_THUMB); - if (quad){ - float scale = 250 / quad->mHeight; - quad->SetColor(ARGB(40,255,255,255)); - renderer->RenderQuad(quad, 20+15*scale, 20+20*scale, 0.0f, scale, scale); - } - } - - // WALDORF - end - + string action = source->getName(); + string alt1 = ""; + JQuad * quad = NULL; + string alt2 = ""; Damageable * target = getNextDamageableTarget(); if (target){ quad = target->getIcon(); - if (quad){ - quad->SetColor(ARGB(255,255,255,255)); - float scale = 30 / quad->mHeight; - renderer->RenderQuad(quad, x + 150 , y , 0,scale,scale); - }else{ - if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) - mFont->DrawString(_(((MTGCardInstance *)target)->name).c_str(),x+120,y); + if (target->type_as_damageable == DAMAGEABLE_MTGCARDINSTANCE) { + alt2 = ((MTGCardInstance *)target)->name; } } + Interruptible::Render(source,quad,alt1,alt2,action, true); } ostream& Spell::toString(ostream& out) const diff --git a/projects/mtg/src/CardGui.cpp b/projects/mtg/src/CardGui.cpp index 8284da771..038036b1b 100644 --- a/projects/mtg/src/CardGui.cpp +++ b/projects/mtg/src/CardGui.cpp @@ -303,7 +303,7 @@ void CardGui::alternateRenderBig(const Pos& pos){ alternateRender(card,pos); } -void CardGui::RenderBig(const Pos& pos){ +void CardGui::RenderBig(MTGCard* card, const Pos& pos){ JRenderer * renderer = JRenderer::GetInstance(); JQuad * quad = resources.RetrieveCard(card); @@ -327,6 +327,10 @@ void CardGui::RenderBig(const Pos& pos){ alternateRender(card,pos); } +void CardGui::RenderBig(const Pos& pos){ + RenderBig(card,pos); +} + MTGCardInstance* CardView::getCard() { return card; } diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index a77a7ce5a..33ab622ec 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -372,6 +372,10 @@ int MTGCardInstance::canBlock(MTGCardInstance * opponent){ return 1; } +JQuad * MTGCardInstance::getIcon(){ + return resources.RetrieveCard(this,CACHE_THUMB); +} + MTGCardInstance * MTGCardInstance::getNextPartner(){ MTGInPlay * inplay = controller()->game->inPlay; MTGCardInstance * bandingPartner = inplay->getNextAttacker(banding);