]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/model/animation.hxx
Frederic Bouvier:
[simgear.git] / simgear / scene / model / animation.hxx
index 4bbdf829468c1551b188f06883b889f66cff2bbd..d5063feb221e30803ef6f9929e301c478ac6b1eb 100644 (file)
@@ -1,3 +1,4 @@
+
 // animation.hxx - classes to manage model animation.
 // Written by David Megginson, started 2002.
 //
@@ -98,8 +99,17 @@ public:
 class SGRangeAnimation : public SGAnimation
 {
 public:
-  SGRangeAnimation (SGPropertyNode_ptr props);
+  SGRangeAnimation (SGPropertyNode *prop_root,
+                    SGPropertyNode_ptr props);
   virtual ~SGRangeAnimation ();
+  virtual void update();
+private:
+  SGPropertyNode_ptr _min_prop;
+  SGPropertyNode_ptr _max_prop;
+  float _min;
+  float _max;
+  float _min_factor;
+  float _max_factor;
 };
 
 
@@ -220,5 +230,172 @@ private:
   sgVec3 _axis;
 };
 
+/**
+ * Animation to blend an object.
+ */
+class SGBlendAnimation : public SGAnimation
+{
+public:
+  SGBlendAnimation( SGPropertyNode *prop_root,
+                      SGPropertyNode_ptr props );
+  virtual ~SGBlendAnimation ();
+  virtual void update();
+private:
+  SGPropertyNode_ptr _prop;
+  SGInterpTable * _table;
+  double _prev_value;
+  double _offset;
+  double _factor;
+  bool _has_min;
+  double _min;
+  bool _has_max;
+  double _max;
+};
+
+/**
+ * Animation to scale an object.
+ */
+class SGScaleAnimation : public SGAnimation
+{
+public:
+  SGScaleAnimation( SGPropertyNode *prop_root,
+                        SGPropertyNode_ptr props );
+  virtual ~SGScaleAnimation ();
+  virtual void update();
+private:
+  SGPropertyNode_ptr _prop;
+  double _x_factor;
+  double _y_factor;
+  double _z_factor;
+  double _x_offset;
+  double _y_offset;
+  double _z_offset;
+  SGInterpTable * _table;
+  bool _has_min_x;
+  bool _has_min_y;
+  bool _has_min_z;
+  double _min_x;
+  double _min_y;
+  double _min_z;
+  bool _has_max_x;
+  bool _has_max_y;
+  bool _has_max_z;
+  double _max_x;
+  double _max_y;
+  double _max_z;
+  double _x_scale;
+  double _y_scale;
+  double _z_scale;
+  sgMat4 _matrix;
+};
+
+/**
+ * Animation to rotate texture mappings around a center point.
+ *
+ * This animation rotates to a specific position.
+ */
+class SGTexRotateAnimation : public SGAnimation
+{
+public:
+  SGTexRotateAnimation( SGPropertyNode *prop_root, SGPropertyNode_ptr props );
+  virtual ~SGTexRotateAnimation ();
+  virtual void update();
+private:
+  SGPropertyNode_ptr _prop;
+  double _offset_deg;
+  double _factor;
+  SGInterpTable * _table;
+  bool _has_min;
+  double _min_deg;
+  bool _has_max;
+  double _max_deg;
+  double _position_deg;
+  sgMat4 _matrix;
+  sgVec3 _center;
+  sgVec3 _axis;
+};
+
+
+/**
+ * Animation to slide texture mappings along an axis.
+ */
+class SGTexTranslateAnimation : public SGAnimation
+{
+public:
+  SGTexTranslateAnimation( SGPropertyNode *prop_root,
+                      SGPropertyNode_ptr props );
+  virtual ~SGTexTranslateAnimation ();
+  virtual void update();
+private:
+  SGPropertyNode_ptr _prop;
+  double _offset;
+  double _factor;
+  double _step;
+  double _scroll;
+  SGInterpTable * _table;
+  bool _has_min;
+  double _min;
+  bool _has_max;
+  double _max;
+  double _position;
+  sgMat4 _matrix;
+  sgVec3 _axis;
+};
+
+
+
+/**
+ * Classes for handling multiple types of Texture translations on one object
+ */
+
+class SGTexMultipleAnimation : public SGAnimation
+{
+public:
+  SGTexMultipleAnimation( SGPropertyNode *prop_root,
+                      SGPropertyNode_ptr props );
+  virtual ~SGTexMultipleAnimation ();
+  virtual void update();
+private:
+  class TexTransform
+    {
+    public:
+    SGPropertyNode_ptr prop;
+    int subtype; //  0=translation, 1=rotation
+    double offset;
+    double factor;
+    double step;
+    double scroll;
+    SGInterpTable * table;
+    bool has_min;
+    double min;
+    bool has_max;
+    double max;
+    double position;
+    sgMat4 matrix;
+    sgVec3 center;
+    sgVec3 axis;
+  };
+  SGPropertyNode_ptr _prop;
+  TexTransform* _transform;
+  int _num_transforms;
+};
+
+
+/**
+ * An animation to enable the alpha test 
+ */
+class SGAlphaTestAnimation : public SGAnimation
+{
+public:
+  SGAlphaTestAnimation (SGPropertyNode *prop_root,
+                        SGPropertyNode_ptr props);
+  virtual ~SGAlphaTestAnimation ();
+  virtual void update();
+private:
+  void setAlphaClampToBranch(ssgBranch *b, float clamp);
+  bool _done;
+  float _alpha_clamp;
+};
+
 
 #endif // _SG_ANIMATION_HXX