void InteractiveButton::Render() { if (!isSelectionValid()) return; JRenderer *renderer = JRenderer::GetInstance(); WFont *mainFont = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT); const string detailedInfoString = _(getText()); float stringWidth = mainFont->GetStringWidth(detailedInfoString.c_str()); float pspIconsSize = 0.5; float mainFontHeight = mainFont->GetHeight(); float boxStartX = getX() - 5; mXOffset = 0; mYOffset = 0; #ifndef TOUCH_ENABLED renderer->FillRoundRect(boxStartX, getY(), stringWidth - 3, mainFontHeight - 9, 5, ARGB(0, 0, 0, 0)); #else renderer->FillRoundRect(boxStartX, getY(), stringWidth - 3, mainFontHeight - 5, 5, ARGB(255, 192, 172, 119)); renderer->DrawRoundRect(boxStartX, getY(), stringWidth - 3, mainFontHeight - 5, 5, ARGB(255, 255, 255, 255)); mYOffset += 2; #endif float buttonXOffset = getX() - mXOffset; float buttonYOffset = getY() + mYOffset; if (buttonImage != NULL) { renderer->RenderQuad(buttonImage.get(), buttonXOffset - buttonImage.get()->mWidth/2, buttonYOffset + mainFontHeight/2, 0, pspIconsSize, pspIconsSize); } mainFont->SetColor(ARGB(255, 0, 0, 0)); mainFont->DrawString(detailedInfoString, buttonXOffset, buttonYOffset); }
void OptionKey::Render() { WFont * mFont = WResourceManager::Instance()->GetWFont(Fonts::OPTION_FONT); mFont->SetColor(getColor(WGuiColor::TEXT)); JRenderer * renderer = JRenderer::GetInstance(); if (LOCAL_KEY_NONE == from) { string msg = _("New binding..."); mFont->DrawString(msg, (SCREEN_WIDTH - mFont->GetStringWidth(msg.c_str())) / 2, y + 2); } else { const KeyRep& rep = translateKey(from); if (rep.second) renderer->RenderQuad(rep.second, x + 4, y + 3, 0, 16.0f / rep.second->mHeight, 16.0f / rep.second->mHeight); else mFont->DrawString(rep.first, x + 4, y + 3, JGETEXT_LEFT); const KeyRep& rep2 = translateKey(to); if (rep2.second) { float ratio = 16.0f / rep2.second->mHeight; renderer->RenderQuad(rep2.second, x + width - (ratio * rep2.second->mWidth) - 2, y + 3, 0, ratio, ratio); } else mFont->DrawString(rep2.first, width - 4, y + 3, JGETEXT_RIGHT); } }
float SimpleButton::GetWidth() { WFont * mFont = WResourceManager::Instance()->GetWFont(mFontId); float backup = mFont->GetScale(); mFont->SetScale(1.0); float result = mFont->GetStringWidth(mText.c_str()); mFont->SetScale(backup); return result; }
float SimpleButton::GetEnlargedWidth() { WFont * mFont = WResourceManager::Instance()->GetWFont(mFontId); float backup = mFont->GetScale(); mFont->SetScale(SCALE_SELECTED); if(mText.size() < 20) mFont->SetScale(SCALE_SELECTED_LARGE); float result = mFont->GetStringWidth(mText.c_str()); mFont->SetScale(backup); return result; }
void OptionKey::Overlay() { JRenderer * renderer = JRenderer::GetInstance(); WFont * mFont = WResourceManager::Instance()->GetWFont(Fonts::OPTION_FONT); mFont->SetColor(ARGB(255, 0, 0, 0)); if (grabbed) { static const float x = 30, y = 45; renderer->FillRoundRect(x, y, SCREEN_WIDTH - 2 * x, 50, 2, ARGB(200, 200, 200, 255)); string msg = _("Press a key to associate."); mFont->DrawString(msg, (SCREEN_WIDTH - mFont->GetStringWidth(msg.c_str())) / 2, y + 20); } else if (btnMenu) btnMenu->Render(); }
void ActionStack::Render() { //This is a hack to avoid rendering the stack above the tuto messages //Ideally, the tuto messages should be moved to a layer above this one if (getCurrentTutorial()) return; static const float kSpacer = 8; static const float x0 = 250; static const float y0 = 0; float width = 200; float height = 25; float currenty = y0 + 5; if (mode == ACTIONSTACK_STANDARD) { if (!askIfWishesToInterrupt || !askIfWishesToInterrupt->displayStack()) return; /*observer->mExtraPayment = NULL*/;//end any payment request from extra cost as we open the stack to display items. if(observer->mExtraPayment) { observer->mExtraPayment->action->CheckUserInput(JGE_BTN_SEC); observer->mExtraPayment = NULL; } for (size_t i = 0; i < mObjects.size(); i++) { Interruptible * current = (Interruptible *) mObjects[i]; if (current->state == NOT_RESOLVED) height += current->mHeight; } WFont * mFont = observer->getResourceManager()->GetWFont(Fonts::MAIN_FONT); mFont->SetBase(0); mFont->SetScale(DEFAULT_MAIN_FONT_SCALE); mFont->SetColor(ARGB(255,255,255,255)); JRenderer * renderer = JRenderer::GetInstance(); //stack shadow //renderer->FillRoundRect(x0 - 7, y0+2, width + 17, height + 2, 9.0f, ARGB(128,0,0,0)); //stack fill renderer->FillRect(x0 - 7, y0+2, width + 17, height + 14, ARGB(225,5,5,5)); //stack highlight renderer->FillRect(x0 - 6, y0+3, width + 15, 30, ARGB(255,89,89,89)); //another border renderer->DrawRect(x0 - 6, y0+33, width + 15, height - 18, ARGB(255,89,89,89)); //stack border renderer->DrawRect(x0 - 7, y0+2, width + 17, height + 14, ARGB(255,240,240,240)); std::ostringstream stream; // WALDORF - changed "interrupt ?" to "Interrupt?". Don't display count down // seconds if the user disables auto progressing interrupts by setting the seconds // value to zero in Options. // Mootpoint 01/12/2011: draw the interrupt text first, at the top. Offset the rest of the // unresolved stack effects down so that they don't collide with the interrupt text. if (options[Options::INTERRUPT_SECONDS].number == 0) stream << _(kInterruptMessageString); else stream << _(kInterruptMessageString) << " " << static_cast<int>(timer); mFont->DrawString(stream.str(), x0 + 5, currenty - 2); // static const float kIconVerticalOffset = 24; static const float kIconHorizontalOffset = 10; static const float kBeforeIconSpace = 12; //Render "interrupt?" text + possible actions { float currentx = x0 + 10; interruptBtnXOffset = static_cast<int>(currentx); if (gModRules.game.canInterrupt()) { renderer->RenderQuad(pspIcons[7].get(), currentx, kIconVerticalOffset - 2, 0, kGamepadIconSize, kGamepadIconSize); currentx+= kIconHorizontalOffset; mFont->DrawString(_(kInterruptString), currentx, kIconVerticalOffset - 8); currentx+= mFont->GetStringWidth(_(kInterruptString).c_str()) + kBeforeIconSpace; } noBtnXOffset = static_cast<int>(currentx); renderer->RenderQuad(pspIcons[4].get(), currentx, kIconVerticalOffset - 2, 0, kGamepadIconSize, kGamepadIconSize); currentx+= kIconHorizontalOffset; mFont->DrawString(_(kNoString), currentx, kIconVerticalOffset - 8); currentx+= mFont->GetStringWidth(_(kNoString).c_str()) + kBeforeIconSpace; noToAllBtnXOffset = static_cast<int>(currentx); if (mObjects.size() > 1) { renderer->RenderQuad(pspIcons[6].get(), currentx, kIconVerticalOffset - 2, 0, kGamepadIconSize, kGamepadIconSize); currentx+= kIconHorizontalOffset; mFont->DrawString(_(kNoToAllString), currentx, kIconVerticalOffset - 8); currentx+= mFont->GetStringWidth(_(kNoToAllString).c_str()) + kBeforeIconSpace; } interruptDialogWidth = static_cast<int>(currentx); } currenty += kIconVerticalOffset + kSpacer; for (size_t i = 0; i < mObjects.size(); i++) { Interruptible * current = (Interruptible *) mObjects[i]; if (current && current->state == NOT_RESOLVED) { current->x = x0; current->y = currenty; current->Render(); currenty += current->mHeight; } } } else if (mode == ACTIONSTACK_TARGET && modal) { for (size_t i = 0; i < mObjects.size(); i++) { Interruptible * current = (Interruptible *) mObjects[i]; if (current->display) height += current->mHeight; } WFont * mFont = observer->getResourceManager()->GetWFont(Fonts::MAIN_FONT); mFont->SetScale(DEFAULT_MAIN_FONT_SCALE); mFont->SetColor(ARGB(255,255,255,255)); JRenderer * renderer = JRenderer::GetInstance(); renderer->FillRect(x0, y0, width, height, ARGB(200,0,0,0)); renderer->DrawRect(x0 - 1, y0 - 1, width + 2, height + 2, ARGB(255,255,255,255)); for (size_t i = 0; i < mObjects.size(); i++) { Interruptible * current = (Interruptible *) mObjects[i]; if (mObjects[i] != NULL && current->display) { ((Interruptible *) mObjects[i])->x = x0 + 5; if (i != mObjects.size() - 1) { ((Interruptible *) mObjects[i])->y = currenty; currenty += ((Interruptible *) mObjects[i])->mHeight; } else { ((Interruptible *) mObjects[i])->y = currenty + 40; currenty += ((Interruptible *) mObjects[i])->mHeight + 40; } mObjects[i]->Render(); } } } }
void DeckView::renderCard(int index, int alpha, bool asThumbnail, bool addWHborder) { WFont * mFont = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT); const CardRep& cardPosition = mCards[index]; if (!cardPosition.card) return; if (!WResourceManager::Instance()->IsThreaded()) { JQuadPtr backQuad = WResourceManager::Instance()->GetQuad(kGenericCardID); JQuadPtr quad; int cacheError = CACHE_ERROR_NONE; if (!options[Options::DISABLECARDS].number) { quad = WResourceManager::Instance()->RetrieveCard(cardPosition.card, RETRIEVE_EXISTING); cacheError = WResourceManager::Instance()->RetrieveError(); if (!quad.get() && cacheError != CACHE_ERROR_404) { if (last_user_activity > (abs(2 - index) + 1) * no_user_activity_show_card_delay) quad = WResourceManager::Instance()->RetrieveCard(cardPosition.card); else { quad = backQuad; } } } if (quad.get()) { if (quad == backQuad) { quad->SetColor(ARGB(255,255,255,255)); float _scale = cardPosition.scale * (285 / quad->mHeight); JRenderer::GetInstance()->RenderQuad(quad.get(), cardPosition.x, cardPosition.y, 0.0f, _scale, _scale); } else { Pos pos = Pos(cardPosition.x, cardPosition.y, cardPosition.scale * 285 / 250, 0.0, 255); CardGui::DrawCard(cardPosition.card, pos, asThumbnail, true); } } else { Pos pos = Pos(cardPosition.x, cardPosition.y, cardPosition.scale * 285 / 250, 0.0, 255); CardGui::DrawCard(cardPosition.card, pos, DrawMode::kText, asThumbnail, true); } } else {//NORMAL VIEW WITH IMAGES int mode = !options[Options::DISABLECARDS].number ? DrawMode::kNormal : DrawMode::kText; float modx = addWHborder ? 2.0f:0.0f; //border for editor && others??? string cardsetname = setlist[cardPosition.card->setId].c_str(); if(cardsetname == "2ED"||cardsetname == "RV"||cardsetname == "4ED"||cardsetname == "5ED"||cardsetname == "6ED"||cardsetname == "7ED"||cardsetname == "8ED"||cardsetname == "9ED"||cardsetname == "CHR"||cardsetname == "DM") { JRenderer::GetInstance()->FillRoundRect((cardPosition.x - cardPosition.scale * 100.0f)-(5.f+modx),(cardPosition.y - cardPosition.scale * 142.5f)-(5.f+modx),cardPosition.scale * 200.0f,cardPosition.scale * 285.0f,5.f+modx,ARGB(255,248,248,255)); JRenderer::GetInstance()->DrawRoundRect((cardPosition.x - cardPosition.scale * 100.0f)-(5.f+modx),(cardPosition.y - cardPosition.scale * 142.5f)-(5.f+modx),cardPosition.scale * 200.0f,cardPosition.scale * 285.0f,5.f+modx,ARGB(150,20,20,20)); } else { JRenderer::GetInstance()->FillRoundRect((cardPosition.x - cardPosition.scale * 100.0f)-(5.f+modx),(cardPosition.y - cardPosition.scale * 142.5f)-(5.f+modx),cardPosition.scale * 200.0f,cardPosition.scale * 285.0f,5.f+modx,ARGB(255,10,10,10)); JRenderer::GetInstance()->DrawRoundRect((cardPosition.x - cardPosition.scale * 100.0f)-(5.f+modx),(cardPosition.y - cardPosition.scale * 142.5f)-(5.f+modx),cardPosition.scale * 200.0f,cardPosition.scale * 285.0f,5.f+modx,ARGB(50,240,240,240)); } Pos pos = Pos(cardPosition.x, cardPosition.y, cardPosition.scale * 285 / 250, 0.0, 255); CardGui::DrawCard(cardPosition.card, pos, mode, asThumbnail, true); } int quadAlpha = alpha; if (!deck()->count(cardPosition.card)) quadAlpha /= 2; quadAlpha = 255 - quadAlpha; if (quadAlpha > 0) { JRenderer::GetInstance()->FillRect(cardPosition.x - cardPosition.scale * 100.0f, cardPosition.y - cardPosition.scale * 142.5f, cardPosition.scale * 200.0f, cardPosition.scale * 285.0f, ARGB(quadAlpha,0,0,0)); } if (last_user_activity < 3) { int fontAlpha = alpha; float qtY = cardPosition.y - 135 * cardPosition.scale; float qtX = cardPosition.x + 40 * cardPosition.scale; char buffer[4096]; sprintf(buffer, "x%i", deck()->count(cardPosition.card)); WFont * font = mFont; font->SetScale(1.4f); font->SetColor(ARGB(fontAlpha/2,0,0,0)); JRenderer::GetInstance()->FillRect(qtX, qtY, font->GetStringWidth(buffer) + 6, 18, ARGB(fontAlpha/2,0,0,0)); JRenderer::GetInstance()->DrawRect(qtX, qtY, font->GetStringWidth(buffer) + 6, 18, ARGB(fontAlpha/2,240,240,240)); font->DrawString(buffer, qtX + 5, qtY + 3); font->SetColor(ARGB(fontAlpha,255,255,255)); font->DrawString(buffer, qtX + 4, qtY + 2); font->SetColor(ARGB(255,255,255,255)); font->SetScale(1.0f); } }
void GuiPhaseBar::Render() { JQuadPtr quad = WResourceManager::Instance()->GetQuad("phasebar"); JQuadPtr phaseinfo = WResourceManager::Instance()->RetrieveTempQuad("fakebar.png"); //new fakebar graphics //uncomment to draw a hideous line across hires screens. // JRenderer::GetInstance()->DrawLine(0, CENTER, SCREEN_WIDTH, CENTER, ARGB(255, 255, 255, 255)); const float radius = 25 * zoomFactor; for(int i = 0; i < 6; ++i) { //the position of the glyphe in the circle const float circPos = (i - 2) * step + angle; const float glyphY = this->y + this->mHeight / 2 + sin(circPos) * radius; //the scale is computed so that the glyphes touch each other //hint: sin(circPos + PI/2) = cos(circPos) const float glyphScale = float(zoomFactor * cosf(circPos) * 0.5f); if (observer->currentPlayer && observer->currentPlayer->isAI() && !observer->currentPlayer->opponent()->isAI()) DrawGlyph(quad.get(), (displayedPhaseId - 2 + i + kPhases) % kPhases, 0, glyphY, glyphScale, 29); else DrawGlyph(quad.get(), (displayedPhaseId - 2 + i + kPhases) % kPhases, 0, glyphY, glyphScale, 0); } //print phase name WFont * font = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT); string currentP = _("your turn"); string interrupt = ""; if (observer->currentPlayer == mpDuelLayers->getRenderedPlayerOpponent()) { currentP = _("opponent's turn"); } font->SetColor(ARGB(255, 255, 255, 255)); if (observer->currentlyActing() && observer->currentlyActing()->isAI()) { font->SetColor(ARGB(255, 128, 128, 128)); } if (observer->currentlyActing() != observer->currentPlayer) { if (observer->currentPlayer == mpDuelLayers->getRenderedPlayer()) { interrupt = _(" - ") + _("opponent plays"); } else { interrupt = _(" - ") + _("you play"); } } char buf[200]; //running this string through translate returns gibberish even though we defined the variables in the lang.txt //the conversion from phase bar phases to mtg phases is x%kPhases + 1 //todo: just to this when the displayedPhaseId updates string phaseNameToTranslate = observer->phaseRing->phaseName(displayedPhaseId%kPhases + 1); phaseNameToTranslate = _(phaseNameToTranslate); sprintf(buf, _("(%s%s) %s").c_str(), currentP.c_str(), interrupt.c_str(),phaseNameToTranslate.c_str()); #if !defined (PSP) if(phaseinfo.get()) { phaseinfo->mWidth = font->GetStringWidth(buf)+12.f; phaseinfo->SetHotSpot(phaseinfo->mWidth -4, 0); //phaseinfo->mHeight = font->GetHeight()+5.f; JRenderer::GetInstance()->RenderQuad(phaseinfo.get(),SCREEN_WIDTH_F,0,0,2.2f, SCREEN_HEIGHT_F / phaseinfo->mHeight); } #endif font->DrawString(buf, SCREEN_WIDTH - 5, 2, JGETEXT_RIGHT); }
void SimpleMenu::Render() { WFont * titleFont = WResourceManager::Instance()->GetWFont(fontId); titleFont->SetColor(ARGB(250,255,255,255));//reseting color on passes as this is a shared font now. WFont * mFont = WResourceManager::Instance()->GetWFont(fontId); if (0 == mWidth) { float sY = mY + SimpleMenuConst::kVerticalMargin; for (int i = 0; i < mCount; ++i) { float width = (static_cast<SimpleMenuItem*> (mObjects[i]))->GetEnlargedWidth() + 15; if (mWidth < width) mWidth = width; } float scaleFactor = titleFont->GetScale(); titleFont->SetScale(SCALE_NORMAL); if ((!title.empty()) && (mWidth < titleFont->GetStringWidth(title.c_str()))) mWidth = titleFont->GetStringWidth(title.c_str()); titleFont->SetScale(scaleFactor); mWidth += 2 * SimpleMenuConst::kHorizontalMargin; if (mCenterHorizontal) mX = (SCREEN_WIDTH_F - mWidth) / 2; if (mCenterVertical) mY = (SCREEN_HEIGHT_F - mHeight) / 2; for (int i = 0; i < mCount; ++i) { float y = mY + SimpleMenuConst::kVerticalMargin + i * SimpleMenuConst::kLineHeight; SimpleMenuItem * smi = static_cast<SimpleMenuItem*> (mObjects[i]); smi->Relocate(mX + mWidth / 2, y); if (smi->hasFocus()) sY = y; } stars->Fire(); selectionTargetY = selectionY = sY; timeOpen = 0; } JRenderer * renderer = JRenderer::GetInstance(); float height = mHeight; if (timeOpen < 1) height *= timeOpen > 0 ? timeOpen : -timeOpen; float heightPadding = SimpleMenuConst::kLineHeight/2; // this to reduce the bottom padding of the menu renderer->FillRect(mX, mY, mWidth, height - heightPadding, ARGB(180,0,0,0)); renderer->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA); drawVertPole(mX, mY, height - heightPadding); drawVertPole(mX + mWidth, mY, height - heightPadding); drawHorzPole(mX, mY, mWidth); drawHorzPole(mX, mY + height - heightPadding, mWidth); //drawVertPole(mX, mY - 16, height + 32); //drawVertPole(mX + mWidth, mY - 16, height + 32); //drawHorzPole(mX - 16, mY, mWidth + 32); //drawHorzPole(mX - 25, mY + height, mWidth + 50); renderer->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE); stars->Render(); renderer->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA); if (!title.empty()) { float scaleFactor = titleFont->GetScale(); titleFont->SetScale(SCALE_NORMAL); titleFont->DrawString(title.c_str(), mX + mWidth / 2, mY - 3, JGETEXT_CENTER); titleFont->SetScale(scaleFactor); } for (int i = startId; i < startId + maxItems; i++) { if (i > mCount - 1) break; SimpleMenuItem *currentMenuItem = static_cast<SimpleMenuItem*>(mObjects[i]); float currentY = currentMenuItem->getY() - SimpleMenuConst::kLineHeight * startId; float menuBottomEdge = mY + height - SimpleMenuConst::kLineHeight + 7; if (currentY < menuBottomEdge) { if (currentMenuItem->hasFocus()) { WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT)->DrawString(currentMenuItem->getDescription().c_str(), mX + mWidth + 10, mY + 15); mFont->SetColor(ARGB(255,255,255,0)); } else { mFont->SetColor(ARGB(150,255,255,255)); } (static_cast<SimpleMenuItem*> (mObjects[i]))->RenderWithOffset(-SimpleMenuConst::kLineHeight * startId); } mFont->SetScale(SCALE_NORMAL); } mFont->SetScale(SCALE_NORMAL); }
void GameStateShop::Render() { //Erase WFont * mFont = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT); JRenderer * r = JRenderer::GetInstance(); r->ClearScreen(ARGB(0,0,0,0)); if (mStage == STAGE_FADE_IN) return; JQuadPtr mBg = WResourceManager::Instance()->RetrieveTempQuad("shop.jpg", TEXTURE_SUB_5551); if (mBg.get()) r->RenderQuad(mBg.get(), 0, 0); JQuadPtr quad = WResourceManager::Instance()->RetrieveTempQuad("shop_light.jpg", TEXTURE_SUB_5551); if (quad.get()) { r->EnableTextureFilter(false); r->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE); quad->SetColor(ARGB(lightAlpha,255,255,255)); r->RenderQuad(quad.get(), 0, 0); r->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA); r->EnableTextureFilter(true); } if (shopMenu) shopMenu->Render(); if (filterMenu && !filterMenu->isFinished()) filterMenu->Render(); else { if (boosterDisplay) boosterDisplay->Render(); else if (bigDisplay) { if (bigDisplay->mOffset.getPos() >= 0) bigDisplay->setSource(srcCards); else bigDisplay->setSource(NULL); bigDisplay->Render(); float elp = srcCards->getElapsed(); //Render the card list overlay. if (bListCards || elp > LIST_FADEIN) { int alpha = 200; if (!bListCards && elp < LIST_FADEIN + .25) { alpha = static_cast<int> (800 * (elp - LIST_FADEIN)); } r->FillRoundRect(300, 10, 160, SHOP_SLOTS * 20 + 15, 5, ARGB(alpha,0,0,0)); alpha += 55; for (int i = 0; i < SHOP_SLOTS; i++) { if (i == shopMenu->getSelected()) mFont->SetColor(ARGB(alpha,255,255,0)); else mFont->SetColor(ARGB(alpha,255,255,255)); char buffer[512]; string s = descPurchase(i, true); sprintf(buffer, "%s", s.c_str()); float x = 310; float y = static_cast<float> (25 + 20 * i); mFont->DrawString(buffer, x, y); } } } } //Render the info bar r->FillRect(0, SCREEN_HEIGHT - 17, SCREEN_WIDTH, 17, ARGB(128,0,0,0)); std::ostringstream stream; stream << kCreditsString << playerdata->credits; mFont->SetColor(ARGB(255,255,255,255)); mFont->DrawString(stream.str(), 5, SCREEN_HEIGHT - 14); #ifndef TOUCH_ENABLED float len = 4 + mFont->GetStringWidth(kOtherCardsString.c_str()); r->RenderQuad(pspIcons[6].get(), SCREEN_WIDTH - len - 0.5 - 10, SCREEN_HEIGHT - 8, 0, kPspIconScaleFactor, kPspIconScaleFactor); mFont->DrawString(kOtherCardsString, SCREEN_WIDTH - len, SCREEN_HEIGHT - 14); #else enableButtons(); #endif mFont->SetColor(ARGB(255,255,255,0)); mFont->DrawString(descPurchase(bigSync.getPos()).c_str(), SCREEN_WIDTH / 2, SCREEN_HEIGHT - 14, JGETEXT_CENTER); mFont->SetColor(ARGB(255,255,255,255)); if (mStage == STAGE_SHOP_TASKS && taskList) { taskList->Render(); } if (menu) menu->Render(); if (!filterMenu || (filterMenu && filterMenu->isFinished())) renderButtons(); }
DeckMenu::DeckMenu(int id, JGuiListener* listener, int fontId, const string _title, const int&, bool showDetailsOverride) : JGuiController(JGE::GetInstance(), id, listener), fontId(fontId), mShowDetailsScreen( showDetailsOverride ) { backgroundName = "DeckMenuBackdrop"; mAlwaysShowDetailsButton = false; mSelectedDeck = NULL; mY = 50; mWidth = 176; mX = 115; titleX = 110; // center point in title box titleY = 15; titleWidth = 180; // width of inner box of title descX = 260 + DeckMenuConst::kDescriptionHorizontalBoxPadding; descY = 100 + DeckMenuConst::kDescriptionVerticalBoxPadding; descHeight = 145; descWidth = 195; detailedInfoBoxX = 400; detailedInfoBoxY = 235; starsOffsetX = 50; statsX = 300; statsY = 15; statsHeight = 50; statsWidth = 227; avatarX = 232; avatarY = 11; menuInitialized = false; float scrollerWidth = 200.0f; float scrollerHeight = 28.0f; mScroller = NEW VerticalTextScroller(Fonts::MAIN_FONT, 14, 235, scrollerWidth, scrollerHeight, DeckMenuConst::kVerticalScrollSpeed); mAutoTranslate = true; maxItems = 6; mHeight = 2 * DeckMenuConst::kVerticalMargin + (maxItems * DeckMenuConst::kLineHeight); // we want to cap the deck titles to 15 characters to avoid overflowing deck names title = _(_title); displayTitle = title; mFont = WResourceManager::Instance()->GetWFont(fontId); startId = 0; selectionT = 0; timeOpen = 0; mClosed = false; if (mFont->GetStringWidth(title.c_str()) > titleWidth) titleFontScale = SCALE_SHRINK; else titleFontScale = SCALE_NORMAL; mSelectionTargetY = selectionY = DeckMenuConst::kVerticalMargin; if (NULL == stars) stars = NEW hgeParticleSystem(WResourceManager::Instance()->RetrievePSI("stars.psi", WResourceManager::Instance()->GetQuad("stars").get())); stars->FireAt(mX, mY); const string detailedInfoString = _("Detailed Info"); WFont *descriptionFont = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT); float stringWidth = descriptionFont->GetStringWidth(detailedInfoString.c_str()); float boxStartX = detailedInfoBoxX - stringWidth / 2 + 20; dismissButton = NEW InteractiveButton( this, DeckMenuConst::kDetailedInfoButtonId, Fonts::MAIN_FONT, detailedInfoString, boxStartX, detailedInfoBoxY, JGE_BTN_CANCEL); JGuiController::Add(dismissButton, true); updateScroller(); }