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

93 lines
2.2 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 eggJointData.I
* @author drose
* @date 2001-02-23
*/
/**
*
*/
INLINE EggJointData *EggJointData::
get_parent() const {
return _parent;
}
/**
*
*/
INLINE int EggJointData::
get_num_children() const {
return _children.size();
}
/**
*
*/
INLINE EggJointData *EggJointData::
get_child(int n) const {
nassertr(n >= 0 && n < (int)_children.size(), nullptr);
return _children[n];
}
/**
* Returns the first descendent joint found with the indicated name, or NULL
* if no joint has that name.
*/
INLINE EggJointData *EggJointData::
find_joint(const std::string &name) {
EggJointData *joint = find_joint_exact(name);
if (joint == nullptr) {
joint = find_joint_matches(name);
}
return joint;
}
/**
* Returns true if the joint knows its rest frame, false otherwise. In
* general, this will be true as long as the joint is included in at least one
* model file, or false if it appears only in animation files.
*/
INLINE bool EggJointData::
has_rest_frame() const {
return _has_rest_frame;
}
/**
* Returns true if the rest frames for different models differ in their
* initial value. This is not technically an error, but it is unusual enough
* to be suspicious.
*/
INLINE bool EggJointData::
rest_frames_differ() const {
return _rest_frames_differ;
}
/**
* Returns the rest frame of the joint. This is the matrix value that appears
* for the joint in each model file; it should be the same transform in each
* model.
*/
INLINE const LMatrix4d &EggJointData::
get_rest_frame() const {
nassertr(has_rest_frame(), LMatrix4d::ident_mat());
return _rest_frame;
}
/**
* Indicates an intention to change the parent of this joint to the indicated
* joint, or NULL to remove it from the hierarchy. The joint is not
* reparented immediately, but rather all of the joints are reparented at once
* when do_reparent() is called.
*/
INLINE void EggJointData::
reparent_to(EggJointData *new_parent) {
_new_parent = new_parent;
}