InGameMenu *InGameMenu::Create(PlayGameState *playGameState, ToolsPanel *toolsPanel) { ClassContainer *cc = ClassContainer::GetInstance(); InGameMenu *ret = new InGameMenu(); if (ret != NULL) { ret->playGameState = playGameState; ret->toolsPanel = toolsPanel; ret ->x = 0; ret ->y = 0; ret ->width = ret->resWidth; ret ->height = ret->resHeight; TexPart backTexPart = cc->GetClass<TexPart>("guimap_return_to_game_btn"); TexPart backDownTexPart = cc->GetClass<TexPart>("guimap_return_to_game_down_btn"); TexPart playAgainTexPart = cc->GetClass<TexPart>("guimap_play_again_btn"); TexPart playAgainDownTexPart = cc->GetClass<TexPart>("guimap_play_again_down_btn"); TexPart optionsTexPart = cc->GetClass<TexPart>("guimap_options_btn"); TexPart optionsDownTexPart = cc->GetClass<TexPart>("guimap_options_down_btn"); TexPart mainMenuTexPart = cc->GetClass<TexPart>("guimap_back_to_menu_btn"); TexPart mainMenuDownTexPart = cc->GetClass<TexPart>("guimap_back_to_menu_down_btn"); XMLElement *guidefPanel = cc->GetClass<XMLElement*>("guidef_InGameMenu"); XMLElement *guidefPause = guidefPanel->GetSubElement(0); float leftColumn = (float)ret->resWidth * (2.0f / 6.0f) - (backTexPart.ImageRect.Width / 2); float rightColumn = (float)ret->resWidth * (4.0f / 6.0f) - (backTexPart.ImageRect.Width / 2); float vertStep = (float)ret->resHeight * (1.0f / 8.0f); float vertShift = backTexPart.ImageRect.Height / 2 + 20; ret ->btnBack = new AnimButton(leftColumn, vertShift, backTexPart, backDownTexPart); ret ->btnPlayAgain = new AnimButton(rightColumn, vertShift += vertStep, playAgainTexPart, playAgainDownTexPart); ret ->btnOptions = new AnimButton(leftColumn, vertShift += vertStep, optionsTexPart, optionsDownTexPart); ret ->btnMainMenu = new AnimButton(rightColumn, vertShift += vertStep, mainMenuTexPart, mainMenuDownTexPart); ret ->btnPause = new AnimButton(guidefPause->GetAttributeInt("posx"), guidefPause->GetAttributeInt("posy"), cc->GetClass<TexPart>("guimap_pause"), cc->GetClass<TexPart>("guimap_pause_down")); ret ->AddChild(ret ->btnBack); ret ->AddChild(ret ->btnPlayAgain); ret ->AddChild(ret ->btnOptions); ret ->AddChild(ret ->btnMainMenu); ret ->AddChild(ret ->btnPause); ObsCast(ITouchObserver, ret ->btnBack) ->AddObserver(ret); ObsCast(ITouchObserver, ret ->btnPlayAgain) ->AddObserver(ret); ObsCast(ITouchObserver, ret ->btnOptions) ->AddObserver(ret); ObsCast(ITouchObserver, ret ->btnMainMenu) ->AddObserver(ret); ObsCast(ITouchObserver, ret ->btnPause) ->AddObserver(ret); } return ret; }
SummaryScreen *SummaryScreen::Create(ImageInfo *imgInfo, PlayGameState *playGameState) { ClassContainer *cc = ClassContainer::GetInstance(); FontRenderer *defaultFont = NULL; ClassContainer::GetInstance()->TryGetClass("defaultFont", defaultFont); SummaryScreen *ret = new SummaryScreen(); if (ret != NULL) { ret->resWidth = PixItAll::Environment::GetInstance()->GetScreenWidth(); ret->resHeight = PixItAll::Environment::GetInstance()->GetScreenHeight(); ret->imgInfo = imgInfo; ret->playGameState = playGameState; ret ->x = 0; ret ->y = 0; ret ->width = ret->resWidth; ret ->height = ret->resHeight; ret->failPosYAnim = InterpolatorFactory::CreateInterpolator<float>(InterpolatorFactory::InterpolationMethod_TCB); ret->failPosYAnim->AddKeyframe(0.0f / 3.0f, 0.0f, false); ret->failPosYAnim->AddKeyframe(0.15f / 3.0f, 0.315f, false); ret->failPosYAnim->AddKeyframe(0.28f / 3.0f, 0.643f, false); ret->failPosYAnim->AddKeyframe(0.63f / 3.0f, 0.841f, false); ret->failPosYAnim->AddKeyframe(1.03f / 3.0f, 0.903f, false); ret->failPosYAnim->AddKeyframe(1.24f / 3.0f, 0.919f, false); ret->failRotAnim = InterpolatorFactory::CreateInterpolator<float>(InterpolatorFactory::InterpolationMethod_TCB); ret->failRotAnim->AddKeyframe(0.0f / 3.0f, 0.0f, false); ret->failRotAnim->AddKeyframe(0.15f / 3.0f, 0.315f, false); ret->failRotAnim->AddKeyframe(0.28f / 3.0f, 0.643f, false); ret->failRotAnim->AddKeyframe(0.63f / 3.0f, 0.841f, false); ret->failRotAnim->AddKeyframe(1.13f / 3.0f, 0.903f, false); ret->failRotAnim->AddKeyframe(1.44f / 3.0f, 0.919f, false); TexPart btnPlayAgainTexPart = cc->GetClass<TexPart>("guimap_play_again_btn"); TexPart btnPlayAgainDownTexPart = cc->GetClass<TexPart>("guimap_play_again_down_btn"); TexPart btnNextLevelTexPart = cc->GetClass<TexPart>("guimap_next_level_btn"); TexPart btnNextLevelDownTexPart = cc->GetClass<TexPart>("guimap_next_level_down_btn"); TexPart btnBackToMenuTexPart = cc->GetClass<TexPart>("guimap_back_to_menu_btn"); TexPart btnBackToMenuDownTexPart = cc->GetClass<TexPart>("guimap_back_to_menu_down_btn"); TexPart btnPlayAgainFailTexPart = cc->GetClass<TexPart>("guimap_play_again_fail_btn"); TexPart btnPlayAgainFailDownTexPart = cc->GetClass<TexPart>("guimap_play_again_fail_down_btn"); TexPart btnBackToMenuFailTexPart = cc->GetClass<TexPart>("guimap_back_to_menu_fail_btn"); TexPart btnBackToMenuFailDownTexPart = cc->GetClass<TexPart>("guimap_back_to_menu_fail_down_btn"); TexPart statsTexPart = cc->GetClass<TexPart>("guimap_summary_stats_bg"); TexPart tpNewRecord = cc->GetClass<TexPart>("guimap_new_record"); ret->tpFailed = cc->GetClass<TexPart>("guimap_failed;("); XMLElement *guidefPanel = cc->GetClass<XMLElement*>("guidef_SummaryScreen"); XMLElement *guidefBG1 = guidefPanel->GetSubElement(0); XMLElement *guidefBG2 = guidefPanel->GetSubElement(1); XMLElement *guidefFail = guidefPanel->GetSubElement(2); XMLElement *guidefTime = guidefPanel->GetSubElement(3); XMLElement *guidefCredits = guidefPanel->GetSubElement(4); XMLElement *guidefFails = guidefPanel->GetSubElement(5); XMLElement *guidefPoints = guidefPanel->GetSubElement(6); XMLElement *guidefRecord = guidefPanel->GetSubElement(7); XMLElement *guidefStats = guidefPanel->GetSubElement(8); ret->bg1X = guidefBG1->GetAttributeInt("posxdiff"); ret->bg1Y = guidefBG1->GetAttributeInt("posydiff"); ret->bg2X = guidefBG2->GetAttributeInt("posxdiff"); ret->bg2Y = guidefBG2->GetAttributeInt("posydiff"); ret->failBottomY = guidefFail->GetAttributeInt("posybottom"); FindMostFrequentColors(imgInfo, ret->color1, ret->color2); ret->bg1 = cc->GetClass<TexPart>("guimap_summary_bg_1"); ret->bg2 = cc->GetClass<TexPart>("guimap_summary_bg_2"); ret->lblTime = new Label("Time", defaultFont, Color(43, 56, 137), guidefTime->GetAttributeInt("posx"), guidefTime->GetAttributeInt("posy")); ret->lblCredits = new Label("Credits", defaultFont, Color(43, 56, 137), guidefCredits->GetAttributeInt("posx"), guidefCredits->GetAttributeInt("posy")); ret->lblFails = new Label("Fails", defaultFont, Color(43, 56, 137), guidefFails->GetAttributeInt("posx"), guidefFails->GetAttributeInt("posy")); ret->lblPoints = new Label("Points", defaultFont, Color(43, 56, 137), guidefPoints->GetAttributeInt("posx"), guidefPoints->GetAttributeInt("posy")); ret->imgNewRecord = new Control(guidefRecord->GetAttributeInt("posx"), guidefRecord->GetAttributeInt("posy"), tpNewRecord); ret->statsControl = new Control((ret->resWidth - statsTexPart.ImageRect.Width) / 2 + guidefStats->GetAttributeInt("posxdiff"), guidefStats->GetAttributeInt("posy"), statsTexPart); ret->statsControl ->AddChild(ret ->lblTime); ret->statsControl ->AddChild(ret ->lblCredits); ret->statsControl ->AddChild(ret ->lblFails); ret->statsControl ->AddChild(ret ->lblPoints); ret->statsControl ->AddChild(ret ->imgNewRecord); ret->btnPlayAgain = new AnimButton(10, ret->resHeight - btnPlayAgainTexPart.ImageRect.Height - 6, btnPlayAgainTexPart, btnPlayAgainDownTexPart); ret->btnBackToMenu = new AnimButton((ret->resWidth - btnBackToMenuTexPart.ImageRect.Width) / 2, ret->resHeight - btnBackToMenuTexPart.ImageRect.Height - 6, btnBackToMenuTexPart, btnBackToMenuDownTexPart); ret->btnPlayAgainFail = new AnimButton(10, ret->resHeight - btnPlayAgainFailTexPart.ImageRect.Height - 6, btnPlayAgainFailTexPart, btnPlayAgainFailDownTexPart); ret->btnBackToMenuFail = new AnimButton((ret->resWidth - btnBackToMenuFailTexPart.ImageRect.Width) / 2, ret->resHeight - btnBackToMenuFailTexPart.ImageRect.Height - 6, btnBackToMenuFailTexPart, btnBackToMenuFailDownTexPart); ret->btnNextLevel = new AnimButton(ret->resWidth - btnNextLevelTexPart.ImageRect.Width - 6, ret->resHeight - btnNextLevelTexPart.ImageRect.Height - 6, btnNextLevelTexPart, btnNextLevelDownTexPart); ret->AddChild(ret->btnPlayAgain); ret->AddChild(ret->btnNextLevel); ret->AddChild(ret->btnBackToMenu); ret->AddChild(ret->btnPlayAgainFail); ret->AddChild(ret->btnBackToMenuFail); ret->AddChild(ret->statsControl); ObsCast(ITouchObserver, ret->btnPlayAgain) ->AddObserver(ret); ObsCast(ITouchObserver, ret->btnNextLevel) ->AddObserver(ret); ObsCast(ITouchObserver, ret->btnBackToMenu) ->AddObserver(ret); ObsCast(ITouchObserver, ret->btnPlayAgainFail) ->AddObserver(ret); ObsCast(ITouchObserver, ret->btnBackToMenuFail) ->AddObserver(ret); } return ret; }
MessageBox::MessageBox(const std::string &message, Buttons buttons, Color color) { ClassContainer *cc = ClassContainer::GetInstance(); XMLElement *guidefPanel = cc->GetClass<XMLElement*>("guidef_MessageBox"); XMLElement *guidefOkButton = guidefPanel->GetSubElement(0); XMLElement *guidefCancelButton = guidefPanel->GetSubElement(1); XMLElement *guidefLabelMsg = guidefPanel->GetSubElement(2); unsigned resWidth = PixItAll::Environment::GetInstance()->GetScreenWidth(); unsigned resHeight= PixItAll::Environment::GetInstance()->GetScreenHeight(); x = 0; y = 0; width = resWidth; height = resHeight; FontRenderer *defaultFont = NULL; ClassContainer::GetInstance()->TryGetClass("defaultFont", defaultFont); TexPart tpOk = cc->GetClass<TexPart>("guimap_yes"); TexPart tpOkDonw = cc->GetClass<TexPart>("guimap_yes_down"); TexPart tpCancel = cc->GetClass<TexPart>("guimap_no"); TexPart tpCancelDonw = cc->GetClass<TexPart>("guimap_no_down"); TexPart tpMsgBoxBg = cc->GetClass<TexPart>("guimap_msgbox_bg"); btnOk = NULL; btnCancel = NULL; if (buttons == Buttons_Ok || buttons == Buttons_OkCancel) { btnOk = new AnimButton(tpMsgBoxBg.ImageRect.Width - tpOk.ImageRect.Width - guidefOkButton->GetAttributeInt("posxdiff"), tpMsgBoxBg.ImageRect.Height - tpOk.ImageRect.Height - guidefOkButton->GetAttributeInt("posydiff"), tpOk, tpOkDonw); } if (buttons == Buttons_OkCancel) { btnCancel = new AnimButton(guidefCancelButton->GetAttributeInt("posxdiff"), tpMsgBoxBg.ImageRect.Height - tpCancel.ImageRect.Height - guidefCancelButton->GetAttributeInt("posydiff"), tpCancel, tpCancelDonw); } imgBg = new Control((resWidth - tpMsgBoxBg.ImageRect.Width) / 2 + 6, // +4 for shadow shift (resHeight - tpMsgBoxBg.ImageRect.Height) / 2, tpMsgBoxBg.ImageRect.Width, tpMsgBoxBg.ImageRect.Height, tpMsgBoxBg); lblText = new Label(message, defaultFont, color, guidefLabelMsg->GetAttributeInt("posx"), guidefLabelMsg->GetAttributeInt("posy")); imgBg->AddChild(lblText); if (btnOk != NULL) { imgBg->AddChild(btnOk); ObsCast(ITouchObserver, btnOk)->AddObserver(this); } if (btnCancel != NULL) { imgBg->AddChild(btnCancel); ObsCast(ITouchObserver, btnCancel)->AddObserver(this); } AddChild(imgBg); }
SelectLevelPanel *SelectLevelPanel::Create(SelectLevelGameState *selLvlState, ImagesCollection *imgColl) { ClassContainer *cc = ClassContainer::GetInstance(); FontRenderer *defaultFont = NULL; ClassContainer::GetInstance()->TryGetClass("defaultFont", defaultFont); SelectLevelPanel *ret = new SelectLevelPanel(); if (ret != NULL) { ret->resWidth = PixItAll::Environment::GetInstance()->GetScreenWidth(); ret->resHeight = PixItAll::Environment::GetInstance()->GetScreenHeight(); ret->selLvlGameState = selLvlState; ret->imgColl = imgColl; ret ->x = 0; ret ->y = 0; ret ->width = ret->resWidth; ret ->height = ret->resHeight; sm::Rect<int> bgBounds; sm::Rect<int> visitBtnBounds; sm::Rect<int> imgBgBounds; ret->bg = cc ->GetClass<TexPart>("guimap_main_menu_bg"); ret->imgBg = cc ->GetClass<TexPart>("guimap_img_bg"); TexPart backTexPart = cc->GetClass<TexPart>("guimap_back_btn"); TexPart backDownTexPart = cc->GetClass<TexPart>("guimap_back_down_btn"); TexPart padlock = cc->GetClass<TexPart>("guimap_padlock"); TexPart tpResolved = cc->GetClass<TexPart>("guimap_lvl_resolved"); TexPart tutRibbon = cc->GetClass<TexPart>("guimap_tut_tutorial_ribbon"); ret->lvlInfoBg = cc->GetClass<TexPart>("guimap_lvl_info_bg"); XMLElement *guidefPanel = cc->GetClass<XMLElement*>("guidef_SelectLevelPanel"); XMLElement *guidefLevelInfoBg = guidefPanel->GetSubElement(0); XMLElement *guidefLabelTitle = guidefPanel->GetSubElement(1); XMLElement *guidefLabelPoints = guidefPanel->GetSubElement(2); XMLElement *guidefLabelRes = guidefPanel->GetSubElement(3); XMLElement *guidefFillRectSize = guidefPanel->GetSubElement(4); unsigned distanceBetweenImages = guidefPanel->GetAttributeInt("img_dist"); ret->lvlInfoYShift = guidefLevelInfoBg->GetAttributeInt("posy"); ret->btnBack = new AnimButton(10, ret->resHeight - backTexPart.ImageRect.Height - 6, backTexPart, backDownTexPart); ret->lblTitle = new Label("Title", defaultFont, Color(43, 56, 137), 100, guidefLabelTitle->GetAttributeInt("posy")); ret->lblPoints = new Label("Points", defaultFont, Color(43, 56, 137), 100, guidefLabelPoints->GetAttributeInt("posy")); ret->lblRes = new Label("Res", defaultFont, Color(43, 56, 137), 100, guidefLabelRes->GetAttributeInt("posy")); ret->AddChild(ret->btnBack); ret->AddChild(ret->lblTitle); ret->AddChild(ret->lblPoints); ret->AddChild(ret->lblRes); ObsCast(ITouchObserver, ret->btnBack)->AddObserver(ret); sm::Point<float> fillRectSize(guidefFillRectSize->GetAttributeInt("width"), guidefFillRectSize->GetAttributeInt("height")); int basePos = 0; std::list<ImageInfo*> &imgInfoList = imgColl->GetImages(); std::list<ImageInfo*>::iterator it; for (it = imgInfoList.begin(); it != imgInfoList.end(); it++) { ImageScrollElement *imgScrollEl = new ImageScrollElement((*it), sm::Vec2(basePos, 0), fillRectSize, spriteBatch, ret->imgBg, padlock, tpResolved, tutRibbon); ret->imagesScrollElements.push_back(imgScrollEl); basePos += distanceBetweenImages + imgScrollEl->GetTotalWidth(); ret->AddChild(imgScrollEl); ObsCast(ITouchObserver, imgScrollEl) ->AddObserver(ret); } } std::list<ImageScrollElement*>::iterator actImgIt = ret->GetFirstUnlockedUnresolvedLevel(); ret->actImg = (*actImgIt); ret->SetActiveImage(actImgIt); ret->RefreshImageInfo(); return ret; }