Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 4761 in orxonox.OLD


Ignore:
Timestamp:
Jul 2, 2005, 1:28:28 AM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: Global identifiers and PNode-parenting via LoadParam works

Location:
orxonox/trunk/src/lib
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • orxonox/trunk/src/lib/coord/p_node.cc

    r4742 r4761  
    2121
    2222#include "p_node.h"
     23#include "null_parent.h"
     24
     25#include "load_param.h"
     26#include "class_list.h"
     27
    2328#include "stdincl.h"
    2429#include "compiler.h"
    25 
    2630#include "error.h"
    2731#include "debug.h"
    2832#include "list.h"
    2933#include "vector.h"
    30 #include "null_parent.h"
    31 #include "load_param.h"
    3234
    3335//#include "vector.h"
     
    123125  LoadParam<PNode>(root, "rel-coor", this, &PNode::setRelCoor)
    124126      .describe("Sets The relative position of the Node to its parent.");
     127
     128  LoadParam<PNode>(root, "parent", this, &PNode::setParent)
     129      .describe("the Name of the Parent of this PNode");
    125130}
    126131
     
    328333}
    329334
     335/**
     336 * @see PNode::setParent(PNode* parent);
     337 * @param parentName the name of the Parent to set to this PNode
     338 */
     339void PNode::setParent (const char* parentName)
     340{
     341  PNode* parentNode = dynamic_cast<PNode*>(ClassList::getObject(parentName, CL_PARENT_NODE));
     342
     343
     344  printf("%p\n", parentNode);
     345  printf("%s\n", parentNode->getName());
     346
     347  if (parentNode != NULL)
     348    parentNode->addChild(this);
     349}
    330350
    331351/**
  • orxonox/trunk/src/lib/coord/p_node.h

    r4746 r4761  
    8888
    8989  void setParent (PNode* parent);
     90  void setParent (const char* name);
     91
    9092  void setParentMode (unsigned int parentingMode);
    9193  /** \returns the Parenting mode of this node */
  • orxonox/trunk/src/lib/lang/class_list.cc

    r4760 r4761  
    109109/**
    110110 * checks if the BaseObject* object exists.
     111 * @param name the name of the BaseObject to look for
     112 * @param classID if not CL_NULL it will only search through a specific type of Objects. Otherwise it will be searched everywhere.
     113 * @return true, if the Object Exists in the specified ClassID, false otherwise
     114 * @todo: speed this up!!
     115 */
     116BaseObject* ClassList::getObject(const char* name, long classID)
     117{
     118  if(unlikely(ClassList::first == NULL) || name == NULL)
     119    return NULL;
     120  else
     121  {
     122    ClassList* tmp = ClassList::first;
     123    while (likely(tmp != NULL))
     124    {
     125      if (tmp->classID == classID || (classID == CL_NULL && tmp->classID == CL_BASE_OBJECT))
     126      {
     127        tIterator<BaseObject>* iterator = tmp->objectList->getIterator();
     128        BaseObject* enumBO = iterator->nextElement();
     129        const char* tmpName;
     130        while (enumBO != NULL)
     131        {
     132          tmpName = enumBO->getName();
     133          if (tmpName && !strcmp(tmpName, name))
     134          {
     135            delete iterator;
     136            return enumBO;
     137          }
     138          enumBO = iterator->nextElement();
     139        }
     140        delete iterator;
     141        break;
     142      }
     143      tmp = tmp->next;
     144    }
     145  }
     146  return NULL;
     147}
     148
     149
     150/**
     151 * checks if the BaseObject* object exists.
    111152 * @param object the Pointer to a BaseObject to check if it exists
    112153 * @param classID if not CL_NULL it will only search through a specific type of Objects. Otherwise it will be searched everywhere.
     
    127168        tIterator<BaseObject>* iterator = tmp->objectList->getIterator();
    128169        BaseObject* enumBO = iterator->nextElement();
    129         while (enumBO)
     170        while (enumBO != NULL)
    130171        {
    131172          if (enumBO == object)
     173          {
     174            delete iterator;
    132175            return true;
     176          }
    133177          enumBO = iterator->nextElement();
    134178        }
  • orxonox/trunk/src/lib/lang/class_list.h

    r4756 r4761  
    2828
    2929    // STATIC FUNCTIONS
    30     static void addToClassList(BaseObject* objectPointer, const long& classID, const char* className);
    31     static void removeFromClassList(BaseObject* objectPointer);
     30    static void         addToClassList(BaseObject* objectPointer, const long& classID, const char* className);
     31    static void         removeFromClassList(BaseObject* objectPointer);
    3232
    33     static bool exists(BaseObject* object, long classID = CL_NULL);
     33    static BaseObject*  getObject(const char* name, long classID = CL_NULL);
     34    static bool         exists(BaseObject* object, long classID = CL_NULL);
    3435
    3536    static void debug(unsigned int debugLevel = 0);
  • orxonox/trunk/src/lib/sound/sound_engine.h

    r4746 r4761  
    3737
    3838//! A class that represents a SoundSource
    39 class SoundSource : virtual public BaseObject
     39class SoundSource : public BaseObject
    4040{
    4141 public:
Note: See TracChangeset for help on using the changeset viewer.