Panda3D

Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Friends | List of all members
PartBundle Class Reference

This is the root of a MovingPart hierarchy. More...

`#include "partBundle.h"`

Inheritance diagram for PartBundle:

## Public Types
enum | BlendType { BT_linear , BT_normalized_linear , BT_componentwise , BT_componentwise_quat }
typedef pmap< AnimControl *, PN_stdfloat > | ChannelBlend
Public Types inherited from PartGroup
enum | HierarchyMatchFlags { HMF_ok_part_extra = 0x01 , HMF_ok_anim_extra = 0x02 , HMF_ok_wrong_root_name = 0x04 }

## Public Member Functions
| PartBundle (const std::string &name="")
| Normally, a PartBundle constructor should not be called directly–it will get created when a PartBundleNode is created.
void | clear_anim_preload ()
| Removes any AnimPreloadTable associated with the PartBundle.
void | clear_control_effects ()
| Sets the control effect of all AnimControls to zero (but does not "stop" the AnimControls).
virtual int | complete_pointers (TypedWritable **p_list, BamReader *manager)
| Takes in a vector of pointers to TypedWritable objects that correspond to all the requests for pointers that this object made to BamReader.
virtual void | control_activated (AnimControl *control)
| Called by the AnimControl whenever it starts an animation.
bool | control_joint (const std::string &joint_name, PandaNode *node)
| Specifies that the joint with the indicated name should be animated with the transform on the indicated node.
void | control_removed (AnimControl *control)
| Called by the AnimControl when it destructs.
| CPT (AnimPreloadTable) get_anim_preload() const
bool | do_bind_anim (AnimControl *control, AnimBundle *anim, int hierarchy_match_flags, const PartSubset &subset)
| The internal implementation of bind_anim(), this receives a pointer to an uninitialized AnimControl and fills it in if the bind is successful.
virtual void | finalize (BamReader *manager)
| Called by the BamReader to perform any final actions needed for setting up the object after all objects have been read and all pointers have been completed.
virtual TypeHandle | force_init_type ()
bool | force_update ()
| Updates all the parts in the bundle to reflect the data for the current frame, whether we believe it needs it or not.
bool | freeze_joint (const std::string &joint_name, const LVecBase3 &pos, const LVecBase3 &hpr, const LVecBase3 &scale)
| Specifies that the joint with the indicated name should be frozen with the specified transform.
bool | freeze_joint (const std::string &joint_name, const TransformState *transform)
| Specifies that the joint with the indicated name should be frozen with the specified transform.
bool | freeze_joint (const std::string &joint_name, PN_stdfloat value)
| Specifies that the joint with the indicated name should be frozen with the specified transform.
bool | get_anim_blend_flag () const
BlendType | get_blend_type () const
PN_stdfloat | get_control_effect (AnimControl *control) const
| Returns the amount by which the character is affected by the indicated AnimControl and its associated animation.
bool | get_frame_blend_flag () const
PartBundleNode * | get_node (int n) const
int | get_num_nodes () const
const LMatrix4 & | get_root_xform () const
virtual TypeHandle | get_type () const
virtual PartGroup * | make_copy () const
| Allocates and returns a new copy of the node.
void | merge_anim_preloads (const PartBundle *other)
| Copies the contents of the other PartBundle's preload table into this one.
virtual void | output (std::ostream &out) const
| Writes a one-line description of the bundle.
| PT (AnimControl) bind_anim(AnimBundle *anim
| PT (AnimControl) load_bind_anim(Loader *loader
| PT (AnimPreloadTable) modify_anim_preload()
| PT (PartBundle) apply_transform(const TransformState *transform)
bool | release_joint (const std::string &joint_name)
| Releases the named joint from the effects of a previous call to freeze_joint() or control_joint().
void | set_anim_blend_flag (bool anim_blend_flag)
void | set_anim_preload (AnimPreloadTable *table)
| Replaces the AnimPreloadTable associated with the PartBundle.
void | set_blend_type (BlendType bt)
void | set_control_effect (AnimControl *control, PN_stdfloat effect)
| Sets the amount by which the character is affected by the indicated AnimControl (and its associated animation).
void | set_frame_blend_flag (bool frame_blend_flag)
void | set_root_xform (const LMatrix4 &root_xform)
void | set_update_delay (double delay)
| Specifies the minimum amount of time, in seconds, that should elapse between any two consecutive updates.
bool | update ()
| Updates all the parts in the bundle to reflect the data for the current frame (as set in each of the AnimControls).
void | wait_pending ()
| Blocks the current thread until all currently-pending AnimControls, with a nonzero control effect, have been loaded and are properly bound.
virtual void | write (std::ostream &out, int indent_level) const
| Writes a brief description of the bundle and all of its descendants.
virtual void | write_datagram (BamWriter *manager, Datagram &dg)
| Writes the contents of this object to the datagram for shipping out to a Bam file.
void | xform (const LMatrix4 &mat)
| Applies the indicated transform to the root of the animated hierarchy.
Public Member Functions inherited from PartGroup
| PartGroup (PartGroup *parent, const std::string &name)
| Creates the PartGroup, and adds it to the indicated parent.
virtual bool | apply_control (PandaNode *node)
| Specifies a node to influence this particular joint so that it will always hold the node's transform.
bool | apply_freeze (const TransformState *transform)
| Freezes this particular joint so that it will always hold the specified transform.
virtual bool | apply_freeze_matrix (const LVecBase3 &pos, const LVecBase3 &hpr, const LVecBase3 &scale)
| Freezes this particular joint so that it will always hold the specified transform.
virtual bool | apply_freeze_scalar (PN_stdfloat value)
| Freezes this particular joint so that it will always hold the specified transform.
bool | check_hierarchy (const AnimGroup *anim, const PartGroup *parent, int hierarchy_match_flags=0) const
| Walks the part hierarchy in tandem with the indicated anim hierarchy, and returns true if the hierarchies match, false otherwise.
virtual bool | clear_forced_channel ()
| Undoes the effect of a previous call to apply_freeze() or apply_control().
PartGroup * | copy_subgraph () const
| Allocates and returns a new copy of this node and of all of its children.
virtual void | determine_effective_channels (const CycleData *root_cdata)
| Should be called whenever the ChannelBlend values have changed, this recursively updates the _effective_channel member in each part.
virtual bool | do_update (PartBundle *root, const CycleData *root_cdata, PartGroup *parent, bool parent_changed, bool anim_changed, Thread *current_thread)
| Recursively update this particular part and all of its descendents for the current frame.
virtual void | do_xform (const LMatrix4 &mat, const LMatrix4 &inv_mat)
| Called by PartBundle::xform(), this indicates the indicated transform is being applied to the root joint.
PartGroup * | find_child (const std::string &name) const
| Returns the first descendant found with the indicated name, or NULL if no such descendant exists.
PartGroup * | get_child (int n) const
PartGroup * | get_child_named (const std::string &name) const
| Returns the first child found with the indicated name, or NULL if no such child exists.
virtual AnimChannelBase * | get_forced_channel () const
| Returns the AnimChannelBase that has been forced to this joint by a previous call to apply_freeze() or apply_control(), or NULL if no such channel has been applied.
int | get_num_children () const
virtual TypeHandle | get_value_type () const
| Returns the TypeHandle associated with the ValueType we are concerned with.
virtual bool | is_character_joint () const
| Returns true if this part is a CharacterJoint, false otherwise.
void | sort_descendants ()
| Sorts the children nodes at each level of the hierarchy into alphabetical order.
virtual void | write_with_value (std::ostream &out, int indent_level) const
| Writes a brief description of the group, showing its current value, and that of all of its descendants.
Public Member Functions inherited from TypedWritableReferenceCount
| TypedWritableReferenceCount (const TypedWritableReferenceCount &copy)
virtual ReferenceCount * | as_reference_count ()
| Returns the pointer cast to a ReferenceCount pointer, if it is in fact of that type.
void | operator= (const TypedWritableReferenceCount &copy)
Public Member Functions inherited from TypedWritable
| TypedWritable (const TypedWritable &copy)
vector_uchar | encode_to_bam_stream () const
| Converts the TypedWritable object into a single stream of data using a BamWriter, and returns that data as a bytes object.
bool | encode_to_bam_stream (vector_uchar &data, BamWriter *writer=nullptr) const
| Converts the TypedWritable object into a single stream of data using a BamWriter, and stores that data in the indicated string.
UpdateSeq | get_bam_modified () const
| Returns the current bam_modified counter.
void | mark_bam_modified ()
| Increments the bam_modified counter, so that this object will be invalidated and retransmitted on any open bam streams.
void | operator= (const TypedWritable &copy)
virtual bool | require_fully_complete () const
| Some objects require all of their nested pointers to have been completed before the objects themselves can be completed.
virtual void | update_bam_nested (BamWriter *manager)
| Called by the BamWriter when this object has not itself been modified recently, but it should check its nested objects for updates.
Public Member Functions inherited from TypedObject
| TypedObject (const TypedObject &copy)=default
TypedObject * | as_typed_object ()
| Returns the object, upcast (if necessary) to a TypedObject pointer.
const TypedObject * | as_typed_object () const
| Returns the object, upcast (if necessary) to a TypedObject pointer.
int | get_best_parent_from_Set (const std::set< int > &) const
int | get_type_index () const
| Returns the internal index number associated with this object's TypeHandle, a unique number for each different type.
bool | is_exact_type (TypeHandle handle) const
| Returns true if the current object is the indicated type exactly.
bool | is_of_type (TypeHandle handle) const
| Returns true if the current object is or derives from the indicated type.
TypedObject & | operator= (const TypedObject &copy)=default
Public Member Functions inherited from MemoryBase
void | operator delete (void *, void *)
void | operator delete (void *ptr)
void | operator delete[] (void *, void *)
void | operator delete[] (void *ptr)
void * | operator new (size_t size)
void * | operator new (size_t size, void *ptr)
void * | operator new[] (size_t size)
void * | operator new[] (size_t size, void *ptr)
Public Member Functions inherited from ReferenceCount
int | get_ref_count () const
WeakReferenceList * | get_weak_list () const
| Returns the WeakReferenceList associated with this ReferenceCount object.
bool | has_weak_list () const
| Returns true if this particular ReferenceCount object has a WeakReferenceList created, false otherwise.
void | local_object ()
| This function should be called, once, immediately after creating a new instance of some ReferenceCount-derived object on the stack.
void | ref () const
| Explicitly increments the reference count.
bool | ref_if_nonzero () const
| Atomically increases the reference count of this object if it is not zero.
bool | test_ref_count_integrity () const
| Does some easy checks to make sure that the reference count isn't completely bogus.
bool | test_ref_count_nonzero () const
| Does some easy checks to make sure that the reference count isn't zero, or completely bogus.
virtual bool | unref () const
| Explicitly decrements the reference count.
bool | unref_if_one () const
| Atomically decreases the reference count of this object if it is one.
WeakReferenceList * | weak_ref ()
| Adds the indicated PointerToVoid as a weak reference to this object.
void | weak_unref ()
| Removes the indicated PointerToVoid as a weak reference to this object.
Public Member Functions inherited from Namable
| Namable (const std::string &initial_name="")
void | clear_name ()
| Resets the Namable's name to empty.
const std::string & | get_name () const
bool | has_name () const
| Returns true if the Namable has a nonempty name set, false if the name is empty.
void | output (std::ostream &out) const
| Outputs the Namable.
void | set_name (const std::string &name)

## Static Public Member Functions
static TypeHandle | get_class_type ()
static void | init_type ()
static void | register_with_read_factory ()
| Factory method to generate a PartBundle object.
Static Public Member Functions inherited from PartGroup
static TypeHandle | get_class_type ()
static void | init_type ()
static TypedWritable * | make_PartGroup (const FactoryParams &params)
| Factory method to generate a PartGroup object.
static void | register_with_read_factory ()
| Factory method to generate a PartGroup object.
Static Public Member Functions inherited from TypedWritableReferenceCount
static TypeHandle | get_class_type ()
static void | init_type ()
static | PT (TypedWritableReferenceCount) decode_from_bam_stream(vector_uchar data
Static Public Member Functions inherited from TypedWritable
static bool | decode_raw_from_bam_stream (TypedWritable *&ptr, ReferenceCount *&ref_ptr, vector_uchar data, BamReader *reader=nullptr)
| Reads the bytes created by a previous call to encode_to_bam_stream(), and extracts the single object on those bytes.
static TypeHandle | get_class_type ()
static void | init_type ()
Static Public Member Functions inherited from TypedObject
static TypeHandle | get_class_type ()
static void | init_type ()
| This function is declared non-inline to work around a compiler bug in g++ 2.96.
Static Public Member Functions inherited from ReferenceCount
static TypeHandle | get_class_type ()
static void | init_type ()
Static Public Member Functions inherited from Namable
static TypeHandle | get_class_type ()
static void | init_type ()

## Public Attributes
const Filename int const PartSubset bool | allow_async
const Filename & | filename
| get_anim_blend_flag
| Returns whether the character allows multiple different animations to be bound simultaneously.
| get_blend_type
| Returns the algorithm that is used when blending multiple frames or multiple animations together, when either anim_blend_flag or frame_blend_flag is set to true.
| get_frame_blend_flag
| Returns whether the character interpolates (blends) between two sequential animation frames, or whether it holds the current frame until the next one is ready.
| get_node
| Returns the nth PartBundleNode associated with this PartBundle.
| get_num_nodes
| Returns the number of PartBundleNodes that contain a pointer to this PartBundle.
| get_root_xform
| Returns the transform matrix which is implicitly applied at the root of the animated hierarchy.
int | hierarchy_match_flags = 0
const Filename int | hierarchy_match_flags
| set_anim_blend_flag
| Defines the way the character responds to multiple calls to set_control_effect()).
| set_blend_type
| Defines the algorithm that is used when blending multiple frames or multiple animations together, when either anim_blend_flag or frame_blend_flag is set to true.
| set_frame_blend_flag
| Specifies whether the character interpolates (blends) between two sequential frames of an active animation, showing a smooth intra-frame motion, or whether it holds each frame until the next frame is ready, showing precisely the specified animation.
| set_root_xform
| Specifies the transform matrix which is implicitly applied at the root of the animated hierarchy.
int const PartSubset & | subset = PartSubset())
const Filename int const PartSubset & | subset
Public Attributes inherited from PartGroup
| get_child
| Returns the nth child of the group.
| get_num_children
| Returns the number of child nodes of the group.
Public Attributes inherited from TypedWritableReferenceCount
static BamReader * | reader = nullptr)
Public Attributes inherited from TypedObject
| get_type
Public Attributes inherited from ReferenceCount
| get_ref_count
| Returns the current reference count.
Public Attributes inherited from Namable
| get_name
| set_name

## Friends
class | Character
class | MovingPartBase
class | MovingPartMatrix
class | MovingPartScalar
class | PartBundleNode

## Additional Inherited Members
Static Public Attributes inherited from TypedWritable
static TypedWritable *const | Null = nullptr

## Detailed Description

This is the root of a MovingPart hierarchy.

It defines the hierarchy of moving parts that make up an animatable object.

Definition at line 46 of file partBundle.h.

## Member Typedef Documentation

## ◆ ChannelBlend

typedef pmap<AnimControl *, PN_stdfloat> PartBundle::ChannelBlend

Definition at line 51 of file partBundle.h.

## Member Enumeration Documentation

## ◆ BlendType

enum PartBundle::BlendType

Definition at line 71 of file partBundle.h.

## Constructor & Destructor Documentation

## ◆ PartBundle()

PartBundle::PartBundle | ( | const std::string & | name = "" | ) |
| explicit

Normally, a PartBundle constructor should not be called directly–it will get created when a PartBundleNode is created.

Definition at line 71 of file partBundle.cxx.

## Member Function Documentation

## ◆ clear_anim_preload()

void PartBundle::clear_anim_preload | ( |  | ) |
| inline

Removes any AnimPreloadTable associated with the PartBundle.

Definition at line 44 of file partBundle.I.

## ◆ clear_control_effects()

void PartBundle::clear_control_effects | ( |  | ) |

Sets the control effect of all AnimControls to zero (but does not "stop" the AnimControls).

The character will no longer be affected by any animation, and will return to its default pose (unless restore-initial-pose is false).

The AnimControls which are no longer associated will not be using any CPU cycles, but they may still be in the "playing" state; if they are later reassociated with the PartBundle they will resume at their current frame as if they'd been running all along.

Definition at line 196 of file partBundle.cxx.

References PartGroup::determine_effective_channels(), and Thread::get_current_pipeline_stage.

## ◆ complete_pointers()

int PartBundle::complete_pointers | ( | TypedWritable ** | p_list,
|  | BamReader * | manager )
| virtual

Takes in a vector of pointers to TypedWritable objects that correspond to all the requests for pointers that this object made to BamReader.

Reimplemented from PartGroup.

Definition at line 780 of file partBundle.cxx.

References PartGroup::complete_pointers(), and BamReader::get_file_minor_ver().

## ◆ control_activated()

void PartBundle::control_activated | ( | AnimControl * | control | ) |
| virtual

Called by the AnimControl whenever it starts an animation.

This is just a hook so the bundle can do something, if necessary, before the animation starts.

Definition at line 532 of file partBundle.cxx.

References Thread::get_current_pipeline_stage, and AnimControl::get_part().

## ◆ control_joint()

bool PartBundle::control_joint | ( | const std::string & | joint_name,
|  | PandaNode * | node )

Specifies that the joint with the indicated name should be animated with the transform on the indicated node.

It will henceforth always follow the node's transform, regardless of any animations that may subsequently be bound to the joint.

Returns true if the joint is successfully controlled, or false if the named child is not a joint (or slider) or does not exist.

Definition at line 435 of file partBundle.cxx.

References PartGroup::apply_control(), and PartGroup::find_child().

## ◆ control_removed()

void PartBundle::control_removed | ( | AnimControl * | control | ) |

Called by the AnimControl when it destructs.

This needs to remove the AnimControl pointer from all pipeline stages.

Definition at line 551 of file partBundle.cxx.

References PartGroup::determine_effective_channels(), and AnimControl::get_part().

## ◆ do_bind_anim()

bool PartBundle::do_bind_anim | ( | AnimControl * | control,
|  | AnimBundle * | anim,
|  | int | hierarchy_match_flags,
|  | const PartSubset & | subset )

The internal implementation of bind_anim(), this receives a pointer to an uninitialized AnimControl and fills it in if the bind is successful.

Returns true if successful, false otherwise.

Definition at line 578 of file partBundle.cxx.

References BitArray::all_on(), PartGroup::check_hierarchy(), PartGroup::determine_effective_channels(), Thread::get_current_pipeline_stage, and AnimControl::setup_anim().

## ◆ finalize()

void PartBundle::finalize | ( | BamReader * | manager | ) |
| virtual

Called by the BamReader to perform any final actions needed for setting up the object after all objects have been read and all pointers have been completed.

Reimplemented from TypedWritable.

Definition at line 758 of file partBundle.cxx.

References PartGroup::do_update(), and Thread::get_current_thread.

## ◆ force_init_type()

virtual TypeHandle PartBundle::force_init_type | ( |  | ) |
| inline virtual

Reimplemented from PartGroup.

Definition at line 226 of file partBundle.h.

## ◆ force_update()

bool PartBundle::force_update | ( |  | ) |

Updates all the parts in the bundle to reflect the data for the current frame, whether we believe it needs it or not.

Definition at line 508 of file partBundle.cxx.

References PartGroup::do_update(), Thread::get_current_thread, and AnimControl::mark_channels().

## ◆ freeze_joint() [1/3]

bool PartBundle::freeze_joint | ( | const std::string & | joint_name,
|  | const LVecBase3 & | pos,
|  | const LVecBase3 & | hpr,
|  | const LVecBase3 & | scale )

Specifies that the joint with the indicated name should be frozen with the specified transform.

It will henceforth always hold this fixed transform, regardless of any animations that may subsequently be bound to the joint.

Returns true if the joint is successfully frozen, or false if the named child is not a joint (or slider) or does not exist.

Definition at line 392 of file partBundle.cxx.

References PartGroup::apply_freeze_matrix(), and PartGroup::find_child().

## ◆ freeze_joint() [2/3]

bool PartBundle::freeze_joint | ( | const std::string & | joint_name,
|  | const TransformState * | transform )

Specifies that the joint with the indicated name should be frozen with the specified transform.

It will henceforth always hold this fixed transform, regardless of any animations that may subsequently be bound to the joint.

Returns true if the joint is successfully frozen, or false if the named child is not a joint (or slider) or does not exist.

Definition at line 371 of file partBundle.cxx.

References PartGroup::apply_freeze(), and PartGroup::find_child().

## ◆ freeze_joint() [3/3]

bool PartBundle::freeze_joint | ( | const std::string & | joint_name,
|  | PN_stdfloat | value )

Specifies that the joint with the indicated name should be frozen with the specified transform.

It will henceforth always hold this fixed transform, regardless of any animations that may subsequently be bound to the joint.

Returns true if the joint is successfully frozen, or false if the named child is not a joint (or slider) or does not exist.

Definition at line 413 of file partBundle.cxx.

References PartGroup::apply_freeze_scalar(), and PartGroup::find_child().

## ◆ get_class_type()

static TypeHandle PartBundle::get_class_type | ( |  | ) |
| inline static

Definition at line 227 of file partBundle.h.

## ◆ get_control_effect()

PN_stdfloat PartBundle::get_control_effect | ( | AnimControl * | control | ) | const
| inline

Returns the amount by which the character is affected by the indicated AnimControl and its associated animation.

See set_control_effect().

Definition at line 196 of file partBundle.I.

## ◆ get_type()

virtual TypeHandle PartBundle::get_type | ( |  | ) | const
| inline virtual

Reimplemented from PartGroup.

Definition at line 223 of file partBundle.h.

## ◆ init_type()

static void PartBundle::init_type | ( |  | ) |
| inline static

Definition at line 230 of file partBundle.h.

## ◆ make_copy()

PartGroup * PartBundle::make_copy | ( |  | ) | const
| virtual

Allocates and returns a new copy of the node.

Children are not copied, but see copy_subgraph().

Reimplemented from PartGroup.

Definition at line 82 of file partBundle.cxx.

## ◆ merge_anim_preloads()

void PartBundle::merge_anim_preloads | ( | const PartBundle * | other | ) |

Copies the contents of the other PartBundle's preload table into this one.

Definition at line 90 of file partBundle.cxx.

Referenced by Character::merge_bundles().

## ◆ output()

void PartBundle::output | ( | std::ostream & | out | ) | const
| virtual

Writes a one-line description of the bundle.

Definition at line 213 of file partBundle.cxx.

## ◆ register_with_read_factory()

void PartBundle::register_with_read_factory | ( |  | ) |
| static

Factory method to generate a PartBundle object.

Definition at line 828 of file partBundle.cxx.

References BamReader::get_factory(), and Factory< Type >::register_factory().

## ◆ release_joint()

bool PartBundle::release_joint | ( | const std::string & | joint_name | ) |

Releases the named joint from the effects of a previous call to freeze_joint() or control_joint().

It will henceforth once again follow whatever transforms are dictated by the animation.

Returns true if the joint is released, or false if the named child was not previously controlled or frozen, or it does not exist.

Definition at line 456 of file partBundle.cxx.

References PartGroup::clear_forced_channel(), and PartGroup::find_child().

## ◆ set_anim_preload()

void PartBundle::set_anim_preload | ( | AnimPreloadTable * | table | ) |
| inline

Replaces the AnimPreloadTable associated with the PartBundle.

Definition at line 36 of file partBundle.I.

## ◆ set_control_effect()

void PartBundle::set_control_effect | ( | AnimControl * | control,
|  | PN_stdfloat | effect )
| inline

Sets the amount by which the character is affected by the indicated AnimControl (and its associated animation).

Normally, this will only be zero or one. Zero indicates the animation does not affect the character, and one means it does.

If the _anim_blend_flag is not false (see set_anim_blend_flag()), it is possible to have multiple AnimControls in effect simultaneously. In this case, the effect is a weight that indicates the relative importance of each AnimControl to the final animation.

Definition at line 184 of file partBundle.I.

References Thread::get_current_pipeline_stage.

## ◆ set_update_delay()

void PartBundle::set_update_delay | ( | double | delay | ) |
| inline

Specifies the minimum amount of time, in seconds, that should elapse between any two consecutive updates.

This is normally used by Character::set_lod_animation(), and should not be called directly.

Definition at line 207 of file partBundle.I.

## ◆ update()

bool PartBundle::update | ( |  | ) |

Updates all the parts in the bundle to reflect the data for the current frame (as set in each of the AnimControls).

Returns true if any part has changed as a result of this, or false otherwise.

Definition at line 476 of file partBundle.cxx.

References PartGroup::do_update(), Thread::get_current_thread, ClockObject::get_frame_time, ClockObject::get_global_clock(), and AnimControl::mark_channels().

## ◆ wait_pending()

void PartBundle::wait_pending | ( |  | ) |

Blocks the current thread until all currently-pending AnimControls, with a nonzero control effect, have been loaded and are properly bound.

Definition at line 348 of file partBundle.cxx.

References AnimControl::wait_pending().

## ◆ write()

void PartBundle::write | ( | std::ostream & | out,
|  | int | indent_level ) const
| virtual

Writes a brief description of the bundle and all of its descendants.

Reimplemented from PartGroup.

Definition at line 221 of file partBundle.cxx.

References indent().

## ◆ write_datagram()

void PartBundle::write_datagram | ( | BamWriter * | manager,
|  | Datagram & | dg )
| virtual

Writes the contents of this object to the datagram for shipping out to a Bam file.

Reimplemented from PartGroup.

Definition at line 769 of file partBundle.cxx.

References BamWriter::write_cdata(), PartGroup::write_datagram(), and BamWriter::write_pointer().

## ◆ xform()

void PartBundle::xform | ( | const LMatrix4 & | mat | ) |
| inline

Applies the indicated transform to the root of the animated hierarchy.

Definition at line 135 of file partBundle.I.

References PartGroup::do_xform(), and Thread::get_current_pipeline_stage.

Referenced by PartBundleNode::xform().

## Friends And Related Symbol Documentation

## ◆ Character

friend class Character
| friend

Definition at line 240 of file partBundle.h.

## ◆ MovingPartBase

friend class MovingPartBase
| friend

Definition at line 241 of file partBundle.h.

## ◆ MovingPartMatrix

friend class MovingPartMatrix
| friend

Definition at line 242 of file partBundle.h.

## ◆ MovingPartScalar

friend class MovingPartScalar
| friend

Definition at line 243 of file partBundle.h.

## ◆ PartBundleNode

friend class PartBundleNode
| friend

Definition at line 239 of file partBundle.h.

## Member Data Documentation

## ◆ allow_async

const Filename int const PartSubset bool PartBundle::allow_async

Definition at line 136 of file partBundle.h.

## ◆ filename

const Filename& PartBundle::filename

Definition at line 133 of file partBundle.h.

## ◆ get_anim_blend_flag

bool PartBundle::get_anim_blend_flag
| inline

Returns whether the character allows multiple different animations to be bound simultaneously.

See set_anim_blend_flag().

Definition at line 117 of file partBundle.h.

## ◆ get_blend_type

PartBundle::BlendType PartBundle::get_blend_type
| inline

Returns the algorithm that is used when blending multiple frames or multiple animations together, when either anim_blend_flag or frame_blend_flag is set to true.

Definition at line 116 of file partBundle.h.

## ◆ get_frame_blend_flag

bool PartBundle::get_frame_blend_flag
| inline

Returns whether the character interpolates (blends) between two sequential animation frames, or whether it holds the current frame until the next one is ready.

See set_frame_blend_flag().

Definition at line 118 of file partBundle.h.

## ◆ get_node

PartBundleNode * PartBundle::get_node
| inline

Returns the nth PartBundleNode associated with this PartBundle.

Definition at line 114 of file partBundle.h.

Referenced by CharacterJointBundle::get_node().

## ◆ get_num_nodes

int PartBundle::get_num_nodes
| inline

Returns the number of PartBundleNodes that contain a pointer to this PartBundle.

Definition at line 114 of file partBundle.h.

Referenced by PartBundleNode::xform().

## ◆ get_root_xform

const LMatrix4 & PartBundle::get_root_xform
| inline

Returns the transform matrix which is implicitly applied at the root of the animated hierarchy.

Definition at line 119 of file partBundle.h.

Referenced by CharacterJoint::update_internals().

## ◆ hierarchy_match_flags [1/2]

int PartBundle::hierarchy_match_flags = 0

Definition at line 130 of file partBundle.h.

## ◆ hierarchy_match_flags [2/2]

const Filename int PartBundle::hierarchy_match_flags

Definition at line 134 of file partBundle.h.

## ◆ set_anim_blend_flag

void PartBundle::set_anim_blend_flag

Defines the way the character responds to multiple calls to set_control_effect()).

By default, this flag is set false, which disallows multiple animations. When this flag is false, it is not necessary to explicitly set the control_effect when starting an animation; starting the animation will implicitly remove the control_effect from the previous animation and set it on the current one.

However, if this flag is set true, the control_effect must be explicitly set via set_control_effect() whenever an animation is to affect the character.

Definition at line 117 of file partBundle.h.

## ◆ set_blend_type

void PartBundle::set_blend_type
| inline

Defines the algorithm that is used when blending multiple frames or multiple animations together, when either anim_blend_flag or frame_blend_flag is set to true.

See partBundle.h for a description of the meaning of each of the BlendType values.

Definition at line 116 of file partBundle.h.

## ◆ set_frame_blend_flag

void PartBundle::set_frame_blend_flag
| inline

Specifies whether the character interpolates (blends) between two sequential frames of an active animation, showing a smooth intra-frame motion, or whether it holds each frame until the next frame is ready, showing precisely the specified animation.

When this value is false, the character holds each frame until the next is ready. When this is true, the character will interpolate between two consecutive frames of animation for each frame the animation is onscreen, according to the amount of time elapsed between the frames.

The default value of this flag is determined by the interpolate-frames Config.prc variable.

Use set_blend_type() to change the algorithm that the character uses to interpolate matrix positions.

Definition at line 118 of file partBundle.h.

## ◆ set_root_xform

void PartBundle::set_root_xform
| inline

Specifies the transform matrix which is implicitly applied at the root of the animated hierarchy.

Definition at line 119 of file partBundle.h.

## ◆ subset [1/2]

int const PartSubset& PartBundle::subset = PartSubset())

Definition at line 131 of file partBundle.h.

## ◆ subset [2/2]

const Filename int const PartSubset& PartBundle::subset

Definition at line 135 of file partBundle.h.

The documentation for this class was generated from the following files:

- panda/src/chan/partBundle.h
- panda/src/chan/partBundle.cxx
- panda/src/chan/partBundle.I