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(); }
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; }