//
// This file is in the Public Domain, and comes with no warranty.
+#ifdef HAVE_CONFIG_H
+# include <simgear_config.h>
+#endif
#include <string.h> // for strcmp()
#include <math.h>
SGPersonalityBranch *SGAnimation::current_object = 0;
SGAnimation::SGAnimation (SGPropertyNode_ptr props, ssgBranch * branch)
- : _branch(branch)
+ : _branch(branch),
+ animation_type(0)
{
_branch->setName(props->getStringValue("name", 0));
if ( props->getBoolValue( "enable-hot", true ) ) {
{
if (_condition == 0 || _condition->test()) {
if (_table == 0) {
- _position_m = (_prop->getDoubleValue() + _offset_m) * _factor;
+ _position_m = (_prop->getDoubleValue() * _factor) + _offset_m;
if (_has_min && _position_m < _min_m)
_position_m = _min_m;
if (_has_max && _position_m > _max_m)
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),
_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)
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);
sgPreMultMat4( r, transform );
}
+////////////////////////////////////////////////////////////////////////
+// Implementation of SGShadowAnimation
+////////////////////////////////////////////////////////////////////////
+
+SGShadowAnimation::SGShadowAnimation ( SGPropertyNode *prop_root,
+ SGPropertyNode_ptr props )
+ : SGAnimation(props, new ssgBranch),
+ _condition(0),
+ _condition_value(true)
+{
+ animation_type = 1;
+ SGPropertyNode_ptr node = props->getChild("condition");
+ if (node != 0) {
+ _condition = sgReadCondition(prop_root, node);
+ _condition_value = false;
+ }
+}
+
+SGShadowAnimation::~SGShadowAnimation ()
+{
+ delete _condition;
+}
+
+int
+SGShadowAnimation::update()
+{
+ if (_condition)
+ _condition_value = _condition->test();
+ return 2;
+}
+
+bool SGShadowAnimation::get_condition_value(void) {
+ return _condition_value;
+}
+
// end of animation.cxx