Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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;
}