Animate::Animate():
target(0),
+ target_obj(0),
anim(0),
stacked(false),
player(0)
{ }
-Animate::Animate(GL::Placeable &t, const GL::Animation &a, GL::AnimationPlayer &p):
+Animate::Animate(GL::Placeable &t, const GL::Animation &a, GL::AnimationPlayer &p, bool s):
target(&t),
+ target_obj(0),
anim(&a),
+ stacked(s),
player(&p)
{ }
float speed = 1.0f;
if(!anim->is_looping() && d)
speed = (anim->get_duration()/Time::sec)/d;
- if(stacked)
- player->play_stacked(*target, *anim, speed);
+ if(target_obj)
+ {
+ if(stacked)
+ player->play_stacked(*target_obj, *anim, speed);
+ else
+ player->play(*target_obj, *anim, speed);
+ }
else
- player->play(*target, *anim, speed);
+ {
+ if(stacked)
+ player->play_stacked(*target, *anim, speed);
+ else
+ player->play(*target, *anim, speed);
+ }
}
void Animate::Loader::target(const string &n)
{
obj.target = &demo.get_thing<GL::Placeable>(n);
+ obj.target_obj = dynamic_cast<GL::AnimatedObject *>(obj.target);
}
} // namespace DemoScene