From 0d1420724714299178d627dba7693bea8889e4c1 Mon Sep 17 00:00:00 2001 From: "jean.chalard" Date: Sun, 4 Jan 2009 02:49:08 +0000 Subject: [PATCH] J : * A number of adjustments about fonts. --- projects/mtg/bin/Res/graphics/simon.dat | Bin 0 -> 2048 bytes projects/mtg/bin/Res/graphics/simon.png | Bin 0 -> 2791 bytes projects/mtg/bin/Res/graphics/spade.png | Bin 0 -> 307 bytes projects/mtg/include/GameStateDuel.h | 11 -- projects/mtg/include/SimpleMenu.h | 9 +- projects/mtg/src/GameApp.cpp | 2 + projects/mtg/src/GameStateDuel.cpp | 182 ++++++++++++++++-------- projects/mtg/src/GameStateMenu.cpp | 4 +- projects/mtg/src/MTGGamePhase.cpp | 3 +- projects/mtg/src/MTGGuiHand.cpp | 2 +- projects/mtg/src/MTGGuiPlay.cpp | 5 +- projects/mtg/src/MenuItem.cpp | 6 +- projects/mtg/src/SimpleMenu.cpp | 55 +++++-- projects/mtg/src/SimpleMenuItem.cpp | 10 +- 14 files changed, 186 insertions(+), 103 deletions(-) create mode 100644 projects/mtg/bin/Res/graphics/simon.dat create mode 100644 projects/mtg/bin/Res/graphics/simon.png create mode 100644 projects/mtg/bin/Res/graphics/spade.png diff --git a/projects/mtg/bin/Res/graphics/simon.dat b/projects/mtg/bin/Res/graphics/simon.dat new file mode 100644 index 0000000000000000000000000000000000000000..5f1321458accb4c2d149cebd9ed58d2eea67550f GIT binary patch literal 2048 zcmeIxOD{t~6ae74@v2v;dQ=tlT!`3+*oa6hgcUY|1qqRO29ZW1A;H4Wrgy&RUecA$ z=F6O!oO9>gnIyD^+UN*vso9W8E&N1kV~Pu0=9>MR+~J<}Bc6$0h4wVxqk7NQ6L#5` zGcR(6i(KJ4x46qg`A_7#Q1^}%zS>`}AJ3Z?FL91bT;&G0xzA&s^OhC9@r#YCAOGjI zI#2rXV*dGCKkmzz|Gob)&w)Iryj1tzyvlbr?)>q--Gr9(-aYv5RrmWNjfPOK9|Jw& zS@v^)gB)goMV2_hGN(Dqc_xfs8FZ`m9^>d_H+$K~9P=FF2uC@_aZa*XKQ^M-|JaB4 LiktWEzr4S1%JL)R00)5oK>|=v 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 literal 0 HcmV?d00001 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; - } + }*/ }