void TerrainManager::loadTerrainConfigBasics(Ogre::DataStreamPtr &ds)
{
	// now generate the hash of it
	generateHashFromDataStream(ds, file_hash);

	m_terrain_config.load(ds, "\t:=", true);

	// read in the settings
	terrain_name = m_terrain_config.getSetting("Name", "General");
	if (terrain_name.empty())
	{
		ErrorUtils::ShowError(_L("Terrain loading error"), _L("the terrain name cannot be empty"));
		exit(125);
	}

	ogre_terrain_config_filename = m_terrain_config.getSetting("GeometryConfig", "General");
	// otc = ogre terrain config
	if (ogre_terrain_config_filename.find(".otc") == String::npos)
	{
		ErrorUtils::ShowError(_L("Terrain loading error"), _L("the new terrain mode only supports .otc configurations"));
		exit(125);
	}

	ambient_color = StringConverter::parseColourValue(m_terrain_config.getSetting("AmbientColor", "General"), ColourValue::White);
	category_id = StringConverter::parseInt(m_terrain_config.getSetting("CategoryID", "General"), 129);
	guid = m_terrain_config.getSetting("GUID", "General");
	start_position = StringConverter::parseVector3(m_terrain_config.getSetting("StartPosition", "General"), Vector3(512.0f, 0.0f, 512.0f));
	version = StringConverter::parseInt(m_terrain_config.getSetting("Version", "General"), 1);
	gravity = StringConverter::parseReal(m_terrain_config.getSetting("Gravity", "General"), -9.81);

	// parse author info
	ConfigFile::SettingsIterator it = m_terrain_config.getSettingsIterator("Authors");

	authors.clear();

	while (it.hasMoreElements())
	{
		String type = it.peekNextKey();   // e.g. terrain
		String name = it.peekNextValue(); // e.g. john doe

		if (!name.empty())
		{
			authorinfo_t author;

			author.type = type;
			author.name = name;

			authors.push_back(author);
		}

		it.moveNext();
	}
}
void TerrainManager::loadTerrainObjects()
{
	try
	{
		ConfigFile::SettingsIterator objectsIterator = m_terrain_config.getSettingsIterator("Objects");

		while (objectsIterator.hasMoreElements())
		{
			String sname = objectsIterator.peekNextKey();
			StringUtil::trim(sname);

			object_manager->loadObjectConfigFile(sname);
			objectsIterator.moveNext();
		}
	} catch(...)
	{
		// no objects found
	}

	// bakes the geometry and things
	object_manager->postLoad();
}