From 375f3e8bc14f77beb9b164a9970170c4f0ff3f66 Mon Sep 17 00:00:00 2001 From: andy Date: Wed, 22 Feb 2006 20:50:35 +0000 Subject: [PATCH] Fix from Melchior: Set static values at every condition change, not only initially. --- simgear/scene/model/animation.cxx | 14 ++++++++++++-- simgear/scene/model/animation.hxx | 4 +++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/simgear/scene/model/animation.cxx b/simgear/scene/model/animation.cxx index 3a936769..faec6334 100644 --- a/simgear/scene/model/animation.cxx +++ b/simgear/scene/model/animation.cxx @@ -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); diff --git a/simgear/scene/model/animation.hxx b/simgear/scene/model/animation.hxx index 207ae255..0ab2bb21 100644 --- a/simgear/scene/model/animation.hxx +++ b/simgear/scene/model/animation.hxx @@ -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; -- 2.39.5