chan: add various property interfaces to animation system

This commit is contained in:
rdb 2018-11-28 16:46:49 +01:00
parent 69f8f8b7b7
commit 594e6b394b
8 changed files with 43 additions and 8 deletions

View File

@ -38,6 +38,9 @@ PUBLISHED:
INLINE double get_base_frame_rate() const; INLINE double get_base_frame_rate() const;
INLINE int get_num_frames() 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; virtual void output(std::ostream &out) const;
protected: protected:

View File

@ -41,6 +41,8 @@ public:
PUBLISHED: PUBLISHED:
INLINE AnimBundle *get_bundle() const; INLINE AnimBundle *get_bundle() const;
MAKE_PROPERTY(bundle, get_bundle);
static AnimBundle *find_anim_bundle(PandaNode *root); static AnimBundle *find_anim_bundle(PandaNode *root);
private: private:

View File

@ -57,6 +57,8 @@ PUBLISHED:
INLINE const TransformState *get_value_transform() const; INLINE const TransformState *get_value_transform() const;
INLINE PandaNode *get_value_node() const; INLINE PandaNode *get_value_node() const;
MAKE_PROPERTY(value_node, get_value_node, set_value_node);
protected: protected:
virtual AnimGroup *make_copy(AnimGroup *parent) const; virtual AnimGroup *make_copy(AnimGroup *parent) const;

View File

@ -59,6 +59,8 @@ PUBLISHED:
INLINE bool has_table(char table_id) const; INLINE bool has_table(char table_id) const;
INLINE void clear_table(char table_id); INLINE void clear_table(char table_id);
MAKE_MAP_PROPERTY(tables, has_table, get_table, set_table, clear_table);
public: public:
virtual void write(std::ostream &out, int indent_level) const; virtual void write(std::ostream &out, int indent_level) const;

View File

@ -10,3 +10,25 @@
* @author drose * @author drose
* @date 2003-10-20 * @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;
}

View File

@ -84,16 +84,12 @@ has_changed(int, double, int, double) {
*/ */
void AnimChannelScalarDynamic:: void AnimChannelScalarDynamic::
get_value(int, PN_stdfloat &value) { get_value(int, PN_stdfloat &value) {
if (_value_node != nullptr) { value = get_value();
value = _value->get_pos()[0];
} else {
value = _float_value;
}
} }
/** /**
* Explicitly sets the value. * Explicitly sets the value. This will remove any node assigned via
* set_value_node().
*/ */
void AnimChannelScalarDynamic:: void AnimChannelScalarDynamic::
set_value(PN_stdfloat value) { 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 * 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:: void AnimChannelScalarDynamic::
set_value_node(PandaNode *value_node) { set_value_node(PandaNode *value_node) {

View File

@ -41,11 +41,16 @@ public:
virtual bool has_changed(int last_frame, double last_frac, virtual bool has_changed(int last_frame, double last_frac,
int this_frame, double this_frac); int this_frame, double this_frac);
virtual void get_value(int frame, PN_stdfloat &value); virtual void get_value(int frame, PN_stdfloat &value);
INLINE PN_stdfloat get_value() const;
INLINE PandaNode *get_value_node() const;
PUBLISHED: PUBLISHED:
void set_value(PN_stdfloat value); void set_value(PN_stdfloat value);
void set_value_node(PandaNode *node); void set_value_node(PandaNode *node);
MAKE_PROPERTY(value, get_value, set_value);
MAKE_PROPERTY(value_node, get_value_node, set_value_node);
protected: protected:
virtual AnimGroup *make_copy(AnimGroup *parent) const; virtual AnimGroup *make_copy(AnimGroup *parent) const;

View File

@ -44,6 +44,8 @@ PUBLISHED:
INLINE bool has_table() const; INLINE bool has_table() const;
INLINE void clear_table(); INLINE void clear_table();
MAKE_PROPERTY2(table, has_table, get_table, set_table, clear_table);
public: public:
virtual void write(std::ostream &out, int indent_level) const; virtual void write(std::ostream &out, int indent_level) const;