historical/toontown-classic.git/panda/include/animControlCollection.I
2024-01-16 11:20:27 -06:00

174 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;
}