Void GUIManager::Initialize()
{
    // Rendering Context
    m_pGUIContext = RenderingFn->GetScreen2DContext();

    // Backboard
    SelectMemory( TEXT("LayoutData") );
    m_pBackboardDefaultModel = New GUIBackboardModel();
    m_pBackboard = New GUIBackboard( m_pBackboardDefaultModel );
    UnSelectMemory();

    // Window map
    m_mapWindows.UseMemoryContext( GetMemoryContext(), TEXT("Scratch") );
    m_mapWindows.SetComparator( _Name_Comparator, NULL );
    m_mapWindows.Create();

    m_hWindowDepthMap.UseMemoryContext( GetMemoryContext(), TEXT("Scratch") );
    m_hWindowDepthMap.SetComparator( _Depth_Comparator, NULL );
    m_hWindowDepthMap.Create();

    // Overlay map
    m_mapOverlays.UseMemoryContext( GetMemoryContext(), TEXT("Scratch") );
    m_mapOverlays.SetComparator( _Name_Comparator, NULL );
    m_mapOverlays.Create();

    m_hOverlayDepthMap.UseMemoryContext( GetMemoryContext(), TEXT("Scratch") );
    m_hOverlayDepthMap.SetComparator( _Depth_Comparator, NULL );
    m_hOverlayDepthMap.Create();

    // Skin
    SelectMemory( TEXT("SkinData") );
    m_pSkin = New GUISkin( GUISKIN_DEFAULT );
    UnSelectMemory();

    // Message-Box
    SelectMemory( TEXT("Scratch") );
    m_pMessageBox = New GUIMessageBox();
    UnSelectMemory();
}
Exemple #2
0
int CMMDesktop::PlayLevel(CMMDirFile *levelFile, int restart)
{
	if(!(levelFile->Tags&eMMLTaccessible)) return 0;

	char *level=levelFile->LevelPath;

	if(!level) return 0;

	int ok=0;
	float x,y;
	
	if(level)
	{
		WaitForSingleObject(KRKAL->RenderReadyEvent, INFINITE);
		SetEvent(KRKAL->RenderReadyEvent);

		MMmode = 1;
		playingFile = levelFile;

		DeleteAllBackElems();
		DeleteAllFrontElems();

		mainGUI->cursor->SetVisible(0);

		CGUIStaticPicture* loading = new CGUIStaticPicture(0,0,"$TEX$/MainMenu/loading.png");
		loading->GetSize(x,y);
		
		loading->Move((screenx-x)/2,(screeny-y-10));
		AddBackElem(loading);
	
		GEnMain->AddToWindow(DXbliter->rootwnd,0);
		KRKAL->GetScreenRes(screenx,screeny);
		int gwsx,gwsy;
		gwsx=screenx;gwsy=screeny-(int)STD_GAMEMENU_HEIGHT;
		GEnMain->SetWindowPos(0,0,(float)gwsx,(float)gwsy);
		GEnMain->DeleteAll();
		GEnMain->SetTopLightDefault();

		SAFE_DELETE(KerMain);

		ok=1;

		KRKAL->ResetGameVictory(0);

		SAFE_DELETE(levelIntro);
		levelIntro = new MMLevelIntro(levelFile->LevelDir, "LevelIntro.xml", levelFile->UserName, levelFile->Author);
		if (levelIntro->WindowShown()) {
			KRKAL->PauseGame();
		} else {
			SAFE_DELETE(levelIntro);
		}

		KRKAL->Redraw();
		

		DeleteBackElem(loading);

		int showerr=0;
		int load=0;
		try{
			CGameMenu::CreateGameMenu();

			if(restart) SAFE_DELETE(KerServices.QuickSave); //kdyz restartuju tak zrusim save

			if(KerServices.QuickSave && !restart && quicksave && strcmp(level,quicksave)==0 )
			{
				//loadnu level ulozeny savepointem
				if (!KerLoadGameAndKernel("Quick Load",KerServices.QuickSave)) {
					// error nahlasim nekdy jindy...
					
					showerr=1;
					ok=0;
				}
			}else{
					//pustim level normalne od zacatku
					KerCreateKernel(NORMAL_RUN, eKerDBDebug, 0, level);				
			}
			
			if(ok)
			{
				int gsx,gsy,gpx,gpy;
				gsx=KerMain->MapInfo->rightx-KerMain->MapInfo->leftx;
				gsy=KerMain->MapInfo->righty-KerMain->MapInfo->lefty;
				gpx=0;gpy=0;
				if(gsx<gwsx) gpx=(gwsx-gsx)/2;
				if(gsy<gwsy) gpy=(gwsy-gsy)/2;
				GEnMain->SetScrollShift((float)gpx,(float)gpy);
				KerMain->MapInfo->RefreshScroll();
				//GEnMain->SetScroll((float)-KerMain->MapInfo->leftx,(float)-KerMain->MapInfo->lefty); 
				Input->DisableGameKeys(0);
			}
		}
		catch(CKernelPanic)
		{
			SAFE_DELETE(levelIntro);
			SAFE_DELETE(KerMain);
			GEnMain->DeleteAll();
			ok=0;
		}

		if(!ok) {
			ShowMainMenu();
			
			if(KerErrorFiles)
				if(KerErrorFiles->WasError) KerErrorFiles->ShowAllLogs(0,0,640,480);
			
			if(showerr==1)
				GUIMessageBox("ERROR","Error while loading - save file is invalid.",1,0xFFFF0000);
		}

	}
	
	return ok;

}