]> git.mxchange.org Git - simgear.git/blob - simgear/scene/model/persparam.hxx
Reorganize personality parameters and add personality to translate, blend and scale...
[simgear.git] / simgear / scene / model / persparam.hxx
1 /**
2  * $Id$
3  */
4
5 #ifndef _SG_PERSPARAM_HXX
6 #define _SG_PERSPARAM_HXX 1
7
8 template <class T>
9 class SGPersonalityParameter {
10 public:
11   SGPersonalityParameter( SGPropertyNode *props, const char *name, T defval )
12     : _var( defval ), _min( defval ), _max( defval ) {
13     SGPropertyNode_ptr node = props->getNode( name );
14     if ( node != 0 ) {
15       SGPropertyNode_ptr rand_n = node->getNode( "random" );
16       if ( rand_n != 0 ) {
17         _min = rand_n->getDoubleValue( "min", 0.0 );
18         _max = rand_n->getDoubleValue( "max", 1.0 );
19         shuffle();
20       } else {
21         _var = _min = _max = getNodeValue( props, name, defval );
22       }
23     }
24   }
25   SGPersonalityParameter<T> &operator=( T v ) { _var = v; return *this; }
26   SGPersonalityParameter<T> &operator+=( T v ) { _var += v; return *this; }
27   SGPersonalityParameter<T> &operator-=( T v ) { _var -= v; return *this; }
28   T shuffle() { return ( _var = _min + sg_random() * ( _max - _min ) ); }
29   T value() const { return _var; }
30   T getNodeValue( SGPropertyNode *props, const char *name, T defval ) const;
31   operator T() const { return _var; }
32
33 private:
34   T _var;
35   T _min;
36   T _max;
37 };
38
39 #endif // _SG_PERSPARAM_HXX