Example #1
0
void FileChangeMonitor::Update()
{


	for (uint32 k=0; k < m_changes.size(); ++k)
	{
		gkNormalizePath(m_changes[k]);
		for (uint32 i=0; i < m_listeners.size(); ++i)
		{
			if (m_listeners[i] != NULL)
			{
				m_listeners[i]->OnFileChange(m_changes[k].c_str());
			}
		}
	}



	m_changes.clear();
}
Example #2
0
bool gkPak::checkPakFile(const TCHAR* pszRelFilename)
{
	// NORMALIZE THE FILENAME
	gkStdString finalpath(pszRelFilename);
	gkNormalizePath( finalpath );

	// UNICODE SHOULD TRANSLATE
#ifdef UNICODE
	char buffer[MAX_PATH];
	WideCharToMultiByte(CP_ACP, 0,  finalpath.c_str(), -1, buffer, MAX_PATH, NULL, NULL);
	uint32 crc32 = gkPak::s_crcGenerator.GetCRC32Lowercase( buffer );
#else
	uint32 crc32 = gkPak::s_crcGenerator.GetCRC32Lowercase( finalpath.c_str() );
#endif

	gkPakRecordMap::iterator it =  m_pakMap.find( crc32 );

	if ( it != m_pakMap.end() )
	{
		return true;
	}

	return false;
}
Example #3
0
bool gkPak::openPakFile( const TCHAR* pszRelFilename, char** pData, size_t &size )
{
	// NORMALIZE THE FILENAME
	gkStdString finalpath(pszRelFilename);
	gkNormalizePath( finalpath );

	// UNICODE SHOULD TRANSLATE
#ifdef UNICODE
	char buffer[MAX_PATH];
	WideCharToMultiByte(CP_ACP, 0,  finalpath.c_str(), -1, buffer, MAX_PATH, NULL, NULL);
	uint32 crc32 = gkPak::s_crcGenerator.GetCRC32Lowercase( buffer );
#else
	uint32 crc32 = gkPak::s_crcGenerator.GetCRC32Lowercase( finalpath.c_str() );
#endif

	gkPakRecordMap::iterator it =  m_pakMap.find( crc32 );
	
	if ( it != m_pakMap.end() )
	{
		// 如果size不为0, 这里就是读文件头 [3/24/2013 Kaiming]
		bool readHeader = true;
		if (size == 0)
		{
			readHeader = false;
		}

		if ( size == 0 || size > it->second.size)
		{
			size = it->second.size;
		}

		// read the data
		char* pTmp = new char[size];

		//////////////////////////////////////////////////////////////////////////
		// 文件操作,加锁
		{
			gkAutoLock<gkCritcalSectionLock> lock(eLGID_global, eLID_file_seek );
			// find it
			fseek(m_handle, m_pakHeader.m_data_offset + it->second.start, SEEK_SET);
		}


		size_t BytesRead = fread(pTmp, 1, size, m_handle);
		//fseek(m_handle, 0, SEEK_SET);
		
		//////////////////////////////////////////////////////////////////////////

		if (BytesRead != size)
		{
		 	delete [] pTmp;
		 	size = 0;
		}
		else if (readHeader)
		{
			// 读文件头,直接返回了
			*pData = pTmp;
			return true;
		}
		else
		{			// 读取到了一个文件的数据,判断是否经过压缩 [3/7/2013 Kaiming]
			if (it->second.compressHeaderSize != 0)
			{
				float decompress_start = gEnv->pTimer->GetAsyncCurTime();


				char* pTmpUnCompressed = new char[it->second.compressHeaderSize];
				size_t unCompressedSize = it->second.compressHeaderSize - GKPAK_UNCOMPRESS_HEADER_SIZE;
				size_t realSize = size - LZMA_PROPS_SIZE - GKPAK_UNCOMPRESS_HEADER_SIZE;

				// 前1KB是不压缩的
				// | UNCOMPRESS 1024  | HEADER | COMPRESSED

				memcpy( pTmpUnCompressed, pTmp, GKPAK_UNCOMPRESS_HEADER_SIZE);

				//ELzmaStatus status;
				//SRes res = LzmaDecode((unsigned char*)pTmpUnCompressed, &unCompressedSize, (unsigned char*)(pTmp + LZMA_PROPS_SIZE), &realSize, (unsigned char*)pTmp, LZMA_PROPS_SIZE, LZMA_FINISH_END, &status, &g_Alloc);
				SRes res = LzmaUncompress( (unsigned char*)pTmpUnCompressed + GKPAK_UNCOMPRESS_HEADER_SIZE, &unCompressedSize, (unsigned char*)(pTmp + LZMA_PROPS_SIZE + GKPAK_UNCOMPRESS_HEADER_SIZE), &realSize, (unsigned char*)pTmp + GKPAK_UNCOMPRESS_HEADER_SIZE, LZMA_PROPS_SIZE );
				if (res == SZ_OK && (unCompressedSize + GKPAK_UNCOMPRESS_HEADER_SIZE) == it->second.compressHeaderSize)
				{
					*pData = pTmpUnCompressed;
					size = unCompressedSize + GKPAK_UNCOMPRESS_HEADER_SIZE;

					delete[] pTmp;
				}
				else
				{
					*pData = pTmp;
					delete[] pTmpUnCompressed;
				}

				decompress_start = gEnv->pTimer->GetAsyncCurTime() - decompress_start;

#ifdef OS_WIN32
				uint32 threadid = ::GetCurrentThreadId();
				if ( threadid == gEnv->pSystemInfo->mainThreadId)
				{
					gkLogMessage( _T("thread[main] lzma-dec [%s] using %.2fms"), finalpath.c_str(), decompress_start * 1000);
				}
				else
				{
					gkLogMessage( _T("thread[%d] lzma-dec [%s] using %.2fms"), threadid, finalpath.c_str(), decompress_start * 1000);
				}
#endif				
								
			}
			else
			{
				*pData = pTmp;
			}		 	
			return true;
		}
	}
	else
	{
		return false;
	}




	return false;
}
Example #4
0
bool gkSystem::Init( ISystemInitInfo& sii )
{
	gkLogMessage(_T("Initializing gkSystem..."));
    
    std::vector<gkStdString> result;

	gkStdString path;

#ifdef OS_IOS
    path = gkGetExecRootDir();
#else
	path = gkGetExecRootDir() + _T("paks/");
#endif

	enum_all_files_in_folder(path.c_str(), result, false);

    for (int i=0; i < result.size(); ++i) {

		gkStdString file = result[i];

		const TCHAR* strLastSlash = _tcsrchr( file.c_str(), _T( '.' ) );
		if( strLastSlash )
		{
			if ( !_tcsicmp( strLastSlash, _T(".gpk") ) )
			{
				gkNormalizePath(file);
				gkStdString filename = gkGetFilename( file.c_str() );

#ifdef OS_IOS
				
#else
				file = _T("/paks") + file;
#endif

				gkLogMessage( _T("pak file [%s] loaded."), filename.c_str() );
				m_ResFileManager.openPak( file.c_str() );
			}
		}
    }
    
    

#ifdef OS_WIN32
	m_fileMonitor = new FileChangeMonitor();
	m_fileMonitor->StartMonitor();
	gEnv->pFileChangeMonitor = m_fileMonitor;
#endif
	m_bEditor = (sii.hInstance != 0);

	//CrashRptHead();

	m_bIsSceneEmpty = true;

	/************************************************************************/
	/* Module Loading
	/************************************************************************/
#ifdef WIN32
	TCHAR wszRenderDll[MAX_PATH] = _T("gkRendererD3D9");

	if (!IsEditor())
	{
		gkStdString cfgfile = gkGetExecRootDir() + _T("media/config/startup.cfg");
		GetPrivateProfileString( _T("launcher"), _T("renderer"), _T("gkRendererD3D9"), wszRenderDll, MAX_PATH, cfgfile.c_str() );
	}
#else 
	TCHAR wszRenderDll[MAX_PATH] = _T("gkRendererGLES2");
#endif

#ifndef _STATIC_LIB
	if ( !_tcsicmp( wszRenderDll, _T("gkRendererD3D9") ))
	{
		LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererD3D9 );
	}
	else if (  !_tcsicmp( wszRenderDll, _T("gkRendererGLES2") ) )
	{
		LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererGLES2 );
	}
	else if (  !_tcsicmp( wszRenderDll, _T("gkRendererGL330") ) )
	{
		LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererGL330 );
	}
#else
	//LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererGLES2 );
#ifdef OS_APPLE
    LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererGL330 );
#elif defined( OS_IOS )
    LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererGLES2 );
#else
	LOAD_MODULE_GLOBAL( m_moduleHandles.hRenderer, gkRendererD3D9 );
#endif
    
#endif
	

	LOAD_MODULE_GLOBAL(m_moduleHandles.h3DEngine, gkCore);
	gEnv->p3DEngine->Init();


	LOAD_MODULE_GLOBAL(m_moduleHandles.hInputLayer, gkInput);

	//LoadLib(m_moduleHandles.hNetworkLayer,		_T("gkNetwork"));


	//////////////////////////////////////////////////////////////////////////
	// load physics module
#ifndef MUTE_PHYSICS
#	ifdef WIN32
	TCHAR wszPhysicDll[MAX_PATH] = _T("");

	gkStdString cfgfile = gkGetExecRootDir() + _T("media/config/startup.cfg");
	GetPrivateProfileString( _T("launcher"), _T("physicsengine"), _T(""), wszPhysicDll, MAX_PATH, cfgfile.c_str() );
#	else 
	TCHAR wszPhysicDll[MAX_PATH] = _T("gkHavok");
#	endif // WIN32

#	ifndef _STATIC_LIB
	gkLoadModule( m_moduleHandles.hPhysics, wszPhysicDll );
#	else
	//LOAD_MODULE_GLOBAL( m_moduleHandles.hPhysics, gkHavok );
#	endif // _STATIC_LIB

#endif // MUTE_PHYSICS    
	//////////////////////////////////////////////////////////////////////////


	//////////////////////////////////////////////////////////////////////////
	// load animation module
	{
#	ifdef WIN32
		TCHAR wszAnimationDll[MAX_PATH] = _T("gkAnimationHavok");

		gkStdString cfgfile = gkGetExecRootDir() + _T("media/config/startup.cfg");
		GetPrivateProfileString( _T("launcher"), _T("animationengine"), _T("gkAnimationHavok"), wszAnimationDll, MAX_PATH, cfgfile.c_str() );
#	else 
		TCHAR wszAnimationDll[MAX_PATH] = _T("gkAnimationHavok");
#	endif // WIN32

#ifdef OS_APPLE
        
#else
#	ifndef _STATIC_LIB
		gkLoadModule( m_moduleHandles.hAnimation, wszAnimationDll );
#	else
        #if TARGET_OS_IPHONE
        LOAD_MODULE_GLOBAL( m_moduleHandles.hAnimation,				gkAnimation );
        #endif
#	endif // _STATIC_LIB
#endif
    
    }
	//////////////////////////////////////////////////////////////////////////

	LOAD_MODULE_GLOBAL(m_moduleHandles.hGameObjectSystem,			gkGameObjectSystem);

	LOAD_MODULE_GLOBAL(m_moduleHandles.hFont,						gkFont);

#ifdef OS_WIN32
	LOAD_MODULE_GLOBAL(m_moduleHandles.hTrackBus,					gkTrackBus);

	LOAD_MODULE_GLOBAL(m_moduleHandles.hSound,						gkSound);

	//LOAD_MODULE_GLOBAL(m_moduleHandles.hVideo,						gkVideo);

	//LOAD_MODULE_GLOBAL(m_moduleHandles.hStereoDevice,				gkStereoDevice);

	{
		TCHAR wszStereoDevDll[MAX_PATH] = _T("null");
		gkStdString cfgfile = gkGetExecRootDir() + _T("media/config/startup.cfg");
		GetPrivateProfileString( _T("launcher"), _T("stereodevice"), _T("null"), wszStereoDevDll, MAX_PATH, cfgfile.c_str() );

		gkLoadModule( m_moduleHandles.hStereoDevice, wszStereoDevDll );
	}


#endif
    
	m_CVManager.initInput();
	gkLogMessage(_T("CVar Manager Initialized."));

	m_pSystemCVars = new gkSystemCVars;
	g_pSystemCVars = m_pSystemCVars;
	gkLogMessage(_T("System CVar Initialized."));

	m_CVManager.reloadAllParameters();

	// init Timer
	if (!m_Timer.Init(this))
		return (false);
	m_Timer.ResetTimer();

	gkLogMessage(_T("Timer Initialized."));


	gkIniParser startupFile( _T("config/startup.cfg") );
	startupFile.Parse();
	gkStdString ret = startupFile.FetchValue(  _T("launcher"), _T("width") );
	if( !ret.empty() )
	{
		gkStdStringstream ss(ret);
		ss >> sii.fWidth;
	}