175 lines
3.9 KiB
Text
175 lines
3.9 KiB
Text
|
/**
|
||
|
* PANDA 3D SOFTWARE
|
||
|
* Copyright (c) Carnegie Mellon University. All rights reserved.
|
||
|
*
|
||
|
* All use of this software is subject to the terms of the revised BSD
|
||
|
* license. You should have received a copy of this license along
|
||
|
* with this source code in a file named "LICENSE."
|
||
|
*
|
||
|
* @file animControlCollection.I
|
||
|
* @author drose
|
||
|
* @date 2000-02-22
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Starts the named animation playing.
|
||
|
*/
|
||
|
INLINE bool AnimControlCollection::
|
||
|
play(const std::string &anim_name) {
|
||
|
AnimControl *control = find_anim(anim_name);
|
||
|
if (control == nullptr) {
|
||
|
return false;
|
||
|
}
|
||
|
_last_started_control = control;
|
||
|
control->play();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Starts the named animation playing.
|
||
|
*/
|
||
|
INLINE bool AnimControlCollection::
|
||
|
play(const std::string &anim_name, double from, double to) {
|
||
|
AnimControl *control = find_anim(anim_name);
|
||
|
if (control == nullptr) {
|
||
|
return false;
|
||
|
}
|
||
|
_last_started_control = control;
|
||
|
control->play(from, to);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Starts the named animation looping.
|
||
|
*/
|
||
|
INLINE bool AnimControlCollection::
|
||
|
loop(const std::string &anim_name, bool restart) {
|
||
|
AnimControl *control = find_anim(anim_name);
|
||
|
if (control == nullptr) {
|
||
|
return false;
|
||
|
}
|
||
|
_last_started_control = control;
|
||
|
control->loop(restart);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Starts the named animation looping.
|
||
|
*/
|
||
|
INLINE bool AnimControlCollection::
|
||
|
loop(const std::string &anim_name, bool restart, double from, double to) {
|
||
|
AnimControl *control = find_anim(anim_name);
|
||
|
if (control == nullptr) {
|
||
|
return false;
|
||
|
}
|
||
|
_last_started_control = control;
|
||
|
control->loop(restart, from, to);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Stops the named animation.
|
||
|
*/
|
||
|
INLINE bool AnimControlCollection::
|
||
|
stop(const std::string &anim_name) {
|
||
|
AnimControl *control = find_anim(anim_name);
|
||
|
if (control == nullptr) {
|
||
|
return false;
|
||
|
}
|
||
|
control->stop();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Sets to a particular frame in the named animation.
|
||
|
*/
|
||
|
INLINE bool AnimControlCollection::
|
||
|
pose(const std::string &anim_name, double frame) {
|
||
|
AnimControl *control = find_anim(anim_name);
|
||
|
if (control == nullptr) {
|
||
|
return false;
|
||
|
}
|
||
|
_last_started_control = control;
|
||
|
control->pose(frame);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the current frame in the named animation, or 0 if the animation is
|
||
|
* not found.
|
||
|
*/
|
||
|
INLINE int AnimControlCollection::
|
||
|
get_frame(const std::string &anim_name) const {
|
||
|
AnimControl *control = find_anim(anim_name);
|
||
|
if (control == nullptr) {
|
||
|
return 0;
|
||
|
}
|
||
|
return control->get_frame();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the current frame in the last-started animation.
|
||
|
*/
|
||
|
INLINE int AnimControlCollection::
|
||
|
get_frame() const {
|
||
|
if (_last_started_control == nullptr) {
|
||
|
return 0;
|
||
|
}
|
||
|
return _last_started_control->get_frame();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the named animation is currently playing, false otherwise.
|
||
|
*/
|
||
|
INLINE bool AnimControlCollection::
|
||
|
is_playing(const std::string &anim_name) const {
|
||
|
AnimControl *control = find_anim(anim_name);
|
||
|
if (control == nullptr) {
|
||
|
return false;
|
||
|
}
|
||
|
return control->is_playing();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the last-started animation is currently playing, false
|
||
|
* otherwise.
|
||
|
*/
|
||
|
INLINE bool AnimControlCollection::
|
||
|
is_playing() const {
|
||
|
if (_last_started_control == nullptr) {
|
||
|
return false;
|
||
|
}
|
||
|
return _last_started_control->is_playing();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the total number of frames in the named animation, or 0 if the
|
||
|
* animation is not found.
|
||
|
*/
|
||
|
INLINE int AnimControlCollection::
|
||
|
get_num_frames(const std::string &anim_name) const {
|
||
|
AnimControl *control = find_anim(anim_name);
|
||
|
if (control == nullptr) {
|
||
|
return 0;
|
||
|
}
|
||
|
return control->get_num_frames();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the total number of frames in the last-started animation.
|
||
|
*/
|
||
|
INLINE int AnimControlCollection::
|
||
|
get_num_frames() const {
|
||
|
if (_last_started_control == nullptr) {
|
||
|
return 0;
|
||
|
}
|
||
|
return _last_started_control->get_num_frames();
|
||
|
}
|
||
|
|
||
|
INLINE std::ostream &
|
||
|
operator << (std::ostream &out, const AnimControlCollection &collection) {
|
||
|
collection.output(out);
|
||
|
return out;
|
||
|
}
|