Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Oct 28, 2008, 10:34:45 PM (16 years ago)
Author:
landauf
Message:

Synchronisable translates creator ↔ creatorID

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchy/src/network/Synchronisable.cc

    r2033 r2034  
    6363  * Initializes all Variables and sets the right objectID
    6464  */
    65   Synchronisable::Synchronisable(){
     65  Synchronisable::Synchronisable(orxonox::BaseObject* creator){
    6666    RegisterRootObject(Synchronisable);
    6767    static uint32_t idCounter=0;
     
    7171    classID = (unsigned int)-1;
    7272    syncList = new std::list<synchronisableVariable *>;
     73
     74    this->creatorID = OBJECTID_UNKNOWN;
     75
     76    searchcreatorID:
     77    if (creator)
     78    {
     79        if (creator->isA(Class(Synchronisable)))
     80        {
     81            Synchronisable* synchronisable_creator = dynamic_cast<Synchronisable*>(creator);
     82            this->creatorID = synchronisable_creator->getObjectID();
     83        }
     84        else if (creator != creator->getCreator())
     85        {
     86            creator = creator->getCreator();
     87            goto searchcreatorID;
     88        }
     89    }
    7390  }
    7491
     
    134151    orxonox::Identifier* id = ClassByID(header->classID);
    135152    assert(id);
    136     orxonox::BaseObject *bo = id->fabricate(0); //TODO: get BaseObject* from header->creatorID here
     153    orxonox::BaseObject* creator = 0;
     154    if (header->creatorID != OBJECTID_UNKNOWN)
     155    {
     156        Synchronisable* synchronisable_creator = Synchronisable::getSynchronisable(header->creatorID);
     157        if (!synchronisable_creator)
     158            return 0;
     159        else
     160            creator = dynamic_cast<orxonox::BaseObject*>(synchronisable_creator);
     161    }
     162    orxonox::BaseObject *bo = id->fabricate(creator);
     163    assert(bo);
    137164    Synchronisable *no = dynamic_cast<Synchronisable *>(bo);
    138165    assert(no);
Note: See TracChangeset for help on using the changeset viewer.