5 #ifndef _SG_PERSPARAM_HXX
6 #define _SG_PERSPARAM_HXX 1
8 #include <simgear/math/sg_random.h>
12 class SGPersonalityParameter {
14 SGPersonalityParameter(const SGPropertyNode *props, const char *name, T defval )
15 : _var( defval ), _min( defval ), _max( defval ) {
16 const SGPropertyNode* node = props->getNode( name );
18 const SGPropertyNode* rand_n = node->getNode( "random" );
20 _min = getNodeValue( rand_n, "min", (T)0 );
21 _max = getNodeValue( rand_n, "max", (T)1 );
24 _var = _min = _max = getNodeValue( props, name, defval );
28 SGPersonalityParameter<T> &operator=( T v ) { _var = v; return *this; }
29 SGPersonalityParameter<T> &operator+=( T v ) { _var += v; return *this; }
30 SGPersonalityParameter<T> &operator-=( T v ) { _var -= v; return *this; }
31 T shuffle() { return ( _var = _min + sg_random() * ( _max - _min ) ); }
32 T value() const { return _var; }
33 T getNodeValue(const SGPropertyNode *props, const char *name, T defval ) const;
34 operator T() const { return _var; }
43 SGPersonalityParameter<double>::getNodeValue( const SGPropertyNode *props,
45 double defval ) const;
47 #endif // _SG_PERSPARAM_HXX