Revision: 1398
          http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=1398&view=rev
Author:   rorthomas
Date:     2010-05-22 22:43:22 +0000 (Sat, 22 May 2010)

Log Message:
-----------
ported set_node_defaults command

Modified Paths:
--------------
    trunk/source/serializer/serializationmodules.cpp

Modified: trunk/source/serializer/serializationmodules.cpp
===================================================================
--- trunk/source/serializer/serializationmodules.cpp    2010-05-22 22:38:24 UTC 
(rev 1397)
+++ trunk/source/serializer/serializationmodules.cpp    2010-05-22 22:43:22 UTC 
(rev 1398)
@@ -58,6 +58,7 @@
        // setup the base descriptions, etc, then register ourself
        s->registerModuleSerializer(this);
        s->addSectionHandler("nodes", this);
+       s->addCommandHandler("set_node_defaults", this);
 }
 
 void NodeSerializer::initData(rig_t *rig)
@@ -87,164 +88,182 @@
                return -1;
        }
 
-
-       // XXX: TOFIX: logging!
-       // parse nodes
-       int id = 0;
-       float x = 0, y = 0, z = 0, mass = 0;
-       char options[255] = "n";
-       int result = sscanf(line,"%i, %f, %f, %f, %s %f", &id, &x, &y, &z, 
options, &mass);
-       // catch some errors
-       if (result < 4 || result == EOF)
+       if (!strncmp("set_node_defaults", line, 17))
        {
-               //LogManager::getSingleton().logMessage("Error parsing File " + 
String(fname) +" line " + StringConverter::toString(linecounter) + ". trying to 
continue ...");
-               return 0;
+               int result = sscanf(line,"set_node_defaults %f, %f, %f, %f, 
%s", &n->default_node_loadweight, &n->default_node_friction, 
&n->default_node_volume, &n->default_node_surface, n->default_node_options);
+               if (result < 1 || result == EOF)
+               {
+                       //LogManager::getSingleton().logMessage("Error parsing 
File (set_node_defaults) " + String(fname) +" line " + 
StringConverter::toString(linecounter) + ". trying to continue ...");
+                       return 0;
+               }
+               if (n->default_node_friction   < 0) n->default_node_friction   
= NODE_FRICTION_COEF_DEFAULT;
+               if (n->default_node_volume     < 0) n->default_node_volume     
= NODE_VOLUME_COEF_DEFAULT;
+               if (n->default_node_surface    < 0) n->default_node_surface    
= NODE_SURFACE_COEF_DEFAULT;
+               if (n->default_node_loadweight < 0) n->default_node_loadweight 
= NODE_LOADWEIGHT_DEFAULT;
+               if (result <= 4) memset(n->default_node_options, 0, sizeof 
n->default_node_options);
+               return result;
        }
-       if (id != n->free_node)
+       if(activeSection == "nodes")
        {
-               //LogManager::getSingleton().logMessage("Error parsing File 
(Node) " + String(fname) +" line " + StringConverter::toString(linecounter) + 
":");
-               //LogManager::getSingleton().logMessage("Error: lost sync in 
nodes numbers after node " + StringConverter::toString(free_node) + "(got " + 
StringConverter::toString(id) + " instead)");
-               exit(2);
-       };
+               // XXX: TOFIX: logging!
+               // parse nodes
+               int id = 0;
+               float x = 0, y = 0, z = 0, mass = 0;
+               char options[255] = "n";
+               int result = sscanf(line,"%i, %f, %f, %f, %s %f", &id, &x, &y, 
&z, options, &mass);
+               // catch some errors
+               if (result < 4 || result == EOF)
+               {
+                       //LogManager::getSingleton().logMessage("Error parsing 
File " + String(fname) +" line " + StringConverter::toString(linecounter) + ". 
trying to continue ...");
+                       return 0;
+               }
+               if (id != n->free_node)
+               {
+                       //LogManager::getSingleton().logMessage("Error parsing 
File (Node) " + String(fname) +" line " + 
StringConverter::toString(linecounter) + ":");
+                       //LogManager::getSingleton().logMessage("Error: lost 
sync in nodes numbers after node " + StringConverter::toString(free_node) + 
"(got " + StringConverter::toString(id) + " instead)");
+                       exit(2);
+               };
 
-       if(n->free_node >= MAX_NODES)
-       {
-               //LogManager::getSingleton().logMessage("nodes limit reached 
("+StringConverter::toString(MAX_NODES)+"): " + String(fname) +" line " + 
StringConverter::toString(linecounter) + ". trying to continue ...");
-               return 0;
-       }
+               if(n->free_node >= MAX_NODES)
+               {
+                       //LogManager::getSingleton().logMessage("nodes limit 
reached ("+StringConverter::toString(MAX_NODES)+"): " + String(fname) +" line " 
+ StringConverter::toString(linecounter) + ". trying to continue ...");
+                       return 0;
+               }
 
-       Vector3 npos = n->startPos + n->startRot * Vector3(x, y, z);
-       init_node(rig, id, npos.x, npos.y, npos.z, NODE_NORMAL, 10, 0, 0, 
n->free_node, -1, n->default_node_friction, n->default_node_volume, 
n->default_node_surface, n->default_node_loadweight);
-       n->nodes[id].iIsSkin = true;
+               Vector3 npos = n->startPos + n->startRot * Vector3(x, y, z);
+               init_node(rig, id, npos.x, npos.y, npos.z, NODE_NORMAL, 10, 0, 
0, n->free_node, -1, n->default_node_friction, n->default_node_volume, 
n->default_node_surface, n->default_node_loadweight);
+               n->nodes[id].iIsSkin = true;
 
-       if      (n->default_node_loadweight >= 0.0f)
-       {
-               n->nodes[id].masstype     = NODE_LOADED;
-               n->nodes[id].overrideMass = true;
-               n->nodes[id].mass         = n->default_node_loadweight;
-       }
+               if      (n->default_node_loadweight >= 0.0f)
+               {
+                       n->nodes[id].masstype     = NODE_LOADED;
+                       n->nodes[id].overrideMass = true;
+                       n->nodes[id].mass         = n->default_node_loadweight;
+               }
 
-       // merge options and default_node_options
-       strncpy(options, ((String(n->default_node_options) + 
String(options)).c_str()), 250);
+               // merge options and default_node_options
+               strncpy(options, ((String(n->default_node_options) + 
String(options)).c_str()), 250);
 
-       // now 'parse' the options
-       char *options_pointer = options;
-       while (*options_pointer != 0)
-       {
-               switch (*options_pointer)
+               // now 'parse' the options
+               char *options_pointer = options;
+               while (*options_pointer != 0)
                {
-                       case 'l':       // load node
-                               if(mass != 0)
-                               {
-                                       n->nodes[id].masstype     = NODE_LOADED;
-                                       n->nodes[id].overrideMass = true;
-                                       n->nodes[id].mass         = mass;
-                               }
-                               else
-                               {
-                                       n->nodes[id].masstype     = NODE_LOADED;
-                                       n->masscount++;
-                               }
-                               break;
-                       case 'x':       //exhaust
-                               // XXX: TOFIX
-                               //if (disable_smoke)
-                               //      break;
-                               /*
-                               if(s->smokeId == 0 && s->smokeRef != 0)
-                               {
-                                       exhaust_t e;
-                                       e.emitterNode = id;
-                                       e.directionNode = smokeRef;
-                                       e.isOldFormat = true;
-                                       //smokeId=id;
-                                       e.smokeNode = 
parent->createChildSceneNode();
-                                       //ParticleSystemManager 
*pSysM=ParticleSystemManager::getSingletonPtr();
-                                       char wname[256];
-                                       sprintf(wname, "exhaust-%zu-%s", 
exhausts.size(), truckname);
-                                       //if (pSysM) 
smoker=pSysM->createSystem(wname, "tracks/Smoke");
-                                       
e.smoker=manager->createParticleSystem(wname, "tracks/Smoke");
-                                       // ParticleSystem* pSys = 
ParticleSystemManager::getSingleton().createSystem("exhaust", "tracks/Smoke");
-                                       if (!e.smoker)
-                                               continue;
-                                       e.smokeNode->attachObject(e.smoker);
-                                       
e.smokeNode->setPosition(nodes[e.emitterNode].AbsPosition);
-                                       exhausts.push_back(e);
+                       switch (*options_pointer)
+                       {
+                               case 'l':       // load node
+                                       if(mass != 0)
+                                       {
+                                               n->nodes[id].masstype     = 
NODE_LOADED;
+                                               n->nodes[id].overrideMass = 
true;
+                                               n->nodes[id].mass         = 
mass;
+                                       }
+                                       else
+                                       {
+                                               n->nodes[id].masstype     = 
NODE_LOADED;
+                                               n->masscount++;
+                                       }
+                                       break;
+                               case 'x':       //exhaust
+                                       // XXX: TOFIX
+                                       //if (disable_smoke)
+                                       //      break;
+                                       /*
+                                       if(s->smokeId == 0 && s->smokeRef != 0)
+                                       {
+                                               exhaust_t e;
+                                               e.emitterNode = id;
+                                               e.directionNode = smokeRef;
+                                               e.isOldFormat = true;
+                                               //smokeId=id;
+                                               e.smokeNode = 
parent->createChildSceneNode();
+                                               //ParticleSystemManager 
*pSysM=ParticleSystemManager::getSingletonPtr();
+                                               char wname[256];
+                                               sprintf(wname, 
"exhaust-%zu-%s", exhausts.size(), truckname);
+                                               //if (pSysM) 
smoker=pSysM->createSystem(wname, "tracks/Smoke");
+                                               
e.smoker=manager->createParticleSystem(wname, "tracks/Smoke");
+                                               // ParticleSystem* pSys = 
ParticleSystemManager::getSingleton().createSystem("exhaust", "tracks/Smoke");
+                                               if (!e.smoker)
+                                                       continue;
+                                               
e.smokeNode->attachObject(e.smoker);
+                                               
e.smokeNode->setPosition(nodes[e.emitterNode].AbsPosition);
+                                               exhausts.push_back(e);
 
-                               }
-                               */
-                               n->nodes[n->smokeId].isHot = true;
-                               n->nodes[id].isHot      = true;
-                               n->smokeId = id;
-                               break;
-                       case 'y':       //exhaust reference
-                               // XXX: TOFIX
-                               //if (disable_smoke)
-                               //      break;
-                               /*
-                               if(smokeId != 0 && smokeRef == 0)
-                               {
-                                       exhaust_t e;
-                                       e.emitterNode = smokeId;
-                                       e.directionNode = id;
-                                       e.isOldFormat = true;
-                                       //smokeId=id;
-                                       e.smokeNode = 
parent->createChildSceneNode();
-                                       //ParticleSystemManager 
*pSysM=ParticleSystemManager::getSingletonPtr();
-                                       char wname[256];
-                                       sprintf(wname, "exhaust-%zu-%s", 
exhausts.size(), truckname);
-                                       //if (pSysM) 
smoker=pSysM->createSystem(wname, "tracks/Smoke");
-                                       
e.smoker=manager->createParticleSystem(wname, "tracks/Smoke");
-                                       // ParticleSystem* pSys = 
ParticleSystemManager::getSingleton().createSystem("exhaust", "tracks/Smoke");
-                                       if (!e.smoker)
-                                               continue;
-                                       e.smokeNode->attachObject(e.smoker);
-                                       
e.smokeNode->setPosition(nodes[e.emitterNode].AbsPosition);
-                                       exhausts.push_back(e);
+                                       }
+                                       */
+                                       n->nodes[n->smokeId].isHot = true;
+                                       n->nodes[id].isHot      = true;
+                                       n->smokeId = id;
+                                       break;
+                               case 'y':       //exhaust reference
+                                       // XXX: TOFIX
+                                       //if (disable_smoke)
+                                       //      break;
+                                       /*
+                                       if(smokeId != 0 && smokeRef == 0)
+                                       {
+                                               exhaust_t e;
+                                               e.emitterNode = smokeId;
+                                               e.directionNode = id;
+                                               e.isOldFormat = true;
+                                               //smokeId=id;
+                                               e.smokeNode = 
parent->createChildSceneNode();
+                                               //ParticleSystemManager 
*pSysM=ParticleSystemManager::getSingletonPtr();
+                                               char wname[256];
+                                               sprintf(wname, 
"exhaust-%zu-%s", exhausts.size(), truckname);
+                                               //if (pSysM) 
smoker=pSysM->createSystem(wname, "tracks/Smoke");
+                                               
e.smoker=manager->createParticleSystem(wname, "tracks/Smoke");
+                                               // ParticleSystem* pSys = 
ParticleSystemManager::getSingleton().createSystem("exhaust", "tracks/Smoke");
+                                               if (!e.smoker)
+                                                       continue;
+                                               
e.smokeNode->attachObject(e.smoker);
+                                               
e.smokeNode->setPosition(nodes[e.emitterNode].AbsPosition);
+                                               exhausts.push_back(e);
 
-                                       nodes[smokeId].isHot=true;
-                                       nodes[id].isHot=true;
-                               }
-                               */
-                               n->smokeRef = id;
+                                               nodes[smokeId].isHot=true;
+                                               nodes[id].isHot=true;
+                                       }
+                                       */
+                                       n->smokeRef = id;
+                                       break;
+                               case 'c':       //contactless
+                                       n->nodes[id].contactless = 1;
+                                       break;
+                               case 'h':       //hook
+                                       // emulate the old behaviour using new 
fancy hookgroups
+                                       // XXX: TOFIX
+                                       /*
+                                       hook_t h;
+                                       h.hookNode=&nodes[id];
+                                       h.locked=UNLOCKED;
+                                       h.lockNode=0;
+                                       h.lockTruck=0;
+                                       h.lockNodes=true;
+                                       h.group=-1;
+                                       hooks.push_back(h);
+                                       */
+                                       break;
+                               case 'e':       //editor
+                                       n->editorId = id;
+                                       break;
+                               case 'b':       //buoy
+                                       n->nodes[id].buoyancy = 10000.0f;
+                                       break;
+                               case 'p':       //diasble particles
+                                       n->nodes[id].disable_particles = true;
                                break;
-                       case 'c':       //contactless
-                               n->nodes[id].contactless = 1;
+                               case 'L':       //Log data:
+                                       
LogManager::getSingleton().logMessage("Node " + StringConverter::toString(id) + 
"  settings. Node load mass: " \
+                                               + 
StringConverter::toString(n->nodes[id].mass) + ", friction coefficient: " + 
StringConverter::toString(n->default_node_friction) \
+                                               + " and buoyancy volume 
coefficient: " + StringConverter::toString(n->default_node_volume) + " Fluid 
drag surface coefficient: " \
+                                               + 
StringConverter::toString(n->default_node_surface)+ " Particle mode: " + 
StringConverter::toString(n->nodes[id].disable_particles));
                                break;
-                       case 'h':       //hook
-                               // emulate the old behaviour using new fancy 
hookgroups
-                               // XXX: TOFIX
-                               /*
-                               hook_t h;
-                               h.hookNode=&nodes[id];
-                               h.locked=UNLOCKED;
-                               h.lockNode=0;
-                               h.lockTruck=0;
-                               h.lockNodes=true;
-                               h.group=-1;
-                               hooks.push_back(h);
-                               */
-                               break;
-                       case 'e':       //editor
-                               n->editorId = id;
-                               break;
-                       case 'b':       //buoy
-                               n->nodes[id].buoyancy = 10000.0f;
-                               break;
-                       case 'p':       //diasble particles
-                               n->nodes[id].disable_particles = true;
-                       break;
-                       case 'L':       //Log data:
-                               LogManager::getSingleton().logMessage("Node " + 
StringConverter::toString(id) + "  settings. Node load mass: " \
-                                       + 
StringConverter::toString(n->nodes[id].mass) + ", friction coefficient: " + 
StringConverter::toString(n->default_node_friction) \
-                                       + " and buoyancy volume coefficient: " 
+ StringConverter::toString(n->default_node_volume) + " Fluid drag surface 
coefficient: " \
-                                       + 
StringConverter::toString(n->default_node_surface)+ " Particle mode: " + 
StringConverter::toString(n->nodes[id].disable_particles));
-                       break;
+                       }
+                       options_pointer++;
                }
-               options_pointer++;
+               n->free_node++;
+               return result;
        }
-       n->free_node++;
-       return result;
+       return 0;
 }
 
 int NodeSerializer::serialize(char *line, rig_t *rig)


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------

_______________________________________________
Rigsofrods-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel

Reply via email to