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

Log Message:
-----------
added set_beam_defaults* commands

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

Modified: trunk/source/serializer/serializationmodules.cpp
===================================================================
--- trunk/source/serializer/serializationmodules.cpp    2010-05-22 22:25:43 UTC 
(rev 1396)
+++ trunk/source/serializer/serializationmodules.cpp    2010-05-22 22:38:24 UTC 
(rev 1397)
@@ -315,6 +315,8 @@
        // setup the base descriptions, etc, then register ourself
        s->registerModuleSerializer(this);
        s->addSectionHandler("beams", this);
+       s->addCommandHandler("set_beam_defaults", this);
+       s->addCommandHandler("set_beam_defaults_scale", this);
 }
 
 void BeamSerializer::initData(rig_t *rig)
@@ -359,86 +361,141 @@
                return -1;
        }
 
-       // XXX: TOFIX: logging!
-       //parse beams
-       int id1, id2;
-       char options[50] = "v";
-       int type = BEAM_NORMAL;
-       int result = sscanf(line, "%i, %i, %s", &id1, &id2, options);
-       if (result < 2 || result == EOF)
+       if (!strncmp("set_beam_defaults_scale", line, 23))
        {
-               //LogManager::getSingleton().logMessage("Error parsing File 
(Beam) " + String(fname) +" line " + StringConverter::toString(linecounter) + 
". trying to continue ...");
-               return -1;
+               int result = sscanf(line,"set_beam_defaults_scale %f, %f, %f, 
%f", &b->default_spring_scale, &b->default_damp_scale, 
&b->default_deform_scale, &b->default_break_scale);
+               if (result < 4 || result == EOF)
+               {
+                       //LogManager::getSingleton().logMessage("Error parsing 
File (set_beam_defaults_scale) " + String(fname) +" line " + 
StringConverter::toString(linecounter) + ". trying to continue ...");
+                       return 0;
+               }
+               return result;
        }
-
-       if (id1 >= n->free_node || id2 >= n->free_node)
+       if (!strncmp("set_beam_defaults", line, 17))
        {
-               LogManager::getSingleton().logMessage("Error: unknown node 
number in beams section ("
-                       
+StringConverter::toString(id1)+","+StringConverter::toString(id2)+")");
-               exit(3);
-       };
+               int result = sscanf(line,"set_beam_defaults %f, %f, %f, %f, %f, 
%s, %f", &b->default_spring, &b->default_damp, 
&b->default_deform,&b->default_break,&b->default_beam_diameter, 
b->default_beam_material, &b->default_plastic_coef);
+               if (result < 1 || result == EOF)
+               {
+                       //LogManager::getSingleton().logMessage("Error parsing 
File (set_beam_defaults) " + String(fname) +" line " + 
StringConverter::toString(linecounter) + ". trying to continue ...");
+                       return 0;
+               }
+               /*
+               // XXX: TODO: FIX
+               if(strnlen(default_beam_material2, 255))
+               {
+                       MaterialPtr mat = 
MaterialManager::getSingleton().getByName(String(default_beam_material2));
+                       if(!mat.isNull())
+                               strncpy(default_beam_material, 
default_beam_material2, 256);
+                       else
+                               LogManager::getSingleton().logMessage("beam 
material '" + String(default_beam_material2) + "' not found!");
+               }*/
+               if (b->default_spring        < 0) b->default_spring        = 
DEFAULT_SPRING;
+               if (b->default_damp          < 0) b->default_damp          = 
DEFAULT_DAMP;
+               if (b->default_deform        < 0) b->default_deform        = 
BEAM_DEFORM;
+               if (b->default_break         < 0) b->default_break         = 
BEAM_BREAK;
+               if (b->default_beam_diameter < 0) b->default_beam_diameter = 
DEFAULT_BEAM_DIAMETER;
+               if (b->default_plastic_coef >= 0.0f)
+               {
+                       b->beam_creak = 0;
+               }
+               if(b->default_spring_scale != 1 || b->default_damp_scale != 1 
|| b->default_deform_scale != 1 || b->default_break_scale != 1)
+               {
+                       // XXX
+                       /*
+                       LogManager::getSingleton().logMessage("Due to using 
set_beam_defaults_scale, this set_beam_defaults was interpreted as  " + \
+                               StringConverter::toString(default_spring * 
default_spring_scale) + ", " + \
+                               StringConverter::toString(default_damp   * 
default_damp_scale) + ", " + \
+                               StringConverter::toString(default_deform * 
default_deform_scale) + ", " + \
+                               StringConverter::toString(default_break  * 
default_break_scale) + ". In " + \
+                               String(fname) +" line " + 
StringConverter::toString(linecounter) + ".");
+                               */
 
-       if(b->free_beam >= MAX_BEAMS)
-       {
-               //LogManager::getSingleton().logMessage("beams limit reached 
("+StringConverter::toString(MAX_BEAMS)+"): " + String(fname) +" line " + 
StringConverter::toString(linecounter) + ". trying to continue ...");
-               return -1;
+               }
+               return result;
        }
-
-       //skip if a beam already exists
-       int i;
-       for (i=0; i < b->free_beam; i++)
+       if(activeSection == "beams")
        {
-               if ((b->beams[i].p1 == &n->nodes[id1] && b->beams[i].p2 == 
&n->nodes[id2]) \
-                       || (b->beams[i].p1 == &n->nodes[id2] && b->beams[i].p2 
== &n->nodes[id1]))
+               // XXX: TOFIX: logging!
+               //parse beams
+               int id1, id2;
+               char options[50] = "v";
+               int type = BEAM_NORMAL;
+               int result = sscanf(line, "%i, %i, %s", &id1, &id2, options);
+               if (result < 2 || result == EOF)
                {
-                       LogManager::getSingleton().logMessage("Skipping 
duplicate beams: from node "+StringConverter::toString(id1)+" to node 
"+StringConverter::toString(id2));
-                       return 0;
+                       //LogManager::getSingleton().logMessage("Error parsing 
File (Beam) " + String(fname) +" line " + 
StringConverter::toString(linecounter) + ". trying to continue ...");
+                       return -1;
                }
-       }
 
-       // FIXME: separate init_beam and setup_beam to be able to set all 
parameters after creation
-       // this is just ugly:
-       char *options_pointer = options;
-       while (*options_pointer != 0)
-       {
-               if(*options_pointer=='i')
+               if (id1 >= n->free_node || id2 >= n->free_node)
                {
-                       type = BEAM_INVISIBLE;
-                       break;
+                       LogManager::getSingleton().logMessage("Error: unknown 
node number in beams section ("
+                               
+StringConverter::toString(id1)+","+StringConverter::toString(id2)+")");
+                       exit(3);
+               };
+
+               if(b->free_beam >= MAX_BEAMS)
+               {
+                       //LogManager::getSingleton().logMessage("beams limit 
reached ("+StringConverter::toString(MAX_BEAMS)+"): " + String(fname) +" line " 
+ StringConverter::toString(linecounter) + ". trying to continue ...");
+                       return -1;
                }
-               options_pointer++;
-       }
 
-       int pos = add_beam(rig, &n->nodes[id1], &n->nodes[id2], type, \
-               b->default_break  * b->default_break_scale, \
-               b->default_spring * b->default_spring_scale, \
-               b->default_damp   * b->default_damp_scale, \
-               -1, -1, -1, 1, \
-               b->default_beam_diameter);
+               //skip if a beam already exists
+               int i;
+               for (i=0; i < b->free_beam; i++)
+               {
+                       if ((b->beams[i].p1 == &n->nodes[id1] && b->beams[i].p2 
== &n->nodes[id2]) \
+                               || (b->beams[i].p1 == &n->nodes[id2] && 
b->beams[i].p2 == &n->nodes[id1]))
+                       {
+                               LogManager::getSingleton().logMessage("Skipping 
duplicate beams: from node "+StringConverter::toString(id1)+" to node 
"+StringConverter::toString(id2));
+                               return 0;
+                       }
+               }
 
-       // now 'parse' the options
-       options_pointer = options;
-       while (*options_pointer != 0)
-       {
-               switch (*options_pointer)
+               // FIXME: separate init_beam and setup_beam to be able to set 
all parameters after creation
+               // this is just ugly:
+               char *options_pointer = options;
+               while (*options_pointer != 0)
                {
-                       case 'i':       // invisible
-                               b->beams[pos].type = BEAM_INVISIBLE;
+                       if(*options_pointer=='i')
+                       {
+                               type = BEAM_INVISIBLE;
                                break;
-                       case 'v':       // visible
-                               b->beams[pos].type = BEAM_NORMAL;
-                               break;
-                       case 'r':
-                               b->beams[pos].bounded = ROPE;
-                               break;
-                       case 's':
-                               b->beams[pos].bounded = SUPPORTBEAM;
-                               break;
+                       }
+                       options_pointer++;
                }
-               options_pointer++;
+
+               int pos = add_beam(rig, &n->nodes[id1], &n->nodes[id2], type, \
+                       b->default_break  * b->default_break_scale, \
+                       b->default_spring * b->default_spring_scale, \
+                       b->default_damp   * b->default_damp_scale, \
+                       -1, -1, -1, 1, \
+                       b->default_beam_diameter);
+
+               // now 'parse' the options
+               options_pointer = options;
+               while (*options_pointer != 0)
+               {
+                       switch (*options_pointer)
+                       {
+                               case 'i':       // invisible
+                                       b->beams[pos].type = BEAM_INVISIBLE;
+                                       break;
+                               case 'v':       // visible
+                                       b->beams[pos].type = BEAM_NORMAL;
+                                       break;
+                               case 'r':
+                                       b->beams[pos].bounded = ROPE;
+                                       break;
+                               case 's':
+                                       b->beams[pos].bounded = SUPPORTBEAM;
+                                       break;
+                       }
+                       options_pointer++;
+               }
+               return result;
        }
-
-       return result;
+       return 0;
 }
 
 int BeamSerializer::serialize(char *line, rig_t *rig)
@@ -1697,7 +1754,6 @@
        // unsupported sections
        s->addSectionHandler("cinecam", this);
        s->addSectionHandler("help", this);
-       s->addSectionHandler("engoption", this);
        s->addSectionHandler("wheels2", this);
        s->addSectionHandler("meshwheels", this);
        s->addSectionHandler("shocks", this);
@@ -1745,8 +1801,6 @@
        s->addCommandHandler("set_inertia_defaults", this);
        s->addCommandHandler("forwardcommands", this);
        s->addCommandHandler("importcommands", this);
-       s->addCommandHandler("set_beam_defaults", this);
-       s->addCommandHandler("set_beam_defaults_scale", this);
        s->addCommandHandler("set_node_defaults", this);
        s->addCommandHandler("enable_advanced_deformation", this);
        s->addCommandHandler("rollon", this);


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