From 594e6b394b199c9295e6c0ed728b2c82c6f94e47 Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 28 Nov 2018 16:46:49 +0100 Subject: [PATCH] chan: add various property interfaces to animation system --- panda/src/chan/animBundle.h | 3 +++ panda/src/chan/animBundleNode.h | 2 ++ panda/src/chan/animChannelMatrixDynamic.h | 2 ++ panda/src/chan/animChannelMatrixXfmTable.h | 2 ++ panda/src/chan/animChannelScalarDynamic.I | 22 +++++++++++++++++++++ panda/src/chan/animChannelScalarDynamic.cxx | 13 +++++------- panda/src/chan/animChannelScalarDynamic.h | 5 +++++ panda/src/chan/animChannelScalarTable.h | 2 ++ 8 files changed, 43 insertions(+), 8 deletions(-) diff --git a/panda/src/chan/animBundle.h b/panda/src/chan/animBundle.h index 659f15e58c..77c07e26d7 100644 --- a/panda/src/chan/animBundle.h +++ b/panda/src/chan/animBundle.h @@ -38,6 +38,9 @@ PUBLISHED: INLINE double get_base_frame_rate() const; INLINE int get_num_frames() const; + MAKE_PROPERTY(base_frame_rate, get_base_frame_rate); + MAKE_PROPERTY(num_frames, get_num_frames); + virtual void output(std::ostream &out) const; protected: diff --git a/panda/src/chan/animBundleNode.h b/panda/src/chan/animBundleNode.h index fbf9dcbbe2..6152d37707 100644 --- a/panda/src/chan/animBundleNode.h +++ b/panda/src/chan/animBundleNode.h @@ -41,6 +41,8 @@ public: PUBLISHED: INLINE AnimBundle *get_bundle() const; + MAKE_PROPERTY(bundle, get_bundle); + static AnimBundle *find_anim_bundle(PandaNode *root); private: diff --git a/panda/src/chan/animChannelMatrixDynamic.h b/panda/src/chan/animChannelMatrixDynamic.h index 589b2e7a10..5602f027c6 100644 --- a/panda/src/chan/animChannelMatrixDynamic.h +++ b/panda/src/chan/animChannelMatrixDynamic.h @@ -57,6 +57,8 @@ PUBLISHED: INLINE const TransformState *get_value_transform() const; INLINE PandaNode *get_value_node() const; + MAKE_PROPERTY(value_node, get_value_node, set_value_node); + protected: virtual AnimGroup *make_copy(AnimGroup *parent) const; diff --git a/panda/src/chan/animChannelMatrixXfmTable.h b/panda/src/chan/animChannelMatrixXfmTable.h index a5923e59c0..047f145453 100644 --- a/panda/src/chan/animChannelMatrixXfmTable.h +++ b/panda/src/chan/animChannelMatrixXfmTable.h @@ -59,6 +59,8 @@ PUBLISHED: INLINE bool has_table(char table_id) const; INLINE void clear_table(char table_id); + MAKE_MAP_PROPERTY(tables, has_table, get_table, set_table, clear_table); + public: virtual void write(std::ostream &out, int indent_level) const; diff --git a/panda/src/chan/animChannelScalarDynamic.I b/panda/src/chan/animChannelScalarDynamic.I index e165b58b44..549b9bfad7 100644 --- a/panda/src/chan/animChannelScalarDynamic.I +++ b/panda/src/chan/animChannelScalarDynamic.I @@ -10,3 +10,25 @@ * @author drose * @date 2003-10-20 */ + +/** + * Gets the value of the channel. This will return the value explicitly + * specified by set_value() unless a value node was specified using + * set_value_node(). + */ +INLINE PN_stdfloat AnimChannelScalarDynamic:: +get_value() const { + if (_value_node != nullptr) { + return _value->get_pos()[0]; + } else { + return _float_value; + } +} + +/** + * Returns the node that was set via set_value_node(), if any. + */ +INLINE PandaNode *AnimChannelScalarDynamic:: +get_value_node() const { + return _value_node; +} diff --git a/panda/src/chan/animChannelScalarDynamic.cxx b/panda/src/chan/animChannelScalarDynamic.cxx index 8a9835a550..c69ad0e6b9 100644 --- a/panda/src/chan/animChannelScalarDynamic.cxx +++ b/panda/src/chan/animChannelScalarDynamic.cxx @@ -84,16 +84,12 @@ has_changed(int, double, int, double) { */ void AnimChannelScalarDynamic:: get_value(int, PN_stdfloat &value) { - if (_value_node != nullptr) { - value = _value->get_pos()[0]; - - } else { - value = _float_value; - } + value = get_value(); } /** - * Explicitly sets the value. + * Explicitly sets the value. This will remove any node assigned via + * set_value_node(). */ void AnimChannelScalarDynamic:: set_value(PN_stdfloat value) { @@ -104,7 +100,8 @@ set_value(PN_stdfloat value) { /** * Specifies a node whose transform will be queried each frame to implicitly - * specify the transform of this joint. + * specify the transform of this joint. This will override the values set by + * set_value(). */ void AnimChannelScalarDynamic:: set_value_node(PandaNode *value_node) { diff --git a/panda/src/chan/animChannelScalarDynamic.h b/panda/src/chan/animChannelScalarDynamic.h index ab009a4f1f..7455adb4b9 100644 --- a/panda/src/chan/animChannelScalarDynamic.h +++ b/panda/src/chan/animChannelScalarDynamic.h @@ -41,11 +41,16 @@ public: virtual bool has_changed(int last_frame, double last_frac, int this_frame, double this_frac); virtual void get_value(int frame, PN_stdfloat &value); + INLINE PN_stdfloat get_value() const; + INLINE PandaNode *get_value_node() const; PUBLISHED: void set_value(PN_stdfloat value); void set_value_node(PandaNode *node); + MAKE_PROPERTY(value, get_value, set_value); + MAKE_PROPERTY(value_node, get_value_node, set_value_node); + protected: virtual AnimGroup *make_copy(AnimGroup *parent) const; diff --git a/panda/src/chan/animChannelScalarTable.h b/panda/src/chan/animChannelScalarTable.h index e150d8d82e..10e54815e3 100644 --- a/panda/src/chan/animChannelScalarTable.h +++ b/panda/src/chan/animChannelScalarTable.h @@ -44,6 +44,8 @@ PUBLISHED: INLINE bool has_table() const; INLINE void clear_table(); + MAKE_PROPERTY2(table, has_table, get_table, set_table, clear_table); + public: virtual void write(std::ostream &out, int indent_level) const;