void closeMenu()
	{
		openedMenus.pop();
		int menu = openedMenus.empty()?0:openedMenus.top();
		
		activeMenu->applyChanges();

		delete activeMenu;
		activeMenu = NULL;

		if( hidePreviouslyOpenedMenus )
		{
			if ( !openedMenus.empty() )
			{
				activeMenu = menuFactory( menu );
				activeMenu->show();
				assert( foreground );
				foreground->Raise();
			}
		}
		else
		{
			activeMenu = openedMenusData.empty()?NULL:openedMenusData.top();
			if (!openedMenusData.empty())
				openedMenusData.pop();

			if( activeMenu ) 
				activeMenu->show();
			assert( foreground );
			foreground->Raise();
		}
	}
	void openMenu( int menu )
	{
		ogui->SetCursorImageState( 0, DH_CURSOR_ARROW );

		if( activeMenu && hidePreviouslyOpenedMenus ) 
		{
			activeMenu->hide();
			delete activeMenu;
		}
		
		if( activeMenu && hidePreviouslyOpenedMenus == false )
		{
			openedMenusData.push( activeMenu );
		}

		if( activeMenu && raiseLowerMenu )
		{
			IMenuBase* temp = activeMenu;
			activeMenu = menuFactory( menu );
			temp->raise();
		}
		else
		{
			activeMenu = menuFactory( menu );
		}
		
		assert( foreground );
		foreground->Raise();
		
		openedMenus.push( menu );
		activeMenu->show();
	}
	void showWindowAt(int x, int y)
	{
		window->MoveTo(x - 5, y - 5);
		window->Show();
		isVisible = true;
		closedAck = false;

		if (game::SimpleOptions::getBool(DH_OPT_B_MENU_AUTOPAUSE))
		{
			// Pause game
			if(!game.isTacticalMode())
			{
				gameWasRunning = true;
				game.gameUI->setPointersChangedFlag(game.singlePlayerNumber);
			}
			else
				gameWasRunning = false;

			game.setTacticalMode(true);
		}

		// TODO: client number
		game::SceneSelection *sel = game.gameUI->getSceneSelection(0);

		clickPosition = VC3(sel->scaledMapX, 
			game.gameMap->getScaledHeightAt(sel->scaledMapX, sel->scaledMapY), 
			sel->scaledMapY);

		if (game::SimpleOptions::getBool(DH_OPT_B_MENU_TWO_CLICK))
		{
			// TODO: correct player...
			if (sel->unit != NULL
				&& sel->unit->visibility.isSeenByPlayer(game.singlePlayerNumber))
			{
				game.gameUI->setUnitHighlight(game.singlePlayerNumber, sel->unit);
			} else {
				game.gameUI->setTerrainHighlight(game.singlePlayerNumber, clickPosition);
			}
			game.gameUI->lockHighlight(game.singlePlayerNumber);
		}
	}
	void changeMenu( int menu )
	{	
		openedMenus.pop();
		delete activeMenu;
		activeMenu = NULL;

		IMenuBase *lower_menu = openedMenusData.empty()?NULL:openedMenusData.top();

		activeMenu = menuFactory( menu );
		
		if(raiseLowerMenu && lower_menu) lower_menu->raise();
		
		assert( foreground );
		foreground->Raise();

		openedMenus.push( menu );
		activeMenu->show();
	}
	bool isVisible() const
	{
		return true;
		if ( activeMenu )	return activeMenu->isVisible();
		else				return background->IsVisible();	
	}
	void show()
	{
		background->Show();
		if( activeMenu ) activeMenu->show();
		foreground->Show();
	}
	void hide()
	{
		background->Hide();
		if( activeMenu ) activeMenu->hide();
		foreground->Hide();
	}
	MenuCollectionImpl( MenuCollection* self, Ogui* ogui, Game* game, int player ) :
	  self( self ),
	  ogui( ogui ),
	  game( game ),
	  activeMenu( NULL ),
	  backgroundVideo( NULL ),
	  backgroundButton( NULL ),
	  backgroundButtonData( NULL ),
	  logoButton( NULL ),
	  logoVideo( NULL ),
	  videoButton( NULL ),
	  background( NULL ),
	  foreground( NULL ),
	  transparency( 100 ),
	  fadeIn( true ),
		backgroundAlternativeFader( NULL ),
		backgroundAlternativeButton( NULL )
	{
		background = ogui->CreateSimpleWindow(	getLocaleGuiInt( "gui_menu_background_x", 0 ), 
												getLocaleGuiInt( "gui_menu_background_y", 0 ), 
												getLocaleGuiInt( "gui_menu_background_w", 1 ), 
												getLocaleGuiInt( "gui_menu_background_h", 1 ), 
												getLocaleGuiString( "gui_menu_background_img" ) );

		const char *alternatives_str = NULL;
		if(DHLocaleManager::getInstance()->getString(DHLocaleManager::BANK_GUI, "gui_menu_background_alternatives", &alternatives_str))
		{
			int alternatives = atoi(alternatives_str);
			if(alternatives > 0)
			{
				backgroundAlternativeButton = ogui->CreateSimpleImageButton(background,
					getLocaleGuiInt("gui_menu_background_alternatives_x", 0), getLocaleGuiInt("gui_menu_background_alternatives_y", 0),
					getLocaleGuiInt("gui_menu_background_alternatives_w", 0), getLocaleGuiInt("gui_menu_background_alternatives_h", 0),
					NULL, NULL, NULL, NULL, 0, NULL, false);
				backgroundAlternativeButton->SetDisabled(true);

				backgroundAlternativeFader = ogui->CreateSimpleImageButton(background,
					getLocaleGuiInt("gui_menu_background_alternatives_x", 0), getLocaleGuiInt("gui_menu_background_alternatives_y", 0),
					getLocaleGuiInt("gui_menu_background_alternatives_w", 0), getLocaleGuiInt("gui_menu_background_alternatives_h", 0),
					NULL, NULL, NULL, NULL, 0, NULL, false);
				backgroundAlternativeFader->SetDisabled(true);

				backgroundAlternatives.resize(alternatives);
				for(int i = 0; i < alternatives; i++)
				{
					std::string prefix = "gui_menu_background_alt" + boost::lexical_cast<std::string>(i);
					backgroundAlternatives[i].img = ogui->LoadOguiImage( getLocaleGuiString( (prefix+"_img").c_str() ) );
					backgroundAlternatives[i].time = getLocaleGuiInt( (prefix+"_time").c_str() , 0 );
					backgroundAlternatives[i].fade = getLocaleGuiInt( (prefix+"_fade").c_str() , 0 );
				}

				backgroundAlternativeButton->SetDisabledImage(backgroundAlternatives[0].img);
				currentBackgroundAlternative = 0;
				previousBackgroundAlternative = 0;
				lastBackgroundAlternativeSwitch = Timer::getTime();
			}
		}
	
		foreground = ogui->CreateSimpleWindow(	getLocaleGuiInt( "gui_menu_foreground_x", 0 ), 
												getLocaleGuiInt( "gui_menu_foreground_y", 0 ), 
												getLocaleGuiInt( "gui_menu_foreground_w", 1 ), 
												getLocaleGuiInt( "gui_menu_foreground_h", 1 ), 
												getLocaleGuiString( "gui_menu_foreground_img" ) );
		foreground->SetReactMask( 0 );
		
		


		videoButton = ogui->CreateSimpleImageButton( background, 
							getLocaleGuiInt( "gui_menu_video_x", 0 ), getLocaleGuiInt( "gui_menu_video_y", 0 ),
							getLocaleGuiInt( "gui_menu_video_w", 1024 ), getLocaleGuiInt( "gui_menu_video_h", 768 ), NULL, NULL, NULL );
		videoButton->SetDisabled( true );

		backgroundButton = ogui->CreateSimpleImageButton( background, 0, 0, 1024, 768, NULL, NULL, NULL );
		backgroundButton->SetDisabled( true );

		background->Hide();
		foreground->Hide();
		background->SetUnmovable();
		foreground->SetUnmovable();

		ogui->SetCursorImageState( 0, DH_CURSOR_ARROW );

		fonts.big.normal =			ogui->LoadFont( getLocaleGuiString( "gui_menu_font_big" ) );
		fonts.medium.normal =		ogui->LoadFont( getLocaleGuiString( "gui_menu_font_medium" ) );
		fonts.medium.highlighted =	ogui->LoadFont( getLocaleGuiString( "gui_menu_font_medium_high" ) );
		fonts.little.normal =		ogui->LoadFont( getLocaleGuiString( "gui_menu_font_little" ) );
		fonts.little.highlighted =	ogui->LoadFont( getLocaleGuiString( "gui_menu_font_little_high" ) );

		

		background->StartEffect( OGUI_WINDOW_EFFECT_FADEIN, 3000 );
		foreground->StartEffect( OGUI_WINDOW_EFFECT_FADEIN, 3000 );

		if( game->inCombat == false )
			transparencyFadeSpeed = 50.0f;
		else transparencyFadeSpeed = 20.0f;
		
		const int menu_to_be_opened = MenuCollection::MENU_TYPE_MAINMENU;
		openMenu( menu_to_be_opened );
	}
	void LoadingMessage::renderLoadingMessage()
	{
		assert(storm3d != NULL);
#ifdef LEGACY_FILES
		OguiWindow *win = ogui->CreateSimpleWindow(0,0,1024,768,"Data/GUI/Windows/loadingmsg.tga");
#else
		OguiWindow *win = ogui->CreateSimpleWindow(0,0,1024,768,"data/gui/common/window/loadingmsg.tga");
#endif

#ifdef PROJECT_SURVIVOR
		if(loading_message.empty())
			win->setBackgroundImage(NULL);
#endif
		OguiTextLabel *txt_msg = ogui->CreateTextLabel(win, 0, 768/2, 1024, 32, "");

		txt_msg->SetTextHAlign(OguiButton::TEXT_H_ALIGN_CENTER);
		txt_msg->SetTextVAlign(OguiButton::TEXT_V_ALIGN_MIDDLE);
		if (ui::defaultBigIngameFont == NULL)
			txt_msg->SetFont(ui::defaultFont);
		else
			txt_msg->SetFont(ui::defaultBigIngameFont);
		txt_msg->SetText(loading_message.c_str());

		OguiButton *bar_bg = NULL;
		OguiTextLabel *bar_num = NULL;
		OguiTextLabel *bar_txt = NULL;
		OguiButton *bar = NULL;

		if(loading_bar_value != -1)
		{

			int x = game::getLocaleGuiInt("gui_loadingbar_x",0);
			int y = game::getLocaleGuiInt("gui_loadingbar_y",0);
			int w = game::getLocaleGuiInt("gui_loadingbar_w",0);
			int h = game::getLocaleGuiInt("gui_loadingbar_h",0);
			bar_bg = ogui->CreateSimpleImageButton(win, x, y, w, h, game::getLocaleGuiString("gui_loadingbar_background"), NULL, NULL, 0);
			
			bar = ogui->CreateSimpleImageButton(win, x, y, loading_bar_value * w / 100, h, game::getLocaleGuiString("gui_loadingbar_foreground"), NULL, NULL, 0);

			bar_num = ogui->CreateTextLabel(win, x, y, w, h, "");
			std::string text = int2str(loading_bar_value) + std::string("%");
			bar_num->SetFont(ui::defaultIngameFont);
			bar_num->SetTextHAlign(OguiButton::TEXT_H_ALIGN_CENTER);
			bar_num->SetTextVAlign(OguiButton::TEXT_V_ALIGN_MIDDLE);
			bar_num->SetText(text.c_str());

			bar_txt = ogui->CreateTextLabel(win, x, y, w, h, "");
			bar_txt->SetFont(ui::defaultIngameFont);
			bar_txt->SetTextHAlign(OguiButton::TEXT_H_ALIGN_LEFT);
			bar_txt->SetTextVAlign(OguiButton::TEXT_V_ALIGN_MIDDLE);
			bar_txt->SetText(loading_bar_text.c_str());			
		}

		win->Raise();

		// HACK!
		std::vector<bool> oldValues;
		if(scene->ITTerrain)
		{
			IteratorIM_Set<IStorm3D_Terrain*> it = *(IteratorIM_Set<IStorm3D_Terrain*>*)scene->ITTerrain->Begin();
			while(!it.IsEnd())
			{
				IStorm3D_Terrain *terrain = it.GetCurrent();
				oldValues.push_back(terrain->getRenderer().enableFeature(IStorm3D_TerrainRenderer::RenderTargets, false ));
				it.Next();
			}
		}
		
		ogui->Run(1);
		scene->RenderScene();

		if(scene->ITTerrain)
		{
			unsigned int i = 0;
			IteratorIM_Set<IStorm3D_Terrain*> it = *(IteratorIM_Set<IStorm3D_Terrain*>*)scene->ITTerrain->Begin();
			while(!it.IsEnd() && i < oldValues.size())
			{
				IStorm3D_Terrain *terrain = it.GetCurrent();
				terrain->getRenderer().enableFeature(IStorm3D_TerrainRenderer::RenderTargets, oldValues[i] );
				it.Next();
				i++;
			}
		}


		delete bar;
		delete bar_txt;
		delete bar_num;
		delete bar_bg;
		delete txt_msg;
		delete win;
	}
Exemple #10
0
	void initVideos()
	{
		
		bool video_enabled = GameOptionManager::getInstance()->getOptionByName( "menu_video_enabled" )? GameOptionManager::getInstance()->getOptionByName( "menu_video_enabled" )->getBooleanValue() : true;

		if( video_enabled && game->inCombat && videoDisabledDuringGame )
			video_enabled = false;

		sfx::SoundMixer *mixer = game->gameUI->getSoundMixer();
		IStorm3D_StreamBuilder *builder = 0;
		if(mixer)
			builder = mixer->getStreamBuilder();

		if( video_enabled )
			backgroundVideo = ogui->LoadOguiVideo( getLocaleGuiString( "gui_menu_video_video" ), builder );
		
		if( backgroundVideo == NULL )
		{
			// background->setBackgroundImage( );
			backgroundVideo = ogui->LoadOguiImage( getLocaleGuiString( "gui_menu_video_image" ) );
		}

#ifdef PROJECT_SHADOWGROUNDS
		float normal_aspect = (background->GetSizeX() * ogui->GetScaleX()) / (float)(background->GetSizeY() * ogui->GetScaleY());

		float video_aspect = (float)atof( getLocaleGuiString("gui_menu_video_video_aspect") );

		float texcoord_multiplier = (video_aspect / normal_aspect);
		float texcoord_offset = (1.0f - texcoord_multiplier) * 0.5f;

		float xm = 0.0f, ym = 0.0f;
		OguiStormImage* bv = (OguiStormImage*)backgroundVideo;
		if (bv->video != NULL)
		{
			bv->video->getTextureCoords(xm, ym);
			if(texcoord_multiplier > 1.0f)
			{
				videoButton->SetRepeat(xm, texcoord_multiplier * ym);
				videoButton->SetScroll(0.0f, texcoord_offset);
			}
		}
#endif

		videoButton->SetDisabledImage( backgroundVideo );

		{
			bool playLogoVideo = GameOptionManager::getInstance()->getOptionByName( "menu_logo_video_enabled" )? GameOptionManager::getInstance()->getOptionByName( "menu_logo_video_enabled" )->getBooleanValue() : true;
			OguiButton* button;
			button = ogui->CreateSimpleImageButton( foreground, 
													getLocaleGuiInt( "gui_menu_logo_x", 0 ), 
													getLocaleGuiInt( "gui_menu_logo_y", 0 ),
													getLocaleGuiInt( "gui_menu_logo_w", 1 ),
													getLocaleGuiInt( "gui_menu_logo_h", 1 ), 
													NULL, NULL, NULL, 0 );

			if( ( video_enabled || playLogoVideoAlways ) && playLogoVideo )
				logoVideo = ogui->LoadOguiVideo( getLocaleGuiString( "gui_menu_logo_video" ), builder );
			
			if( logoVideo == NULL ) 
				logoVideo = ogui->LoadOguiImage( getLocaleGuiString( "gui_menu_logo_img" ) );

#ifdef PROJECT_SHADOWGROUNDS
			normal_aspect = (button->GetSizeX() * ogui->GetScaleX()) / (float)(button->GetSizeY() * ogui->GetScaleY());
			video_aspect = (float)atof( getLocaleGuiString("gui_menu_logo_video_aspect") );

			texcoord_multiplier = (video_aspect / normal_aspect);
			texcoord_offset = (1.0f - texcoord_multiplier) * 0.5f;

			OguiStormImage* lv = (OguiStormImage*)logoVideo;
			if (lv->video != NULL)
			{
				lv->video->getTextureCoords(xm, ym);
				if(texcoord_multiplier > 1.0f)
				{
					button->SetRepeat(xm, texcoord_multiplier * ym);
					button->SetScroll(0.0f, texcoord_offset);
				}
			}
#endif

			button->SetDisabled( true );
			button->SetDisabledImage( logoVideo );

			logoButton = button;
		}
	}