Changeset 9869 in orxonox.OLD for trunk/src/lib/coord
- Timestamp:
- Oct 3, 2006, 12:19:30 AM (18 years ago)
- Location:
- trunk/src/lib/coord
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/coord/p_node.cc
r9656 r9869 19 19 20 20 #include "util/loading/load_param.h" 21 #include "class_list.h"22 21 23 22 #include "netdefs.h" … … 30 29 #include "color.h" 31 30 31 32 ObjectListDefinition(PNode); 32 33 /** 33 34 * @brief standard constructor … … 38 39 : BaseObject(), Synchronizeable() 39 40 { 40 this-> setClassID(CL_PARENT_NODE, "PNode");41 this->registerObject(this, PNode::_objectList); 41 42 42 43 this->bRelCoorChanged = true; … … 79 80 PRINTF(4)("delete %s::%s\n", this->getClassCName(), this->getCName()); 80 81 // remove the Node, delete it's children (if required). 81 std::list<PNode*>::iterator deleteNode; 82 unsigned int size; 82 PNode* last = NULL; 83 //this->debugNode(0); 84 83 85 while(!this->children.empty()) 84 86 { 85 deleteNode = this->children.begin(); 86 size = this->children.size(); 87 PNode* deleteNode = this->children.front(); 88 if (deleteNode == last) 89 { 90 PRINTF(1)("Node same as last that was tried to be deleted. FORCE reparent to NULL of %p\n", deleteNode); 91 (deleteNode->setParent( NULL)); 92 continue; 93 } 87 94 if ((this->parentMode & PNODE_PROHIBIT_CHILD_DELETE) || 88 ( (*deleteNode)->parentMode & PNODE_PROHIBIT_DELETE_WITH_PARENT))95 (deleteNode->parentMode & PNODE_PROHIBIT_DELETE_WITH_PARENT)) 89 96 { 90 if (this == PNode::nullParent && (*deleteNode)->parentMode & PNODE_REPARENT_TO_NULL)97 if (this == PNode::nullParent && deleteNode->parentMode & PNODE_REPARENT_TO_NULL) 91 98 { 92 99 PRINTF(4)("%s::%s deletes %s::%s\n", 93 100 this->getClassCName(), this->getCName(), 94 (*deleteNode)->getClassCName(), (*deleteNode)->getCName());95 delete (*deleteNode);101 deleteNode->getClassCName(), deleteNode->getCName()); 102 delete deleteNode; 96 103 } 97 104 else … … 99 106 PRINTF(4)("%s::%s reparents %s::%s\n", 100 107 this->getClassCName(), this->getCName(), 101 (*deleteNode)->getClassCName(), (*deleteNode)->getCName());102 (*deleteNode)->reparent();108 deleteNode->getClassCName(), deleteNode->getCName()); 109 deleteNode->reparent(); 103 110 } 104 111 } … … 107 114 PRINTF(4)("%s::%s deletes PNode: %s::%s\n", 108 115 this->getClassCName(), this->getCName(), 109 (*deleteNode)->getClassCName(), (*deleteNode)->getCName());110 delete (*deleteNode);116 deleteNode->getClassCName(), deleteNode->getCName()); 117 delete deleteNode; 111 118 } 119 last = deleteNode; 112 120 } 113 121 … … 541 549 void PNode::addChild (const std::string& childName) 542 550 { 543 PNode* childNode = dynamic_cast<PNode*>(ClassList::getObject(childName, CL_PARENT_NODE));551 PNode* childNode = PNode::objectList().getObject(childName); 544 552 // PRINTF(0)("Adding the Child: %s to: %s\n", childName, this->getName()); 545 553 // assert( childNode != NULL ); … … 625 633 void PNode::setParent (const std::string& parentName) 626 634 { 627 PNode* parentNode = dynamic_cast<PNode*>(ClassList::getObject(parentName, CL_PARENT_NODE));635 PNode* parentNode = PNode::objectList().getObject(parentName); 628 636 if (parentNode != NULL) 629 637 parentNode->addChild(this); … … 681 689 void PNode::setParentSoft(const std::string& parentName, float bias) 682 690 { 683 PNode* parentNode = dynamic_cast<PNode*>(ClassList::getObject(parentName, CL_PARENT_NODE));691 PNode* parentNode = PNode::objectList().getObject(parentName); 684 692 if (parentNode != NULL) 685 693 this->setParentSoft(parentNode, bias); … … 730 738 if (likely(PNode::nullParent == NULL)) 731 739 { 732 PNode::nullParent = new PNode(NULL, PNODE_PARENT_MODE_DEFAULT | PNODE_REPARENT_TO_NULL);733 PNode::nullParent->setClassID(CL_NULL_PARENT, "NullParent");740 PNode::nullParent = new NullParent(); 741 //PNode::nullParent->registerObject(, CL_NULL_PARENT); 734 742 PNode::nullParent->setName("NullParent"); 735 743 PNode::nullParent->setSynchronized(true); … … 915 923 int childNodeCount = 0; 916 924 this->countChildNodes(childNodeCount); 917 925 printf("%p:", this); 918 926 PRINT(0)("PNode(%s::%s) - absCoord: (%0.2f, %0.2f, %0.2f), relCoord(%0.2f, %0.2f, %0.2f), direction(%0.2f, %0.2f, %0.2f) - %s - %d childs\n", 919 927 this->getClassCName(), … … 1106 1114 } 1107 1115 1108 1116 ObjectListDefinition(NullParent); 1117 1118 NullParent::NullParent() 1119 : PNode(NULL, PNODE_PARENT_MODE_DEFAULT | PNODE_REPARENT_TO_NULL) 1120 { 1121 this->registerObject(this, NullParent::_objectList); 1122 } -
trunk/src/lib/coord/p_node.h
r9406 r9869 50 50 PNODE_REPARENT_DELETE_CHILDREN = 0x0040, //!< Deletes the Children of the node when This Node is Removed. (Use with care). 51 51 /// FIXME 52 52 PNODE_REPARENT_KEEP_POSITION = 0x0080, //!< Tries to keep the Position if the Node is reparented. 53 53 54 54 … … 73 73 74 74 //! Patent Node is a Engine to calculate the position of an Object in respect to the position of its parent. 75 class PNode : virtual public BaseObject, virtual public Synchronizeable { 76 public: 75 class PNode : virtual public BaseObject, virtual public Synchronizeable 76 { 77 ObjectListDeclaration(PNode); 78 79 public: 77 80 PNode (PNode* parent = PNode::getNullParent(), long nodeFlags = PNODE_PARENT_MODE_DEFAULT); 78 81 virtual ~PNode (); … … 95 98 inline const Vector& getRelCoor () const { return this->prevRelCoordinate; }; 96 99 /** @returns the Relative Coordinate Destination */ 97 100 inline const Vector& getRelCoorSoft2D() const { return (this->toCoordinate)? *this->toCoordinate : this->relCoordinate; }; 98 101 void setAbsCoor (const Vector& absCoord); 99 102 void setAbsCoor (float x, float y, float z); … … 130 133 inline const Quaternion& getRelDir () const { return this->prevRelDirection; }; 131 134 /** @returns the Relative Directional Destination */ 132 135 inline const Quaternion& getRelDirSoft2D() const { return (this->toDirection)? *this->toDirection : this->relDirection; }; 133 136 /** @returns a Vector pointing into the relative Direction */ 134 137 inline Vector getRelDirV() const { return this->prevRelDirection.apply(Vector(0,1,0)); }; … … 178 181 void removeNodeFlags(unsigned short nodeFlags); 179 182 180 // NULL_PARENT //181 183 /** @returns the NullParent, the (main) ROOT of the PNode Tree. If it does not yet exist, it will be created. */ 182 static PNode* getNullParent() { return (PNode::nullParent != NULL)? PNode::nullParent : PNode::createNullParent(); };184 static PNode* getNullParent() { return (PNode::nullParent != NULL) ? PNode::nullParent : PNode::createNullParent(); }; 183 185 184 186 // UPDATING // … … 195 197 float distance(const PNode* node) const { return (this->getAbsCoor() - node->getAbsCoor()).len(); }; 196 198 197 199 private: 198 200 /** tells the child that the parent's Coordinate has changed */ 199 201 inline void parentCoorChanged () { this->bRelCoorChanged = true; } 200 202 /** tells the child that the parent's Direction has changed */ 201 203 inline void parentDirChanged () { this->bRelDirChanged = true; } 202 204 public: 203 205 /** @returns the last calculated coordinate */ 204 206 inline Vector getLastAbsCoor() { return this->lastAbsCoordinate; } 205 207 private: 206 208 static PNode* createNullParent(); 207 209 void reparent(); … … 209 211 void eraseChild(PNode* child); 210 212 211 213 private: 212 214 bool bRelCoorChanged; //!< If Relative Coordinate has changed since last time we checked 213 215 bool bRelDirChanged; //!< If Relative Direction has changed since last time we checked … … 221 223 Vector lastAbsCoordinate; //!< this is used for speedcalculation, it stores the last coordinate 222 224 Quaternion prevRelDirection; //!< The last Relative Direciton from the last update-Cycle. 223 // Quaternion lastAbsDirection;225 // Quaternion lastAbsDirection; 224 226 225 227 Vector velocity; //!< Saves the velocity. … … 238 240 static PNode* nullParent; //!< The ROOT of the main PNode Tree. 239 241 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 242 private: 243 float coorx; 244 float coory; 245 float coorz; 246 247 float rotw; 248 float rotx; 249 float roty; 250 float rotz; 251 252 private: 253 int relCoordinate_handle; 254 int relDirection_handle; 255 Vector relCoordinate_write; 256 Quaternion relDirection_write; 257 258 public: 259 virtual void varChangeHandler( std::list<int> & id ); 258 260 }; 259 261 262 // NULL_PARENT // 263 class NullParent : public PNode 264 { 265 ObjectListDeclaration(NullParent); 266 friend class PNode; 267 NullParent(); 268 }; 269 270 260 271 #endif /* _P_NODE_H */
Note: See TracChangeset
for help on using the changeset viewer.