示例#1
0
wxImage SpringUnitSync::GetImage( const wxString& modname, const wxString& image_path, bool useWhiteAsTransparent  ) const
{
  wxLogDebugFunc( _T("") );

    wxImage cache;

	susynclib().SetCurrentMod( modname );

	int ini = susynclib().OpenFileVFS ( image_path );
	ASSERT_EXCEPTION( ini, _T("cannot find side image") );

	int FileSize = susynclib().FileSizeVFS(ini);
	if (FileSize == 0) {
		susynclib().CloseFileVFS(ini);
		ASSERT_EXCEPTION( FileSize, _T("image has size 0") );
	}

	uninitialized_array<char> FileContent(FileSize);
	susynclib().ReadFileVFS(ini, FileContent, FileSize);
	wxMemoryInputStream FileContentStream( FileContent, FileSize );

	cache.LoadFile( FileContentStream, wxBITMAP_TYPE_ANY, -1);
	cache.InitAlpha();
	if ( useWhiteAsTransparent )
	{
		for ( int x = 0; x < cache.GetWidth(); x++ )
			for ( int y = 0; y < cache.GetHeight(); y++ )
				if ( cache.GetBlue( x, y ) == 255 && cache.GetGreen( x, y ) == 255 && cache.GetRed( x, y ) == 255 )
					cache.SetAlpha( x, y, 0 ); // set pixel to be transparent
	}
    return cache;
}
bool SpringUnitSync::FastLoadUnitSyncLib( const wxString& unitsyncloc )
{
	LOCK_UNITSYNC;
	if (!_LoadUnitSyncLib( unitsyncloc ))
		return false;

	m_mods_list.clear();
	m_mod_array.Clear();
	m_unsorted_mod_array.Clear();
	m_mods_unchained_hash.clear();

	const int numMods = susynclib().GetPrimaryModCount();
	wxString name;
	for ( int i = 0; i < numMods; i++ )
	{
		try
		{
			name = susynclib().GetPrimaryModName( i );
			m_mods_list[name] = _T("fakehash");
			m_mod_array.Add( name );
			m_shortname_to_name_map[
					std::make_pair(susynclib().GetPrimaryModShortName( i ),
								   susynclib().GetPrimaryModVersion( i )) ] = name;
		} catch (...) { continue; }
	}
	m_unsorted_mod_array = m_mod_array;
	return true;
}
示例#3
0
bool SpringUnitSync::FileExists( const wxString& name ) const
{
  int handle = susynclib().OpenFileVFS(name);
  if ( handle == 0 ) return false;
  susynclib().CloseFileVFS(handle);
  return true;
}
示例#4
0
bool Unitsync::LoadUnitSyncLib(const std::string& unitsyncloc)
{
	LOCK_UNITSYNC;
	ClearCache();
	const bool ret = susynclib().Load(unitsyncloc);
	if (!ret) {
		return false;
	}
	const std::string datadir = LSL::Util::config().GetDataDir();
	const std::string curdatadir = susynclib().GetSpringDataDir();
	if (datadir != curdatadir) {
		LslWarning("Reloading unitsync due to datadir change: %s -> %s", curdatadir.c_str(), datadir.c_str());
		SetSpringDataPath(datadir);
		susynclib().Load(unitsyncloc);
	}
	supportsManualUnLoad = LSL::susynclib().GetSpringConfigInt("UnitsyncAutoUnLoadMapsIsSupported", 0) != 0;
	if (supportsManualUnLoad) {
		LslDebug("Unitsync supports manual loading of archives (faster, yey!)");
		LSL::usync().SetSpringConfigInt("UnitsyncAutoUnLoadMaps", 1);
	} else {
		LslDebug("Unitsync doesn't support manual loading of archives :-/");
	}


	m_cache_path = LSL::Util::config().GetCachePath();
	PopulateArchiveList();
	return true;
}
示例#5
0
QString Customizations::DataBasePath()
{
	static bool cached = false;
	if ( cached )
		return dataBasePath_;

	QList<QString> checked_paths;
	QString sub_path( "lobby/SpringLobby/customizations/" );
	sub_path.append( m_shortname );
	for ( int i = 0; i < susynclib().GetSpringDataDirCount(); ++i ) {
		QDir data ( ToQString( susynclib().GetSpringDataDirByIndex(i) ) );
		checked_paths.append( data.absolutePath().append("/").append( sub_path ) );
		if ( data.cd( sub_path ) ) {
			dataBasePath_ = data.absolutePath();
			break;
		}
	}
	if( dataBasePath_ != QString() )
		return dataBasePath_ ;

	checked_paths.prepend( QString("Couldn't find customization data in any of these directories:\n ") );
	throw DataException( checked_paths );

	return QString();
}
示例#6
0
wxString SpringUnitSync::GetDefaultNick()
{
    wxString name = susynclib().GetSpringConfigString( _T("name"), _T("Player") );
    if ( name.IsEmpty() ) {
        susynclib().SetSpringConfigString( _T("name"), _T("Player") );
        return _T("Player");
    }
    return name;
}
示例#7
0
int SpringUnitSync::GetNumUnits( const wxString& modname ) const
{
  wxLogDebugFunc( _T("") );

  susynclib().AddAllArchives( susynclib().GetPrimaryModArchive( m_unsorted_mod_array.Index( modname ) ) );
  susynclib().ProcessUnitsNoChecksum();

  return susynclib().GetUnitCount();
}
示例#8
0
wxArrayString  SpringUnitSync::GetPlaybackList( bool ReplayType ) const
{
	wxArrayString ret;
  if ( !IsLoaded() ) return ret;

    if ( ReplayType )
        return susynclib().FindFilesVFS( _T("demos/*.sdf") );
    else
        return susynclib().FindFilesVFS( _T("Saves/*.ssf") );
}
示例#9
0
wxArrayString SpringUnitSync::GetModValidMapList( const wxString& modname ) const
{
  wxArrayString ret;
  try
  {
    unsigned int mapcount = susynclib().GetValidMapCount( modname );
    for ( unsigned int i = 0; i < mapcount; i++ ) ret.Add( susynclib().GetValidMapName( i ) );
  } catch ( assert_exception& e ) {}
  return ret;
}
示例#10
0
static std::string GetGameInfo(int index, const std::string keyname)
{
	const int count = susynclib().GetPrimaryModInfoCount(index);
	for (int i = 0; i < count; i++) {
		const std::string key = Util::SafeString(susynclib().GetInfoKey(i));
		if (key == keyname) {
			return Util::SafeString(susynclib().GetInfoValueString(i));
		}
	}
	return "";
}
示例#11
0
wxImage SpringUnitSync::_GetMapImage( const wxString& mapname, const wxString& imagename, wxImage (SpringUnitSyncLib::*loadMethod)(const wxString&) )
{
  wxImage img;

  if ( m_map_image_cache.TryGet( mapname + imagename, img ) ) return img;

  wxString originalsizepath = GetFileCachePath( mapname, m_maps_unchained_hash[mapname], false ) + imagename;

  try
  {
    ASSERT_EXCEPTION( wxFileExists( originalsizepath ), _T("File cached image does not exist") );

    img = wxImage( originalsizepath, wxBITMAP_TYPE_PNG );
    ASSERT_EXCEPTION( img.Ok(), _T("Failed to load cache image") );
  }
  catch (...)
  {
    try
    {
      img = (susynclib().*loadMethod)( mapname );

      img.SaveFile( originalsizepath, wxBITMAP_TYPE_PNG );
    }
    catch (...)
    {
      img = wxImage( 1, 1 );
    }
  }

  m_map_image_cache.Add( mapname + imagename, img );

  return img;
}
示例#12
0
void SpringUnitSync::UnSetCurrentMod()
{
	try
	{
		susynclib().UnSetCurrentMod();
	} catch( unitsync_assert ) {}
}
int NoGuiSinglePlayerBattle::GetAiIndex( const wxString& name )
{
    int total = susynclib().GetSkirmishAICount( m_host_mod.name );
    for ( int i = 0; i < total; i++ )
    {
        wxArrayString infos = susynclib().GetAIInfo( i );
        int namepos = infos.Index( _T("shortName") );
        //        int versionpos = infos.Index( _T("version") );
        wxString ainame;
        if ( namepos != wxNOT_FOUND )
            ainame += infos[namepos +1];
        if ( ainame == name )
            return i;
        //        if ( versionpos != wxNOT_FOUND ) ainame += _T(" ") + infos[versionpos +1];
    }
    return -1;
}
示例#14
0
bool SpringUnitSync::_LoadUnitSyncLib( const wxString& unitsyncloc )
{
  try {
    susynclib().Load( unitsyncloc, sett().GetForcedSpringConfigFilePath() );
  } catch (...) {
    return false;
  }
  return true;
}
示例#15
0
wxString SpringUnitSync::GetTextfileAsString( const wxString& modname, const wxString& file_path )
{
	susynclib().SetCurrentMod( modname );

	int ini = susynclib().OpenFileVFS ( file_path );
	if ( !ini )
		return wxEmptyString;

	int FileSize = susynclib().FileSizeVFS(ini);
	if (FileSize == 0) {
		susynclib().CloseFileVFS(ini);
		return wxEmptyString;
	}

	uninitialized_array<char> FileContent(FileSize);
	susynclib().ReadFileVFS(ini, FileContent, FileSize);
	return wxString( FileContent, wxConvAuto(), size_t( FileSize ) );
}
示例#16
0
wxArrayString SpringUnitSync::GetModDeps( const wxString& modname ) const
{
	wxArrayString ret;
	try
	{
		ret = susynclib().GetModDeps( m_unsorted_mod_array.Index( modname ) );
	}
	catch( unitsync_assert ) {}
	return ret;
}
示例#17
0
wxArrayString SpringUnitSync::GetAIInfos( int index ) const
{
	wxArrayString ret;
	try
	{
		ret = susynclib().GetAIInfo( index );
	}
	catch ( unitsync_assert ) {}
	return ret;
}
示例#18
0
std::string Unitsync::GetSpringVersion() const
{

	std::string ret;
	try {
		ret = susynclib().GetSpringVersion();
	} catch (...) {
	}
	return ret;
}
示例#19
0
wxString SpringUnitSync::GetSpringVersion() const
{
  wxLogDebugFunc( _T("") );
  wxString ret;
  try
  {
    ret = susynclib().GetSpringVersion();
  }
  catch (...){}
  return ret;
}
示例#20
0
GameOptions SpringUnitSync::GetModOptions( const wxString& name )
{
  wxLogDebugFunc( name );
  GameOptions ret;
	int count = susynclib().GetModOptionCount(name);
	for (int i = 0; i < count; ++i)
	{
		GetOptionEntry( i, ret );
	}
  return ret;
}
示例#21
0
void Battle::Leave()
{
    m_serv.LeaveBattle( m_opts.battleid );
    m_is_self_in = false;
	for( size_t j = 0; j < GetNumUsers(); ++j  )
	{
		User& u = GetUser( j );
		if ( u.GetBattleStatus().IsBot() ) OnUserRemoved( u );
	}
    susynclib().UnSetCurrentMod( );
}
示例#22
0
void Unitsync::FetchUnitsyncErrors(const std::string& prefix)
{
	auto errors = susynclib().GetUnitsyncErrors();
	std::string pre = prefix;
	if (!prefix.empty()) {
		pre += " ";
	}
	for (const std::string error : errors) {
		LslWarning("Unitsync: %s%s", pre.c_str(), error.c_str());
	}
}
示例#23
0
GameOptions SpringUnitSync::GetSkirmishOptions( const wxString& modname, const wxString& skirmish_name )
{
    wxLogDebugFunc( modname );

    GameOptions ret;
    int count = susynclib().GetCustomOptionCount( modname, skirmish_name );
    for (int i = 0; i < count; ++i) {
        GetOptionEntry( i, ret );
    }
    return ret;
}
示例#24
0
GameOptions SpringUnitSync::GetModCustomizations( const wxString& modname )
{
    wxLogDebugFunc( modname );

    GameOptions ret;
    int count = susynclib().GetCustomOptionCount( modname, _T("LobbyOptions.lua") );
    for (int i = 0; i < count; ++i) {
        GetOptionEntry( i, ret );
    }
    return ret;
}
示例#25
0
GameOptions SpringUnitSync::GetAIOptions( const wxString& modname, int index )
{
  wxLogDebugFunc( TowxString(index) );
  GameOptions ret;
	int count = susynclib().GetAIOptionCount(modname, index);
	for (int i = 0; i < count; ++i)
	{
		GetOptionEntry( i, ret );
	}
  return ret;
}
示例#26
0
QImage SpringUnitSync::GetQImage( const wxString& modname, const wxString& image_path, bool /*useWhiteAsTransparent*/  ) const
{
	QImage cache;
	susynclib().SetCurrentMod( modname );

	int ini = susynclib().OpenFileVFS ( image_path );
	ASSERT_EXCEPTION( ini, _T("cannot find side image") );

	int FileSize = susynclib().FileSizeVFS(ini);
	if (FileSize == 0) {
		susynclib().CloseFileVFS(ini);
		ASSERT_EXCEPTION( FileSize, _T("image has size 0") );
	}

	QByteArray cache_data;
	cache_data.resize(FileSize);
	susynclib().ReadFileVFS(ini, cache_data.data(), FileSize);

	bool hu = cache.loadFromData( cache_data );
	assert( hu );
	return cache;
}
示例#27
0
wxArrayString SpringUnitSync::GetScreenshotFilenames() const
{
    wxArrayString ret;
    if ( !IsLoaded() ) return ret;

    ret = susynclib().FindFilesVFS( _T("screenshots/*.*") );
    for ( int i = 0; i < long(ret.Count() - 1); ++i ) {
            if ( ret[i] == ret[i+1] )
                ret.RemoveAt( i+1 );
    }
    ret.Sort();
    return ret;
}
示例#28
0
wxArrayString SpringUnitSync::GetSides( const wxString& modname )
{
	wxArrayString ret;
	if ( ! m_sides_cache.TryGet( modname, ret ) ) {
        try
        {
            ret = susynclib().GetSides( modname );
            m_sides_cache.Add( modname, ret );
        }
        catch( unitsync_assert ) {}
	}
	return ret;
}
示例#29
0
wxArrayString SpringUnitSync::GetAIList( const wxString& modname ) const
{
  wxLogDebugFunc( _T("") );

	wxArrayString ret;

	if ( usync().VersionSupports( USYNC_GetSkirmishAI ) )
	{
		int total = susynclib().GetSkirmishAICount( modname );
		for ( int i = 0; i < total; i++ )
		{
			wxArrayString infos = susynclib().GetAIInfo( i );
			int namepos = infos.Index( _T("shortName") );
			int versionpos = infos.Index( _T("version") );
			wxString ainame;
			if ( namepos != wxNOT_FOUND ) ainame += infos[namepos +1];
			if ( versionpos != wxNOT_FOUND ) ainame += _T(" ") + infos[versionpos +1];
			ret.Add( ainame );
		}
	}
	else
	{
		// list dynamic link libraries
		wxArrayString dlllist = susynclib().FindFilesVFS( wxDynamicLibrary::CanonicalizeName(_T("AI/Bot-libs/*"), wxDL_MODULE) );
		for( int i = 0; i < long(dlllist.GetCount()); i++ )
		{
			if ( ret.Index( dlllist[i].BeforeLast( '/') ) == wxNOT_FOUND ) ret.Add ( dlllist[i] ); // don't add duplicates
		}
		// list jar files (java AIs)
		wxArrayString jarlist = susynclib().FindFilesVFS( _T("AI/Bot-libs/*.jar") );
		for( int i = 0; i < long(jarlist.GetCount()); i++ )
		{
			if ( ret.Index( jarlist[i].BeforeLast( '/') ) == wxNOT_FOUND ) ret.Add ( jarlist[i] ); // don't add duplicates
		}

	}

  return ret;
}
示例#30
0
wxArrayString SpringUnitSync::GetUnitsList( const wxString& modname )
{
  wxLogDebugFunc( modname );

  wxArrayString cache;
  try
  {
    cache = GetCacheFile( GetFileCachePath( modname, _T(""), true ) + _T(".units") );
  } catch(...)
  {
    susynclib().SetCurrentMod( modname );
    while ( susynclib().ProcessUnitsNoChecksum() ) {}
    unsigned int unitcount = susynclib().GetUnitCount();
    for ( unsigned int i = 0; i < unitcount; i++ )
    {
      cache.Add( susynclib().GetFullUnitName(i) << _T(" (") << susynclib().GetUnitName(i) << _T(")") );
    }

    SetCacheFile( GetFileCachePath( modname, _T(""), true ) + _T(".units"), cache );

  }

  return cache;
}