]> git.mxchange.org Git - simgear.git/commitdiff
Fix from Melchior: Set static values at every condition change, not only initially.
authorandy <andy>
Wed, 22 Feb 2006 20:50:35 +0000 (20:50 +0000)
committerandy <andy>
Wed, 22 Feb 2006 20:50:35 +0000 (20:50 +0000)
simgear/scene/model/animation.cxx
simgear/scene/model/animation.hxx

index 3a9367696484df6e2aef26b322419d7f3e7274f5..faec6334f9751a4319eea14c6caeaa61d2cb0c00 100644 (file)
@@ -1124,6 +1124,7 @@ SGMaterialAnimation::SGMaterialAnimation( SGPropertyNode *prop_root,
         SGPropertyNode_ptr props, const SGPath &texture_path)
     : SGAnimation(props, new ssgBranch),
     _prop_root(prop_root),
+    _last_condition(false),
     _prop_base(""),
     _texture_base(texture_path),
     _cached_material(0),
@@ -1192,6 +1193,8 @@ SGMaterialAnimation::SGMaterialAnimation( SGPropertyNode *prop_root,
     _thresh_prop = n ? _prop_root->getNode(path(n->getStringValue()), true) : 0;
     n = props->getChild("texture-prop");
     _tex_prop = n ? _prop_root->getNode(path(n->getStringValue()), true) : 0;
+
+    _static_update = _update;
 }
 
 void SGMaterialAnimation::initColorGroup(SGPropertyNode_ptr group, ColorSpec *col, int flag)
@@ -1230,8 +1233,15 @@ void SGMaterialAnimation::init()
 
 int SGMaterialAnimation::update()
 {
-    if (_condition && !_condition->test())
-        return 2;
+    if (_condition) {
+        bool cond = _condition->test();
+        if (cond && !_last_condition)
+            _update |= _static_update;
+
+        _last_condition = cond;
+        if (!cond)
+            return 2;
+    }
 
     if (_read & DIFFUSE)
         updateColorGroup(&_diff, DIFFUSE);
index 207ae2558ec8322022ecd5e396703005d8f55235..0ab2bb211ac3fd9a447e531dd2fbb90bbf8e90b1 100644 (file)
@@ -496,7 +496,7 @@ private:
         float factor;
         float offset;
         float min;
-       float max;
+        float max;
         SGPropertyNode_ptr value_prop;
         SGPropertyNode_ptr factor_prop;
         SGPropertyNode_ptr offset_prop;
@@ -507,6 +507,7 @@ private:
         }
     };
     SGCondition *_condition;
+    bool _last_condition;
     SGPropertyNode *_prop_root;
     string _prop_base;
     SGPath _texture_base;
@@ -516,6 +517,7 @@ private:
     ssgSimpleState* _cloned_material;
     unsigned _read;
     unsigned _update;
+    unsigned _static_update;
     bool _global;
     ColorSpec _diff;
     ColorSpec _amb;