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 */
95 TypedWritable *AnimBundle::
96 make_AnimBundle(const FactoryParams &params) {
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::
110 register_with_read_factory() {
111 BamReader::get_factory()->register_factory(get_class_type(), make_AnimBundle);
112 }
PT
PT(AnimBundle) AnimBundle
Returns a full copy of the bundle and its entire tree of nested AnimGroups.
Definition: animBundle.cxx:44
animBundle.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
bamReader.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
parse_params
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
bamWriter.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
AnimBundle
This is the root of an AnimChannel hierarchy.
Definition: animBundle.h:29
AnimBundle::make_AnimBundle
static TypedWritable * make_AnimBundle(const FactoryParams &params)
Factory method to generate a AnimBundle object.
Definition: animBundle.cxx:96
AnimBundle::get_base_frame_rate
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
AnimBundle::register_with_read_factory
static void register_with_read_factory()
Factory method to generate a AnimBundle object.
Definition: animBundle.cxx:110
AnimBundle::output
virtual void output(std::ostream &out) const
Writes a one-line description of the group.
AnimBundle::write_datagram
virtual void write_datagram(BamWriter *manager, Datagram &me)
Writes the contents of this object to the datagram for shipping out to a Bam file.
AnimBundle::get_num_frames
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
AnimGroup
This is the base class for AnimChannel and AnimBundle.
Definition: animGroup.h:33
AnimGroup::write_datagram
virtual void write_datagram(BamWriter *manager, Datagram &me)
Writes the contents of this object to the datagram for shipping out to a Bam file.
BamReader
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
Definition: bamReader.h:110
BamReader::get_factory
static WritableFactory * get_factory()
Returns the global WritableFactory for generating TypedWritable objects.
Definition: bamReader.I:177
BamWriter
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
Definition: bamWriter.h:63
DatagramIterator
A class to retrieve the individual data elements previously stored in a Datagram.
Definition: datagramIterator.h:27
DatagramIterator::get_stdfloat
PN_stdfloat get_stdfloat()
Extracts either a 32-bit or a 64-bit floating-point number, according to Datagram::set_stdfloat_doubl...
Definition: datagramIterator.I:242
DatagramIterator::get_uint16
uint16_t get_uint16()
Extracts an unsigned 16-bit integer.
Definition: datagramIterator.I:145
Datagram
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition: datagram.h:38
Datagram::add_stdfloat
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
Datagram::add_uint16
void add_uint16(uint16_t value)
Adds an unsigned 16-bit integer to the datagram.
Definition: datagram.I:85
FactoryParams
An instance of this class is passed to the Factory when requesting it to do its business and construc...
Definition: factoryParams.h:36
Factory::register_factory
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
TypeHandle
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
TypedWritable
Base class for objects that can be written to and read from Bam files.
Definition: typedWritable.h:35
datagramIterator.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
datagram.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
indent.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.