}
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
-
+
static const osg::Vec3 &getGravityVector()
{
return gravity;
private:
static osg::Vec3 gravity;
static osg::Vec3 wind;
- const SGPropertyNode* modelRoot;
+ SGConstPropertyNode_ptr modelRoot;
static SGConstPropertyNode_ptr enabledNode;
static bool enabled;
};
return psu.get();
}
+ static void setFrozen(bool e) { _frozen = e; }
+
/**
* Set and get the wind vector for particles in the
* atmosphere. This vector is in the Z-up Y-north frame, and the
* 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;
bool useGravity;
bool useWind;
+ static bool _frozen;
static osg::ref_ptr<osgParticle::ParticleSystemUpdater> psu;
static osg::ref_ptr<osg::Group> commonRoot;
static osg::ref_ptr<osg::Geode> commonGeode;