| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- // Filename: speedTreeNode.I
- // Created by: drose (30Sep10)
- //
- ////////////////////////////////////////////////////////////////////
- //
- // PANDA 3D SOFTWARE
- // Copyright (c) Carnegie Mellon University. All rights reserved.
- //
- // All use of this software is subject to the terms of the revised BSD
- // license. You should have received a copy of this license along
- // with this source code in a file named "LICENSE."
- //
- ////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::is_valid
- // Access: Published
- // Description: Returns true if the node is valid and ready to
- // render, false otherwise. Note that this might not
- // become false until after the first time the node is
- // rendered.
- ////////////////////////////////////////////////////////////////////
- INLINE bool SpeedTreeNode::
- is_valid() const {
- return _is_valid;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::get_num_trees
- // Access: Published
- // Description: Returns the number of unique tree objects that have
- // been added to the node. This count does not include
- // multiple instances of the same tree that appear in
- // different transforms.
- ////////////////////////////////////////////////////////////////////
- INLINE int SpeedTreeNode::
- get_num_trees() const {
- return (int)_trees.size();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::get_tree
- // Access: Published
- // Description: Returns the STTree pointer for the nth tree.
- // See get_num_trees().
- ////////////////////////////////////////////////////////////////////
- INLINE const STTree *SpeedTreeNode::
- get_tree(int n) const {
- nassertr(n >= 0 && n < (int)_trees.size(), NULL);
- InstanceList *instance_list = _trees[n];
- return instance_list->get_tree();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::get_instance_list
- // Access: Published
- // Description: Returns a list of transforms that corresponds to the
- // instances at which the nth tree appears.
- ////////////////////////////////////////////////////////////////////
- INLINE const SpeedTreeNode::InstanceList &SpeedTreeNode::
- get_instance_list(int n) const {
- nassertr(n >= 0 && n < (int)_trees.size(), *(InstanceList *)NULL);
- InstanceList *instance_list = _trees[n];
- return *instance_list;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::modify_tree
- // Access: Published
- // Description: Returns a modifiable STTree pointer for the nth tree
- // instance.
- ////////////////////////////////////////////////////////////////////
- INLINE STTree *SpeedTreeNode::
- modify_tree(int n) {
- nassertr(n >= 0 && n < (int)_trees.size(), NULL);
- InstanceList *instance_list = _trees[n];
- _needs_repopulate = true;
- return (STTree *)instance_list->get_tree();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::clear_terrain
- // Access: Published
- // Description: Removes the terrain associated with the node.
- ////////////////////////////////////////////////////////////////////
- INLINE void SpeedTreeNode::
- clear_terrain() {
- set_terrain(NULL);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::has_terrain
- // Access: Published
- // Description: Returns true if a valid terrain has been associated
- // with the node, false otherwise.
- ////////////////////////////////////////////////////////////////////
- INLINE bool SpeedTreeNode::
- has_terrain() const {
- return _terrain != (STTerrain *)NULL;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::get_terrain
- // Access: Published
- // Description: Returns the terrain associated with the node, or NULL
- // if there is no terrain.
- ////////////////////////////////////////////////////////////////////
- INLINE STTerrain *SpeedTreeNode::
- get_terrain() const {
- return _terrain;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::set_time_delta
- // Access: Published
- // Description: Specifies an offset that is to be added each frame to
- // the global clock's frame_time for the purpose of
- // animating the trees in this particular node. Also
- // see set_global_time_delta().
- ////////////////////////////////////////////////////////////////////
- INLINE void SpeedTreeNode::
- set_time_delta(double delta) {
- _time_delta = delta;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::get_time_delta
- // Access: Published
- // Description: Returns an offset that is to be added each frame to
- // the global clock's frame_time for the purpose of
- // animating the trees in this particular node. Also
- // see get_global_time_delta().
- ////////////////////////////////////////////////////////////////////
- INLINE double SpeedTreeNode::
- get_time_delta() const {
- return _time_delta;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::set_global_time_delta
- // Access: Published, Static
- // Description: Specifies an offset that is to be added each frame to
- // the global clock's frame_time for the purpose of
- // animating the trees in all SpeedTreeNodes. Also
- // see set_time_delta().
- ////////////////////////////////////////////////////////////////////
- INLINE void SpeedTreeNode::
- set_global_time_delta(double delta) {
- _global_time_delta = delta;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::get_global_time_delta
- // Access: Published, Static
- // Description: Returns an offset that is to be added each frame to
- // the global clock's frame_time for the purpose of
- // animating the trees in all SpeedTreeNodes. Also
- // see get_time_delta().
- ////////////////////////////////////////////////////////////////////
- INLINE double SpeedTreeNode::
- get_global_time_delta() {
- return _global_time_delta;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::InstanceList::Constructor
- // Access: Public
- // Description:
- ////////////////////////////////////////////////////////////////////
- INLINE SpeedTreeNode::InstanceList::
- InstanceList(const STTree *tree) : _tree((STTree *)tree) {
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::InstanceList::operator <
- // Access: Public
- // Description: Used for comparison for ov_set.
- ////////////////////////////////////////////////////////////////////
- INLINE bool SpeedTreeNode::InstanceList::
- operator < (const InstanceList &other) const {
- return _tree < other._tree;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::InstanceList::get_tree
- // Access: Published
- // Description: Returns the particular tree this list refers to.
- ////////////////////////////////////////////////////////////////////
- INLINE const STTree *SpeedTreeNode::InstanceList::
- get_tree() const {
- return _tree;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::InstanceList::get_num_instances
- // Access: Published
- // Description: Returns the number of instances of this tree.
- ////////////////////////////////////////////////////////////////////
- INLINE int SpeedTreeNode::InstanceList::
- get_num_instances() const {
- return (int)_instances.size();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::InstanceList::get_instance
- // Access: Published
- // Description: Returns the transform of the nth instance of this
- // tree.
- ////////////////////////////////////////////////////////////////////
- INLINE STTransform SpeedTreeNode::InstanceList::
- get_instance(int n) const {
- nassertr(n >= 0 && n < (int)_instances.size(), STTransform::ident_mat());
- return _instances[n];
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::InstanceList::set_instance
- // Access: Published
- // Description: Replaces the transform of the nth instance of this
- // tree.
- ////////////////////////////////////////////////////////////////////
- INLINE void SpeedTreeNode::InstanceList::
- set_instance(int n, const STTransform &transform) {
- nassertv(n >= 0 && n < (int)_instances.size());
- _instances[n] = transform;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::InstanceList::add_instance
- // Access: Published
- // Description: Adds a new instance of this tree at the indicated
- // transform. Returns the index number of the new
- // instance.
- ////////////////////////////////////////////////////////////////////
- INLINE int SpeedTreeNode::InstanceList::
- add_instance(const STTransform &transform) {
- _instances.push_back(transform);
- return ((int)_instances.size() - 1);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::InstanceList::remove_instance
- // Access: Published
- // Description: Removes the nth instance of this tree.
- ////////////////////////////////////////////////////////////////////
- INLINE void SpeedTreeNode::InstanceList::
- remove_instance(int n) {
- nassertv(n >= 0 && n < (int)_instances.size());
- _instances.erase(_instances.begin() + n);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: SpeedTreeNode::DrawCallback::Constructor
- // Access: Published
- // Description:
- ////////////////////////////////////////////////////////////////////
- INLINE SpeedTreeNode::DrawCallback::
- DrawCallback(SpeedTreeNode *node) : _node(node) {
- }
|