]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/model/particles.hxx
Work around apparent OSG 3.2.0 normal binding bug.
[simgear.git] / simgear / scene / model / particles.hxx
index 6dda343db2628b77b7ed2c6c114e41ab598475b8..cdbb1f21af317e456b1fa8d42ddc0fedc9673731 100644 (file)
@@ -99,7 +99,7 @@ public:
 private:
     static osg::Vec3 gravity;
     static osg::Vec3 wind;
-    const SGPropertyNode* modelRoot;
+    SGConstPropertyNode_ptr modelRoot;
     static SGConstPropertyNode_ptr enabledNode;
     static bool enabled;
 };
@@ -111,7 +111,7 @@ class Particles : public osg::NodeCallback
 public:
     Particles();
 
-    static osg::Group * appendParticles(const SGPropertyNode* configNode, SGPropertyNode* modelRoot, const osgDB::ReaderWriter::Options* options);
+    static osg::Group * appendParticles(const SGPropertyNode* configNode, SGPropertyNode* modelRoot, const osgDB::Options* options);
 
     virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
 
@@ -257,6 +257,13 @@ public:
      * magnitude is the velocity in meters per second.
      */
     static void setWindVector(const osg::Vec3& wind) { _wind = wind; }
+    static void setWindFrom(const double from_deg, const double speed_kt) {
+       double map_rad = -from_deg * SG_DEGREES_TO_RADIANS;
+       double speed_mps = speed_kt * SG_KT_TO_MPS;
+       _wind[0] = cos(map_rad) * speed_mps;
+       _wind[1] = sin(map_rad) * speed_mps;
+       _wind[2] = 0.0;
+    }
     static const osg::Vec3& getWindVector() { return _wind; }
 protected:
     float shooterExtraRange;