diff --git a/projects/mtg/bin/Res/graphics/simon.dat b/projects/mtg/bin/Res/graphics/simon.dat new file mode 100644 index 000000000..5f1321458 Binary files /dev/null and b/projects/mtg/bin/Res/graphics/simon.dat differ diff --git a/projects/mtg/bin/Res/graphics/simon.png b/projects/mtg/bin/Res/graphics/simon.png new file mode 100644 index 000000000..262ae500d Binary files /dev/null and b/projects/mtg/bin/Res/graphics/simon.png differ diff --git a/projects/mtg/bin/Res/graphics/spade.png b/projects/mtg/bin/Res/graphics/spade.png new file mode 100644 index 000000000..78976fa84 Binary files /dev/null and b/projects/mtg/bin/Res/graphics/spade.png differ diff --git a/projects/mtg/include/GameStateDuel.h b/projects/mtg/include/GameStateDuel.h index c9c637c73..d408e277a 100644 --- a/projects/mtg/include/GameStateDuel.h +++ b/projects/mtg/include/GameStateDuel.h @@ -6,17 +6,6 @@ #include "_includeAll.h" #include "../include/SimpleMenu.h" -enum - { - DUEL_START, - DUEL_END, - DUEL_CHOOSE_DECK1, - DUEL_CHOOSE_DECK2, - ERROR_NO_DECK, - DUEL_PLAY, - DUEL_MENU - }; - #define CHOOSE_OPPONENT 7 #ifdef TESTSUITE diff --git a/projects/mtg/include/SimpleMenu.h b/projects/mtg/include/SimpleMenu.h index 947c9ef01..f57fbdbd7 100644 --- a/projects/mtg/include/SimpleMenu.h +++ b/projects/mtg/include/SimpleMenu.h @@ -15,7 +15,7 @@ class SimpleMenu:public JGuiController{ static const unsigned SIDE_SIZE; static const unsigned VMARGIN; static const unsigned HMARGIN; - static const unsigned LINE_HEIGHT; + static const signed LINE_HEIGHT; static const char* spadeLPath; static const char* spadeRPath; static const char* jewelPath; @@ -28,12 +28,17 @@ class SimpleMenu:public JGuiController{ std::string title; int displaytitle; int maxItems,startId; - hgeParticleSystem* stars; float selectionT, selectionY; float timeOpen; + static unsigned int refCount; static JQuad *spadeR, *spadeL, *jewel, *side; static JLBFont* titleFont; + static hgeParticleSystem* stars; + // This works only because of no multithreading + static PIXEL_TYPE jewelGraphics[9]; + + inline void MogrifyJewel(); void drawHorzPole(int x, int y, int width); void drawVertPole(int x, int y, int height); diff --git a/projects/mtg/src/GameApp.cpp b/projects/mtg/src/GameApp.cpp index 7b14fe71d..7d5c19b46 100644 --- a/projects/mtg/src/GameApp.cpp +++ b/projects/mtg/src/GameApp.cpp @@ -99,6 +99,8 @@ void GameApp::Create() CommonRes->CreateQuad("stars", "graphics/particles.png", 64, 0, 32, 32); CommonRes->GetQuad("stars")->SetHotSpot(16,16); + CommonRes->LoadJLBFont("graphics/simon",11); + CommonRes->GetJLBFont("graphics/simon")->SetTracking(-1); CommonRes->LoadJLBFont("graphics/f3",16); CommonRes->LoadJLBFont("graphics/magic",16); diff --git a/projects/mtg/src/GameStateDuel.cpp b/projects/mtg/src/GameStateDuel.cpp index ac406a6f4..6eb433a82 100644 --- a/projects/mtg/src/GameStateDuel.cpp +++ b/projects/mtg/src/GameStateDuel.cpp @@ -10,6 +10,29 @@ #include "../include/TestSuiteAI.h" #endif +enum ENUM_DUEL_STATE + { + DUEL_STATE_START, + DUEL_STATE_END, + DUEL_STATE_CHOOSE_DECK1, + DUEL_STATE_CHOOSE_DECK1_TO_2, + DUEL_STATE_CHOOSE_DECK2, + DUEL_STATE_CHOOSE_DECK2_TO_PLAY, + DUEL_STATE_ERROR_NO_DECK, + DUEL_STATE_CANCEL, + DUEL_STATE_PLAY, + DUEL_STATE_BACK_TO_MAIN_MENU, + DUEL_STATE_MENU + }; + +enum ENUM_DUEL_MENUS + { + DUEL_MENU_GAME_MENU, + DUEL_MENU_CHOOSE_DECK, + DUEL_MENU_CHOOSE_OPPONENT + }; + + GameStateDuel::GameStateDuel(GameApp* parent): GameState(parent) { for (int i = 0; i<2; i ++){ deck[i]=NULL; @@ -43,14 +66,14 @@ void GameStateDuel::Start() #endif - mGamePhase = DUEL_CHOOSE_DECK1; + mGamePhase = DUEL_STATE_CHOOSE_DECK1; - mFont = GameApp::CommonRes->GetJLBFont("graphics/f3"); + mFont = GameApp::CommonRes->GetJLBFont("graphics/simon"); mFont->SetBase(0); // using 2nd font - opponentMenuFont = NEW JLBFont("graphics/f3",16); + opponentMenuFont = mFont; //NEW JLBFont("graphics/simon",11); - menu = NEW SimpleMenu(11,this,mFont,SCREEN_WIDTH/2-100,20); + menu = NEW SimpleMenu(DUEL_MENU_GAME_MENU, this, mFont, SCREEN_WIDTH/2-100, 25); menu->Add(12,"Back to main menu"); menu->Add(13, "Cancel"); @@ -61,7 +84,7 @@ void GameStateDuel::Start() if (mParent->players[i] == PLAYER_TYPE_HUMAN){ if (!deckmenu){ decksneeded = 1; - deckmenu = NEW SimpleMenu(1,this,mFont, 10 , 10, "Choose a Deck"); + deckmenu = NEW SimpleMenu(DUEL_MENU_CHOOSE_DECK, this, mFont, 35, 25, "Choose a Deck"); char buffer[100]; for (int j=1; j<6; j++){ sprintf(buffer, RESPATH"/player/deck%i.txt",j); @@ -77,10 +100,7 @@ void GameStateDuel::Start() } if (decksneeded) - mGamePhase = ERROR_NO_DECK; - - - + mGamePhase = DUEL_STATE_ERROR_NO_DECK; } @@ -152,7 +172,6 @@ void GameStateDuel::End() SAFE_DELETE(menu); SAFE_DELETE(opponentMenu); - SAFE_DELETE(opponentMenuFont); #ifdef TESTSUITE SAFE_DELETE(testSuite); #endif @@ -163,40 +182,44 @@ void GameStateDuel::Update(float dt) { switch (mGamePhase) { - case ERROR_NO_DECK: + case DUEL_STATE_ERROR_NO_DECK: if (PSP_CTRL_CIRCLE == mEngine->ReadButton()) mParent->SetNextState(GAME_STATE_DECK_VIEWER); break; - case DUEL_CHOOSE_DECK1: + case DUEL_STATE_CHOOSE_DECK1: if (mParent->players[0] == PLAYER_TYPE_HUMAN) deckmenu->Update(dt); #ifdef TESTSUITE else if (mParent->players[1] == PLAYER_TYPE_TESTSUITE){ if (testSuite && testSuite->loadNext()){ loadTestSuitePlayers(); - mGamePhase = DUEL_PLAY; + mGamePhase = DUEL_STATE_PLAY; testSuite->initGame(); char buf[4096]; sprintf(buf, "nb cards in player2's graveyard : %i\n",mPlayers[1]->game->graveyard->nb_cards); LOG(buf); }else{ - mGamePhase = DUEL_END; + mGamePhase = DUEL_STATE_END; } } #endif else{ loadPlayer(0); - mGamePhase = DUEL_CHOOSE_DECK2; + mGamePhase = DUEL_STATE_CHOOSE_DECK2; } break; - case DUEL_CHOOSE_DECK2: + case DUEL_STATE_CHOOSE_DECK1_TO_2: + if (deckmenu->closed) mGamePhase = DUEL_STATE_CHOOSE_DECK2; + else deckmenu->Update(dt); + break; + case DUEL_STATE_CHOOSE_DECK2: if (mParent->players[1] == PLAYER_TYPE_HUMAN){ deckmenu->Update(dt); } else{ if (mParent->players[0] == PLAYER_TYPE_HUMAN){ if (!opponentMenu){ - opponentMenu = NEW SimpleMenu(13,this,opponentMenuFont,10,10,"Choose Opponent"); + opponentMenu = NEW SimpleMenu(DUEL_MENU_CHOOSE_OPPONENT, this, opponentMenuFont, 35, 25, "Choose Opponent"); opponentMenu->Add(0,"Random"); nbAIDecks = 0; int found = 1; @@ -229,11 +252,22 @@ void GameStateDuel::Update(float dt) opponentMenu->Update(dt); }else{ loadPlayer(1); - mGamePhase = DUEL_PLAY; + mGamePhase = DUEL_STATE_PLAY; } } break; - case DUEL_PLAY: + case DUEL_STATE_CHOOSE_DECK2_TO_PLAY: + if (mParent->players[1] == PLAYER_TYPE_HUMAN){ + if (deckmenu->closed) mGamePhase = DUEL_STATE_PLAY; + else deckmenu->Update(dt); + } + else + { + if (opponentMenu->closed) mGamePhase = DUEL_STATE_PLAY; + else opponentMenu->Update(dt); + } + break; + case DUEL_STATE_PLAY: //Stop the music before starting the game if (GameApp::music){ JSoundSystem::GetInstance()->StopMusic(GameApp::music); @@ -257,15 +291,15 @@ void GameStateDuel::Update(float dt) playerdata->save(); delete playerdata; } - mGamePhase = DUEL_END; + mGamePhase = DUEL_STATE_END; #ifdef TESTSUITE if (mParent->players[1] == PLAYER_TYPE_TESTSUITE){ if (testSuite->loadNext()){ loadTestSuitePlayers(); - mGamePhase = DUEL_PLAY; + mGamePhase = DUEL_STATE_PLAY; testSuite->initGame(); }else{ - mGamePhase = DUEL_END; + mGamePhase = DUEL_STATE_END; } }else #endif @@ -276,12 +310,22 @@ void GameStateDuel::Update(float dt) mFont->SetColor(ARGB(255,255,255,255)); } if (mEngine->GetButtonClick(PSP_CTRL_START)){ - mGamePhase = DUEL_MENU; + mGamePhase = DUEL_STATE_MENU; } break; - case DUEL_MENU: + case DUEL_STATE_MENU: menu->Update(dt); break; + case DUEL_STATE_CANCEL: + menu->Update(dt); + if (menu->closed) + mGamePhase = DUEL_STATE_PLAY; + break; + case DUEL_STATE_BACK_TO_MAIN_MENU: + menu->Update(dt); + if (menu->closed) + mParent->SetNextState(GAME_STATE_MENU); + break; default: if (PSP_CTRL_CIRCLE == mEngine->ReadButton()){ mParent->SetNextState(GAME_STATE_MENU); @@ -295,55 +339,67 @@ void GameStateDuel::Render() //Erase JRenderer::GetInstance()->ClearScreen(ARGB(0,0,0,0)); - if (game) game->Render(); - if (mGamePhase == DUEL_END){ - JRenderer::GetInstance()->ClearScreen(ARGB(200,0,0,0)); - char buffer[50]; - int p0life = mPlayers[0]->life; - if (!mPlayers[0]->isAI() && mPlayers[1]->isAI() ){ - if (game->gameOver !=mPlayers[0]){ - sprintf (buffer, "Victory! Congratulations, You earn 500 credits"); - }else{ - sprintf (buffer, "You have been defeated"); + switch (mGamePhase) + { + case DUEL_STATE_END: + { + JRenderer::GetInstance()->ClearScreen(ARGB(200,0,0,0)); + char buffer[50]; + int p0life = mPlayers[0]->life; + if (!mPlayers[0]->isAI() && mPlayers[1]->isAI() ){ + if (game->gameOver !=mPlayers[0]){ + sprintf (buffer, "Victory! Congratulations, You earn 500 credits"); + }else{ + sprintf (buffer, "You have been defeated"); + } + }else{ + int winner = 2; + if (game->gameOver !=mPlayers[0]){ + winner = 1; + } + sprintf(buffer, "Player %i wins (%i)", winner, p0life ); + } + mFont->DrawString(buffer, 10, 150); + break; } - }else{ - int winner = 2; - if (game->gameOver !=mPlayers[0]){ - winner = 1; + case DUEL_STATE_CHOOSE_DECK1: + case DUEL_STATE_CHOOSE_DECK1_TO_2: + case DUEL_STATE_CHOOSE_DECK2: + case DUEL_STATE_CHOOSE_DECK2_TO_PLAY: + if (opponentMenu){ + opponentMenu->Render(); + }else if (deckmenu){ + deckmenu->Render(); } - sprintf(buffer, "Player %i wins (%i)", winner, p0life ); - } - mFont->DrawString(buffer, 10, 150); - }else if (mGamePhase == DUEL_CHOOSE_DECK1 || mGamePhase == DUEL_CHOOSE_DECK2){ - if (opponentMenu){ - opponentMenu->Render(); - }else if (deckmenu){ - deckmenu->Render(); - } - }else if (mGamePhase == ERROR_NO_DECK){ - mFont->DrawString("NO DECK AVAILABLE,",0,SCREEN_HEIGHT/2); - mFont->DrawString("PRESS CIRCLE TO GO TO THE DECK EDITOR!",0,SCREEN_HEIGHT/2 + 20); - }else if (mGamePhase == DUEL_MENU){ - menu->Render(); + break; + case DUEL_STATE_ERROR_NO_DECK: + mFont->DrawString("NO DECK AVAILABLE,",0,SCREEN_HEIGHT/2); + mFont->DrawString("PRESS CIRCLE TO GO TO THE DECK EDITOR!",0,SCREEN_HEIGHT/2 + 20); + break; + case DUEL_STATE_MENU: + case DUEL_STATE_CANCEL: + case DUEL_STATE_BACK_TO_MAIN_MENU: + menu->Render(); } - } void GameStateDuel::ButtonPressed(int controllerId, int controlId) { switch (controllerId){ - case 13: + case DUEL_MENU_CHOOSE_OPPONENT: { switch(controlId){ case 0: loadPlayer(1); - mGamePhase = DUEL_PLAY; + opponentMenu->Close(); + mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY; break; default: loadPlayer(1,controlId,1); - mGamePhase = DUEL_PLAY; + opponentMenu->Close(); + mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY; break; } @@ -359,20 +415,24 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) case 4: case 5: { - if (mGamePhase == DUEL_CHOOSE_DECK1){ + if (mGamePhase == DUEL_STATE_CHOOSE_DECK1){ loadPlayer(0,controlId); - mGamePhase = DUEL_CHOOSE_DECK2; + deckmenu->Close(); + mGamePhase = DUEL_STATE_CHOOSE_DECK1_TO_2; }else{ loadPlayer(1,controlId); - mGamePhase = DUEL_PLAY; + deckmenu->Close(); + mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY; } break; } case 12: - mParent->SetNextState(GAME_STATE_MENU); + menu->Close(); + mGamePhase = DUEL_STATE_BACK_TO_MAIN_MENU; break; case 13: - mGamePhase = DUEL_PLAY; + menu->Close(); + mGamePhase = DUEL_STATE_CANCEL; break; } } diff --git a/projects/mtg/src/GameStateMenu.cpp b/projects/mtg/src/GameStateMenu.cpp index c34c47654..2cb4005bf 100644 --- a/projects/mtg/src/GameStateMenu.cpp +++ b/projects/mtg/src/GameStateMenu.cpp @@ -90,7 +90,7 @@ void GameStateMenu::Create() } } - mFont = GameApp::CommonRes->GetJLBFont("graphics/f3"); + mFont = GameApp::CommonRes->GetJLBFont("graphics/simon"); //mFont->SetBase(0); // using 2nd font mGuiController = NEW JGuiController(100, this); //mGuiController->SetShadingBackground(10, 45, 80, 100, ARGB(255,0,0,0)); @@ -366,7 +366,7 @@ void GameStateMenu::Render() if (mGuiController!=NULL) mGuiController->Render(); - mFont->SetScale(0.7); + // mFont->SetScale(0.7); mFont->SetColor(ARGB(128,255,255,255)); mFont->DrawString(GAME_VERSION, SCREEN_WIDTH-10,SCREEN_HEIGHT-15,JGETEXT_RIGHT); mFont->DrawString(nbcardsStr,10, SCREEN_HEIGHT-15); diff --git a/projects/mtg/src/MTGGamePhase.cpp b/projects/mtg/src/MTGGamePhase.cpp index 7cac6068e..9dc77a62a 100644 --- a/projects/mtg/src/MTGGamePhase.cpp +++ b/projects/mtg/src/MTGGamePhase.cpp @@ -5,9 +5,8 @@ MTGGamePhase::MTGGamePhase(int id):ActionElement(id){ animation = 0; currentState = -1; - mFont= GameApp::CommonRes->GetJLBFont("graphics/f3"); + mFont= GameApp::CommonRes->GetJLBFont("graphics/simon"); mFont->SetBase(0); // using 2nd font - } diff --git a/projects/mtg/src/MTGGuiHand.cpp b/projects/mtg/src/MTGGuiHand.cpp index be6b41d46..74b5348f6 100644 --- a/projects/mtg/src/MTGGuiHand.cpp +++ b/projects/mtg/src/MTGGuiHand.cpp @@ -6,7 +6,7 @@ MTGGuiHand::MTGGuiHand(int id, GameObserver * _game):GuiCardsController(id, _gam mShowHand = HAND_HIDE; mAnimState = 0; currentPlayer = NULL; - mFont = GameApp::CommonRes->GetJLBFont("graphics/f3"); + mFont = GameApp::CommonRes->GetJLBFont("graphics/simon"); for (int i = 0; i < 2; i++){ currentId[i] = 0; } diff --git a/projects/mtg/src/MTGGuiPlay.cpp b/projects/mtg/src/MTGGuiPlay.cpp index 5dd8f09b9..8bb9f8cc6 100644 --- a/projects/mtg/src/MTGGuiPlay.cpp +++ b/projects/mtg/src/MTGGuiPlay.cpp @@ -34,9 +34,7 @@ MTGGuiPlay::MTGGuiPlay(int id, GameObserver * _game):PlayGuiObjectController(id, mGlitter = NEW JQuad(mPhaseBarTexture, 392, 0, 5, 5); mGlitter->SetHotSpot(2.5,2.5); mGlitterAlpha = -1; - mFont= GameApp::CommonRes->GetJLBFont("graphics/f3"); - mFont->SetScale(0.75); - + mFont= GameApp::CommonRes->GetJLBFont("graphics/simon"); mIconsTexture = JRenderer::GetInstance()->LoadTexture("graphics/menuicons.png", TEX_TYPE_USE_VRAM); //load all the icon images @@ -308,7 +306,6 @@ void MTGGuiPlay::RenderPhaseBar(){ } renderer->RenderQuad(phaseIcons[index], 200 + 14*i,0,0,0.5,0.5); } - mFont->SetScale(0.70); if (game->currentlyActing()->isAI()){ mFont->SetColor(ARGB(255,128,128,128)); }else{ diff --git a/projects/mtg/src/MenuItem.cpp b/projects/mtg/src/MenuItem.cpp index 31b3ea256..18e9ea9de 100644 --- a/projects/mtg/src/MenuItem.cpp +++ b/projects/mtg/src/MenuItem.cpp @@ -4,14 +4,10 @@ MenuItem::MenuItem(int id, JLBFont *font, const char* text, int x, int y, JQuad * _off, JQuad * _on, const char * particle, JQuad * particleTex, bool hasFocus): JGuiObject(id), mFont(font), mText(text), mX(x), mY(y) { - - - updatedSinceLastRender = 1; mParticleSys = NEW hgeParticleSystem(particle, particleTex); mParticleSys->MoveTo(mX, mY); - mHasFocus = hasFocus; lastDt = 0.001f; mScale = 1.0f; @@ -22,7 +18,7 @@ MenuItem::MenuItem(int id, JLBFont *font, const char* text, int x, int y, JQuad if (hasFocus) Entering(); - mFont->SetScale(1.2f); + // mFont->SetScale(1.2f); } diff --git a/projects/mtg/src/SimpleMenu.cpp b/projects/mtg/src/SimpleMenu.cpp index 505af7269..72a18630d 100644 --- a/projects/mtg/src/SimpleMenu.cpp +++ b/projects/mtg/src/SimpleMenu.cpp @@ -5,21 +5,27 @@ #include "../include/GameApp.h" const unsigned SimpleMenu::SIDE_SIZE = 7; -const unsigned SimpleMenu::VMARGIN = 8; +const unsigned SimpleMenu::VMARGIN = 12; const unsigned SimpleMenu::HMARGIN = 27; -const unsigned SimpleMenu::LINE_HEIGHT = 20; +const signed SimpleMenu::LINE_HEIGHT = 16; const char* SimpleMenu::spadeLPath = "graphics/spade_ul.png"; const char* SimpleMenu::spadeRPath = "graphics/spade_ur.png"; const char* SimpleMenu::jewelPath = "graphics/jewel.png"; const char* SimpleMenu::sidePath = "graphics/menuside.png"; const char* SimpleMenu::titleFontPath = "graphics/smallface"; - JQuad* SimpleMenu::spadeR = NULL; JQuad* SimpleMenu::spadeL = NULL; JQuad* SimpleMenu::jewel = NULL; JQuad* SimpleMenu::side = NULL; JLBFont* SimpleMenu::titleFont = NULL; +hgeParticleSystem* SimpleMenu::stars = NULL; +unsigned int SimpleMenu::refCount = 0; +// Here comes the magic of jewel graphics +PIXEL_TYPE SimpleMenu::jewelGraphics[9] = {0x3FFFFFFF,0x63645AEA,0x610D0D98, + 0x63645AEA,0xFF635AD5,0xFF110F67, + 0x610D0D98,0xFF110F67,0xFD030330}; + SimpleMenu::SimpleMenu(int id, JGuiListener* listener, JLBFont* font, int x, int y, const char * _title, int _maxItems): JGuiController(id, listener){ mHeight = 2 * VMARGIN; @@ -34,26 +40,45 @@ SimpleMenu::SimpleMenu(int id, JGuiListener* listener, JLBFont* font, int x, int selectionT = 0; timeOpen = 0; closed = false; + ++refCount; JRenderer* renderer = JRenderer::GetInstance(); static JTexture* spadeLTex = renderer->LoadTexture(spadeLPath, TEX_TYPE_USE_VRAM); static JTexture* spadeRTex = renderer->LoadTexture(spadeRPath, TEX_TYPE_USE_VRAM); - static JTexture* jewelTex = renderer->LoadTexture(jewelPath, TEX_TYPE_USE_VRAM); + static JTexture* jewelTex = renderer->CreateTexture(5, 5, TEX_TYPE_USE_VRAM); static JTexture* sideTex = renderer->LoadTexture(sidePath, TEX_TYPE_USE_VRAM); if (NULL == spadeL) spadeL = NEW JQuad(spadeLTex, 2, 1, 16, 13); if (NULL == spadeR) spadeR = NEW JQuad(spadeRTex, 2, 1, 16, 13); - if (NULL == jewel) jewel = NEW JQuad(jewelTex, 0, 0, 3, 3); + if (NULL == jewel) jewel = NEW JQuad(jewelTex, 1, 1, 3, 3); if (NULL == side) side = NEW JQuad(sideTex, 0, 1, 1, 7); if (NULL == titleFont) { GameApp::CommonRes->LoadJLBFont(titleFontPath, 7); titleFont = GameApp::CommonRes->GetJLBFont(titleFontPath); } + if (NULL == stars) stars = NEW hgeParticleSystem("graphics/stars.psi", GameApp::CommonRes->GetQuad("stars")); - stars = NEW hgeParticleSystem("graphics/stars.psi", GameApp::CommonRes->GetQuad("stars")); stars->MoveTo(mX, mY); } +inline void SimpleMenu::MogrifyJewel() +{ + PIXEL_TYPE tmpBuf[sizeof(jewelGraphics)/sizeof(jewelGraphics[0])]; + if (!(random() & 0x7E)) + for (int i = sizeof(jewelGraphics) / sizeof(jewelGraphics[0]) - 1; i >= 0; --i) + { + unsigned int v = jewelGraphics[i]; + if (v & 0x80) tmpBuf[i] = 0xFF; else tmpBuf[i] = v & 0xFF; + if (v & 0x8000) tmpBuf[i] += 0xFF00; else tmpBuf[i] += (v & 0x7F00) << 1; + if (v & 0x800000) tmpBuf[i] += 0xFF0000; else tmpBuf[i] += (v & 0x7F0000) << 1; + tmpBuf[i] += v & 0xFF000000; + } + else + for (int i = sizeof(jewelGraphics) / sizeof(jewelGraphics[0]) - 1; i >= 0; --i) + tmpBuf[i] = jewelGraphics[i]; + jewel->mTex->UpdateBits(1, 1, 3, 3, tmpBuf); +} + void SimpleMenu::drawHorzPole(int x, int y, int width) { JRenderer* renderer = JRenderer::GetInstance(); @@ -64,7 +89,9 @@ void SimpleMenu::drawHorzPole(int x, int y, int width) renderer->RenderQuad(spadeR, x - 9, y - 6); renderer->RenderQuad(spadeL, x + width - 5, y - 6); - renderer->RenderQuad(jewel, x - 1, y - 1); + MogrifyJewel(); + + renderer->RenderQuad(jewel, x, y - 1); renderer->RenderQuad(jewel, x + width - 1, y - 1); } void SimpleMenu::drawVertPole(int x, int y, int height) @@ -77,6 +104,8 @@ void SimpleMenu::drawVertPole(int x, int y, int height) renderer->RenderQuad(spadeR, x - 6, y + 7, -M_PI/2); renderer->RenderQuad(spadeL, x - 6, y + height + 11, -M_PI/2); + MogrifyJewel(); + renderer->RenderQuad(jewel, x - 1, y - 1); renderer->RenderQuad(jewel, x - 1, y + height - 1); } @@ -89,6 +118,7 @@ void SimpleMenu::Render(){ int width = (static_cast(mObjects[i]))->GetWidth(); if (mWidth < width) mWidth = width; } + if ((!title.empty()) && (mWidth < titleFont->GetStringWidth(title.c_str()))) mWidth = titleFont->GetStringWidth(title.c_str()); mWidth += 2*HMARGIN; for (int i = startId; i < startId + mCount; ++i) static_cast(mObjects[i])->Relocate(mX + mWidth / 2, mY + VMARGIN + i * LINE_HEIGHT); @@ -108,6 +138,12 @@ void SimpleMenu::Render(){ drawVertPole(mX, mY - 16, height + 32); drawVertPole(mX + mWidth, mY - 16, height + 32); drawHorzPole(mX - 16, mY, mWidth + 32); + + renderer->SetTexBlend(BLEND_SRC_ALPHA, BLEND_DST_ALPHA); + stars->Render(); + renderer->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA); + + mFont->SetScale(1.0f); if (!title.empty()) titleFont->DrawString(title.c_str(), mX+mWidth/2, mY - 3, JGETEXT_CENTER); for (int i = startId; i < startId + maxItems ; i++){ @@ -115,9 +151,6 @@ void SimpleMenu::Render(){ if ((static_cast(mObjects[i]))->mY - LINE_HEIGHT * startId < mY + height - LINE_HEIGHT + 7) (static_cast(mObjects[i]))->RenderWithOffset(-LINE_HEIGHT*startId); } - renderer->SetTexBlend(BLEND_SRC_ALPHA, BLEND_DST_ALPHA); - stars->Render(); - renderer->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA); drawHorzPole(mX - 25, mY + height, mWidth + 50); } @@ -140,6 +173,7 @@ void SimpleMenu::Update(float dt){ } else { + closed = false; timeOpen += dt * 10; } } @@ -152,4 +186,5 @@ void SimpleMenu::Add(int id, const char * text){ void SimpleMenu::Close() { timeOpen = -1.0; + stars->Stop(true); } diff --git a/projects/mtg/src/SimpleMenuItem.cpp b/projects/mtg/src/SimpleMenuItem.cpp index 65124d948..7c083e2a6 100644 --- a/projects/mtg/src/SimpleMenuItem.cpp +++ b/projects/mtg/src/SimpleMenuItem.cpp @@ -12,16 +12,16 @@ SimpleMenuItem::SimpleMenuItem(SimpleMenu* _parent, int id, JLBFont *font, const if (hasFocus) Entering(); - mFont->SetScale(1.2f); + // mFont->SetScale(1.2f); } void SimpleMenuItem::RenderWithOffset(float yOffset) { - mFont->SetScale(mScale); + // mFont->SetScale(mScale); mFont->SetColor(ARGB(255,255,255,255)); mFont->DrawString(mText.c_str(), mX, mY + yOffset, JGETEXT_CENTER); - mFont->SetScale(1.0f); + // mFont->SetScale(1.0f); } void SimpleMenuItem::Render() @@ -31,7 +31,7 @@ void SimpleMenuItem::Render() void SimpleMenuItem::Update(float dt) { - if (mScale < mTargetScale) + /* if (mScale < mTargetScale) { mScale += 8.0f*dt; if (mScale > mTargetScale) @@ -42,7 +42,7 @@ void SimpleMenuItem::Update(float dt) mScale -= 8.0f*dt; if (mScale < mTargetScale) mScale = mTargetScale; - } + }*/ }