Пример #1
0
void game::MainLoop()
{
	// init steam we need to initialize this before the renderer for the overlay.
	{
		gSteam.InitSteam();
		if(gSteam.steamID) {
			gUserProfile.RegisterSteamCallbacks();
		}
	}


	InitRender(1);

	CurRenderPipeline = new r3dDefferedRenderer;
	CurRenderPipeline->Init();

	SetFocus(win::hWnd);

	r3dMenuInit();

	r3dParticleSystemInit();

	InitDesktopSystem();

	InitPostFX();
	InitPointLightsRendererV2();

	g_pWind = new r3dWind ;

	g_pEngineConsole = new EngineConsole;
	g_pDefaultConsole = g_pEngineConsole;
	g_pEngineConsole->Init();
	g_pEngineConsole->SetCommandProcessor( g_pCmdProc );

	g_DamageLib = new DamageLib ;
	g_DamageLib->Load();

	g_MeshPropertyLib = new MeshPropertyLib;

#ifndef FINAL_BUILD
	g_Manipulator3d.Init();

	// show non-level specific art bugs
	r3dShowArtBugs() ;
#endif

	g_cursor_mode->SetChangeCallback( &CursorModeCallback ) ;

	_r3d_bTerminateOnZ = r_terminateOnZ->GetInt();

	// set dynamic matlib by default.
	// make it statis only in GAME mode
	r3dMaterialLibrary::IsDynamic = true;

	imgui_SetFixMouseCoords( false );


#ifdef FINAL_BUILD
	int m_ret = Menu_AppSelect::bStartGamePublic; // start game
#else
	int m_ret = 0;
	if ( *d_map_force_load->GetString() || LevelEditName[0]!='\0' )
		m_ret = Menu_AppSelect::bStartLevelEditor;
	else
		CALL_MENU(Menu_AppSelect);
#endif

#ifndef FINAL_BUILD
	// all choises is editors by default
	g_bEditMode = true;
	g_bStartedAsParticleEditor = false;
#endif

	void InitGrass();
	InitGrass();

	g_pHUDCameraEffects = new HUDCameraEffects ;

	r3d_assert(g_pWeaponArmory == NULL);
	g_pWeaponArmory = new ClientWeaponArmory();
	g_pWeaponArmory->Init();
	r3dShowArtBugs();

	// for editors, do not lock mouse. when we start game, in ExecuteNetworkGame we will set that var to true
	d_mouse_window_lock->SetBool(false);

	switch (m_ret)
	{
#ifndef FINAL_BUILD
	case Menu_AppSelect::bUpdateDB:
		g_bEditMode = false;
		UpdateDB("198.50.211.32", "Data/Weapons/itemsDB.xml");
		MessageBox(0, "Successfully updated English DB!", "Result", MB_OK);
		break;
	case Menu_AppSelect::bStartLevelEditor:
		g_pVisibilityGrid = new VisibiltyGrid ;
		ExecuteLevelEditor();
		break;

	case Menu_AppSelect::bStartParticleEditor:
		g_bStartedAsParticleEditor = true;
		ExecuteParticleEditor();
		break;
	case Menu_AppSelect::bStartPhysicsEditor:
		ExecutePhysicsEditor();
		break;
	case Menu_AppSelect::bStartCharacterEditor:
		ExecuteCharacterEditor();
		break;
#endif
	case Menu_AppSelect::bStartGamePublic:
		// override server settings if special key isn't set
		if(strstr(__r3dCmdLine, "-ffgrtvzdf") == NULL)
		{
			// hardcoded IP for now
			//g_serverip->SetString("127.0.0.1");
		}

		// override API settings
		g_api_ip->SetString("198.50.211.32"); // external
		g_serverip->SetString("198.50.211.32"); // external
		g_bEditMode = false;
		ExecuteNetworkGame();
		break;
	};

#ifndef FINAL_BUILD
	if( g_bEditMode )
	{
		SAFE_DELETE( g_pVisibilityGrid );
	}
#endif

	// shutdown steam
	if(gSteam.inited_) {
		gUserProfile.DeregisterSteamCallbacks();
		gSteam.Shutdown();
	}

	SAFE_DELETE( g_pWind ) ;

	r3dMaterialLibrary::UnloadManaged();
	r3dMaterialLibrary::Reset();	
	MeshGlobalBuffer::unloadManaged();

	g_pWeaponArmory->Destroy();
	SAFE_DELETE(g_pWeaponArmory);

#ifndef FINAL_BUILD
	g_Manipulator3d.Close();
#endif

	r3dMenuClose();

	AI_Player_FreeStuff();

	SAFE_DELETE( g_pHUDCameraEffects ) ;

	SAFE_DELETE( g_GameRewards );

	void CloseGrass();
	CloseGrass();

	DestroyPointLightsRendererV2();

	ClosePostFX();

	SAFE_DELETE( g_DamageLib );
	SAFE_DELETE( g_MeshPropertyLib );

	r3dFreeGOBMeshes();

	obj_Zombie::FreePhysSkeletonCache();

	g_pEngineConsole->Release();
	SAFE_DELETE( g_pEngineConsole );

	g_pDefaultConsole = NULL;

	ReleaseDesktopSystem();

	DoneDrawCollections();

	r3dParticleSystemClose();
	CurRenderPipeline->Close();
	SAFE_DELETE(CurRenderPipeline);

	r3dMaterialLibrary::Destroy();

	CloseRender();

	if(gSurveyOutLink)
		ShellExecute(NULL, "open", gSurveyOutLink, "", NULL, SW_SHOW);

	/*r3dOutToLog("HackShield : UnInitialize...\n");
	_AhnHS_StopService();
	_AhnHS_Uninitialize();*/
	HMODULE hMod;
	hMod = LoadLibrary(TEXT("WGCrash.dll"));
	//HackCheck _HackCheck;
	//_HackCheck = (HackCheck)GetProcAddress(hMod,"DetachProcess");
	//_HackCheck();
	FreeLibrary(hMod);
	TerminateProcess(GetCurrentProcess(),-1);
	return;
}
Пример #2
0
CAudioRender::~CAudioRender(void)
{
	CloseRender();
}