]> git.mxchange.org Git - simgear.git/commitdiff
Stuart Buchanan: Fix a bug in the random object placement where the model selected...
authorfredb <fredb>
Sun, 25 Apr 2010 10:47:37 +0000 (10:47 +0000)
committerTim Moore <timoore33@gmail.com>
Wed, 5 May 2010 06:44:18 +0000 (08:44 +0200)
simgear/scene/material/matmodel.cxx
simgear/scene/material/matmodel.hxx
simgear/scene/tgdb/obj.cxx
simgear/scene/tgdb/userdata.cxx
simgear/scene/tgdb/userdata.hxx

index c625d9b0af0e71be2bf17e479969a5d336ba2493..93cbd49478dcdc36f635131455fe2f8e2857439f 100644 (file)
@@ -135,15 +135,11 @@ SGMatModel::load_models( SGPropertyNode *prop_root )
 }
 
 osg::Node*
-SGMatModel::get_random_model( SGPropertyNode *prop_root )
+SGMatModel::get_random_model( SGPropertyNode *prop_root, mt seed )
 {
   load_models( prop_root ); // comment this out if preloading models
   int nModels = _models.size();
-  // int index = int(sg_random() * nModels);
-  static int index = -1;
-  if (++index >= nModels)
-    index = 0;
-  return _models[index].get();
+  return _models[mt_rand(&seed) * nModels].get();
 }
 
 double
index 9d06427a968bd581c569ef34e3a847751ceb1783..3e7d84a973ce06ec265104e5d3be947ee62ac637 100644 (file)
@@ -82,7 +82,7 @@ public:
      *
      * @return A randomly select model from the variants.
      */
-    osg::Node *get_random_model( SGPropertyNode *prop_root );
+    osg::Node *get_random_model( SGPropertyNode *prop_root, mt seed );
 
 
     /**
index 74b4a0718be358aa2ab5206d3a10c59d43ab7456..001cbf71ced7ed49c0440aad057b23e507a6a7ac 100644 (file)
@@ -610,7 +610,7 @@ SGLoadBTG(const std::string& path, SGMaterialLib *matlib, bool calc_lights, bool
              i < tileGeometryBin.randomModels.getNumModels(); i++) {
           SGMatModelBin::MatModel obj
             = tileGeometryBin.randomModels.getMatModel(i);
-          osg::Node* node = sgGetRandomModel(obj.model);
+          osg::Node* node = sgGetRandomModel(obj.model, seed);
         
           // Create a matrix to place the object in the correct
           // location, and then apply the rotation matrix created
index 11d69e12f7fafa64f66a66cf1aaa816843cc6bff..6aa71821f14f679388984d1ec99f1ee3e0b47214 100644 (file)
@@ -60,8 +60,8 @@ void sgUserDataInit( SGPropertyNode *p ) {
     root_props = p;
 }
 
-osg::Node* sgGetRandomModel(SGMatModel *obj) {
-   return obj->get_random_model( root_props );
+osg::Node* sgGetRandomModel(SGMatModel *obj, mt seed) {
+   return obj->get_random_model( root_props, seed );
  }
 
 namespace simgear
index ab0a6a559c2e64e41d6a4716f23d35efb267263c..fa5209e679024d29b3d9933531b6c3b989c97e76 100644 (file)
@@ -26,6 +26,7 @@
 #define _SG_USERDATA_HXX
 
 #include <simgear/compiler.h>
+#include <simgear/math/sg_random.h>
 
 #include <osg/Node>
 
@@ -42,7 +43,7 @@ void sgUserDataInit(SGPropertyNode *p);
 /**
  * Get a random model.
  */
-osg::Node* sgGetRandomModel(SGMatModel *obj);
+osg::Node* sgGetRandomModel(SGMatModel *obj, mt seed);
 
 namespace simgear
 {