Revision: 2749
http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=2749&view=rev
Author: rorthomas
Date: 2012-05-29 01:05:54 +0000 (Tue, 29 May 2012)
Log Message:
-----------
continued working on terrain code, wip
Modified Paths:
--------------
trunk/source/main/GlobalEnvironment.h
trunk/source/main/gameplay/CacheSystem.cpp
trunk/source/main/terrain/TerrainManager.cpp
trunk/source/main/terrain/TerrainManager.h
Modified: trunk/source/main/GlobalEnvironment.h
===================================================================
--- trunk/source/main/GlobalEnvironment.h 2012-05-28 20:47:34 UTC (rev
2748)
+++ trunk/source/main/GlobalEnvironment.h 2012-05-29 01:05:54 UTC (rev
2749)
@@ -47,7 +47,7 @@
, sky(0)
, surveyMap(0)
, terrainManager(0)
- , ogreRoot(0)
+ , ogreRoot(0)
{
}
Modified: trunk/source/main/gameplay/CacheSystem.cpp
===================================================================
--- trunk/source/main/gameplay/CacheSystem.cpp 2012-05-28 20:47:34 UTC (rev
2748)
+++ trunk/source/main/gameplay/CacheSystem.cpp 2012-05-29 01:05:54 UTC (rev
2749)
@@ -31,6 +31,7 @@
#include "SHA1.h"
#include "SoundScriptManager.h"
#include "Utils.h"
+#include "TerrainManager.h"
#ifdef USE_MYGUI
#include "LoadingWindow.h"
@@ -1177,12 +1178,15 @@
{
//LOG("Read to add "+String(entry.dname)+" filename
"+String(filename));
DataStreamPtr ds =
ResourceGroupManager::getSingleton().openResource(filename, group);
- entry.dname = ds->getLine();
if (ext == "terrn2")
+ {
fillTerrainDetailInfo(entry, ds, filename);
- else
+ } else
+ {
+ entry.dname = ds->getLine();
fillTruckDetailInfo(entry, ds, filename);
+ }
// ds closes automatically, so do _not_ close it
explicitly below
entry.fname = filename;
@@ -1660,83 +1664,15 @@
void CacheSystem::fillTerrainDetailInfo(CacheEntry &entry, Ogre::DataStreamPtr
ds, Ogre::String fname)
{
- char authorformat[256] = "//author %s %i %s %s";
- char authortag[256] = "//author";
+ TerrainManager tm;
+ tm.loadTerrainConfigBasics(ds);
- char categoryformat[256] = "//fileinfo %s %i, %i";
- char categorytag[256] = "//fileinfo";
-
//parsing the current file
entry.authors.clear();
- LOG("Parsing terrain for detail information: '"+String(fname)+"'");
- //LOG("Parsing for authors: '"+String(d.fname)+"'");
- char line[1024];
- int linecounter = 0;
- int categoryid=-1, version=-1;
-
- // try to get unique ID from the filename!
- String uniqueid = "no-uid";
- String fileuid = getUIDfromString(fname);
- if (fileuid != "") uniqueid = fileuid;
-
- while (!ds->eof())
- {
- size_t ll=ds->readLine(line, 1023);
- if (ll <= 1)
- // ignore empty lines
- continue;
- linecounter++;
- if (!strncmp(authortag, line, strnlen(authortag, 254))) {
- int authorid;
- char authorname[256], authoremail[256], authortype[256];
- memset(authorname, 0, 255);
- memset(authoremail, 0, 255);
- memset(authortype, 0, 255);
- int result = sscanf(line, authorformat, &authortype,
&authorid, &authorname, &authoremail);
- if (result < 1 || result == EOF)
- {
- LOG("Error parsing File (author) " +
String(fname) +" line " + TOSTRING(linecounter) + ". trying to continue ...");
- continue;
- }
- //replace '_' with ' '
- authorinfo_t author;
- //char *tmp = authorname;
- //while (*tmp!=0) {if (*tmp=='_') *tmp=' ';tmp++;};
-
- //fill the struct now
- author.id = authorid;
- author.type = String(authortype);
- author.name = String(authorname);
- author.email = String(authoremail);
- entry.authors.push_back(author);
-
- } else if (!strncmp(categorytag, line, strnlen(categorytag,
254)))
- {
- char uidtmp[256] = "";
- int result = sscanf(line, categoryformat, uidtmp,
&categoryid, &version);
- if (result < 3 || result == EOF)
- {
- LOG("Error parsing File (fileinfo) " +
String(fname) +" line " + TOSTRING(linecounter) + ". trying to continue ...");
- continue;
- }
-
- if (uniqueid != "")
- {
- // remove trailing comma
- size_t slen = strnlen(uidtmp, 250);
- if (slen > 0 && uidtmp[slen-1] == ',')
- uidtmp[slen-1] = 0;
-
- // fix the -1 from the old format
- if (strnlen(uidtmp, 5) > 0 && strncmp(uidtmp,
"-1", 2))
- uniqueid = String(uidtmp);
- }
-
- }
- }
- entry.categoryid = categoryid;
- entry.uniqueid = uniqueid;
- entry.version = version;
+ entry.dname = tm.terrain_name;
+ entry.categoryid = tm.categoryID;
+ entry.uniqueid = tm.guid;
+ entry.version = tm.version;
}
int CacheSystem::getCategoryUsage(int category)
Modified: trunk/source/main/terrain/TerrainManager.cpp
===================================================================
--- trunk/source/main/terrain/TerrainManager.cpp 2012-05-28 20:47:34 UTC
(rev 2748)
+++ trunk/source/main/terrain/TerrainManager.cpp 2012-05-29 01:05:54 UTC
(rev 2749)
@@ -54,6 +54,38 @@
}
+void TerrainManager::loadTerrainConfigBasics(Ogre::DataStreamPtr &ds)
+{
+ // now generate the hash of it
+ generateHashFromDataStream(ds, fileHash);
+
+ mTerrainConfig.load(ds, "\t:=", true);
+
+ // read in the settings
+ terrain_name = mTerrainConfig.getSetting("Name", "General");
+ if (terrain_name.empty())
+ {
+ showError(_L("Terrain loading error"), _L("the terrain name
cannot be empty"));
+ exit(125);
+ }
+
+ ogre_terrain_config_filename =
mTerrainConfig.getSetting("GeometryConfig", "General");
+ // otc = ogre terrain config
+ if (ogre_terrain_config_filename.find(".otc") == String::npos)
+ {
+ showError(_L("Terrain loading error"), _L("the new terrain mode
only supports .otc configurations"));
+ exit(125);
+ }
+
+ ambient_color =
StringConverter::parseColourValue(mTerrainConfig.getSetting("AmbientColor",
"General"));
+ start_position =
StringConverter::parseVector3(mTerrainConfig.getSetting("StartPosition",
"General"));
+
+ guid = mTerrainConfig.getSetting("GUID", "General");
+ categoryID =
StringConverter::parseInt(mTerrainConfig.getSetting("CategoryID", "General"));
+ version =
StringConverter::parseInt(mTerrainConfig.getSetting("Version", "General"));
+
+}
+
void TerrainManager::loadTerrain(String filename)
{
DataStreamPtr ds;
@@ -69,25 +101,9 @@
exit(125);
}
- // now generate the hash of it
- generateHashFromDataStream(ds, fileHash);
+ loadTerrainConfigBasics(ds);
- mTerrainConfig.load(ds, "\t:=", false);
- // read in the settings
- terrain_name = mTerrainConfig.getSetting("Name");
-
- ogre_terrain_config_filename =
mTerrainConfig.getSetting("GeometryConfig");
- // otc = ogre terrain config
- if (ogre_terrain_config_filename.find(".otc") == String::npos)
- {
- showError(_L("Terrain loading error"), _L("the new terrain mode
only supports .otc configurations"));
- exit(125);
- }
-
- ambient_color =
StringConverter::parseColourValue(mTerrainConfig.getSetting("AmbientColor"));
- start_position =
StringConverter::parseVector3(mTerrainConfig.getSetting("StartPosition"));
-
// then, init the subsystems, order is important :)
initSubSystems();
@@ -118,6 +134,9 @@
// geometry - ogre terrain things
geometry_manager = new TerrainGeometryManager(this);
+ // collisions
+ initCollisions();
+
// shadows
initShadows();
@@ -184,7 +203,7 @@
gEnv->sky = sky_manager;
// try to load caelum config
- String caelumConfig =
mTerrainConfig.getSetting("CaelumConfigFile");
+ String caelumConfig =
mTerrainConfig.getSetting("CaelumConfigFile", "General");
if (!caelumConfig.empty() &&
ResourceGroupManager::getSingleton().resourceExistsInAnyGroup(caelumConfig))
{
@@ -199,7 +218,7 @@
} else
#endif //USE_CAELUM
{
- String sandStormConfig =
mTerrainConfig.getSetting("SandStormCubeMap");
+ String sandStormConfig =
mTerrainConfig.getSetting("SandStormCubeMap", "General");
if (!sandStormConfig.empty())
{
Modified: trunk/source/main/terrain/TerrainManager.h
===================================================================
--- trunk/source/main/terrain/TerrainManager.h 2012-05-28 20:47:34 UTC (rev
2748)
+++ trunk/source/main/terrain/TerrainManager.h 2012-05-29 01:05:54 UTC (rev
2749)
@@ -22,16 +22,20 @@
#include "RoRPrerequisites.h"
+#include "CacheSystem.h"
+
#include <OgreConfigFile.h>
class TerrainManager : public ZeroedMemoryAllocator
{
+ friend class CacheSystem;
public:
TerrainManager();
~TerrainManager();
void loadTerrain(Ogre::String filename);
+ void loadTerrainConfigBasics(Ogre::DataStreamPtr &ds);
void update(float dt) {};
@@ -70,7 +74,10 @@
Ogre::String fileHash;
Ogre::String ogre_terrain_config_filename;
Ogre::String terrain_name;
+ Ogre::String guid;
Ogre::Vector3 start_position;
+ int categoryID;
+ int version;
bool use_caelum;
float gravity;
float water_line;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Rigsofrods-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel