Panda3D
animBundle.cxx
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file animBundle.cxx
10  * @author drose
11  * @date 1999-02-21
12  */
13 
14 #include "animBundle.h"
15 
16 #include "indent.h"
17 #include "datagram.h"
18 #include "datagramIterator.h"
19 #include "bamReader.h"
20 #include "bamWriter.h"
21 
22 TypeHandle AnimBundle::_type_handle;
23 
24 /**
25  * Creates a new AnimBundle, just like this one, without copying any children.
26  * The new copy is added to the indicated parent. Intended to be called by
27  * make_copy() only.
28  */
29 AnimBundle::
30 AnimBundle(AnimGroup *parent, const AnimBundle &copy) :
31  AnimGroup(parent, copy),
32  _fps(copy._fps),
33  _num_frames(copy._num_frames)
34 {
35  nassertv(_root == nullptr);
36  _root = this;
37 }
38 
39 /**
40  * Returns a full copy of the bundle and its entire tree of nested AnimGroups.
41  * However, the actual data stored in the leaves--that is, animation tables,
42  * such as those stored in an AnimChannelMatrixXfmTable--will be shared.
43  */
44 PT(AnimBundle) AnimBundle::
45 copy_bundle() const {
46  PT(AnimGroup) group = copy_subtree(nullptr);
47  return DCAST(AnimBundle, group.p());
48 }
49 
50 /**
51  * Writes a one-line description of the bundle.
52  */
53 void AnimBundle::
54 output(std::ostream &out) const {
55  out << get_type() << " " << get_name() << ", " << get_num_frames()
56  << " frames at " << get_base_frame_rate() << " fps";
57 }
58 
59 /**
60  * Returns a copy of this object, and attaches it to the indicated parent
61  * (which may be NULL only if this is an AnimBundle). Intended to be called
62  * by copy_subtree() only.
63  */
64 AnimGroup *AnimBundle::
65 make_copy(AnimGroup *parent) const {
66  return new AnimBundle(parent, *this);
67 }
68 
69 /**
70  * Function to write the important information in the particular object to a
71  * Datagram
72  */
73 void AnimBundle::
74 write_datagram(BamWriter *manager, Datagram &me) {
75  AnimGroup::write_datagram(manager, me);
76  me.add_stdfloat(_fps);
77  me.add_uint16(_num_frames);
78 }
79 
80 /**
81  * Function that reads out of the datagram (or asks manager to read) all of
82  * the data that is needed to re-create this object and stores it in the
83  * appropiate place
84  */
85 void AnimBundle::
86 fillin(DatagramIterator &scan, BamReader *manager) {
87  AnimGroup::fillin(scan, manager);
88  _fps = scan.get_stdfloat();
89  _num_frames = scan.get_uint16();
90 }
91 
92 /**
93  * Factory method to generate a AnimBundle object
94  */
97  AnimBundle *me = new AnimBundle;
98  DatagramIterator scan;
99  BamReader *manager;
100 
101  parse_params(params, scan, manager);
102  me->fillin(scan, manager);
103  return me;
104 }
105 
106 /**
107  * Factory method to generate a AnimBundle object
108  */
109 void AnimBundle::
112 }
virtual void output(std::ostream &out) const
Writes a one-line description of the group.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
get_num_frames
Returns the number of frames of animation, or 0 if the animation has no fixed number of frames.
Definition: animBundle.h:42
PN_stdfloat get_stdfloat()
Extracts either a 32-bit or a 64-bit floating-point number, according to Datagram::set_stdfloat_doubl...
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
Definition: bamReader.h:110
This is the root of an AnimChannel hierarchy.
Definition: animBundle.h:29
virtual void write_datagram(BamWriter *manager, Datagram &me)
Writes the contents of this object to the datagram for shipping out to a Bam file.
Base class for objects that can be written to and read from Bam files.
Definition: typedWritable.h:35
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
virtual void write_datagram(BamWriter *manager, Datagram &me)
Writes the contents of this object to the datagram for shipping out to a Bam file.
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
Definition: bamWriter.h:63
static TypedWritable * make_AnimBundle(const FactoryParams &params)
Factory method to generate a AnimBundle object.
Definition: animBundle.cxx:96
static void register_with_read_factory()
Factory method to generate a AnimBundle object.
Definition: animBundle.cxx:110
void add_stdfloat(PN_stdfloat value)
Adds either a 32-bit or a 64-bit floating-point number, according to set_stdfloat_double().
Definition: datagram.I:133
void parse_params(const FactoryParams &params, DatagramIterator &scan, BamReader *&manager)
Takes in a FactoryParams, passed from a WritableFactory into any TypedWritable's make function,...
Definition: bamReader.I:275
void add_uint16(uint16_t value)
Adds an unsigned 16-bit integer to the datagram.
Definition: datagram.I:85
get_base_frame_rate
Returns the ideal number of frames per second of the animation, when it is running at normal speed.
Definition: animBundle.h:41
This is the base class for AnimChannel and AnimBundle.
Definition: animGroup.h:33
An instance of this class is passed to the Factory when requesting it to do its business and construc...
Definition: factoryParams.h:36
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void register_factory(TypeHandle handle, CreateFunc *func, void *user_data=nullptr)
Registers a new kind of thing the Factory will be able to create.
Definition: factory.I:73
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
static WritableFactory * get_factory()
Returns the global WritableFactory for generating TypedWritable objects.
Definition: bamReader.I:177
uint16_t get_uint16()
Extracts an unsigned 16-bit integer.
PT(AnimBundle) AnimBundle
Returns a full copy of the bundle and its entire tree of nested AnimGroups.
Definition: animBundle.cxx:44
A class to retrieve the individual data elements previously stored in a Datagram.
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition: datagram.h:38
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.