Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Synchronisable translates creator ↔ creatorID

Location:
code/branches/objecthierarchy/src/network
Files:
4 edited

Legend:

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

    r2006 r2034  
    8080    // now push only the most recent gamestates we received (ignore obsolete ones)
    8181    for(it = gamestateQueue.begin(); it!=gamestateQueue.end(); it++){
    82       assert(processGamestate(it->second));
     82      bool b = processGamestate(it->second);
     83//      assert(b);
    8384      delete it->second;
    8485    }
  • 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);
  • code/branches/objecthierarchy/src/network/Synchronisable.h

    r2028 r2034  
    115115    inline unsigned int getClassID(){return classID;}
    116116  protected:
    117     Synchronisable();
     117    Synchronisable(orxonox::BaseObject* creator);
    118118    void registerVar(void *var, int size, variableType t, int mode=1, NetworkCallbackBase *cb=0);
    119119    void setObjectMode(int mode);
  • code/branches/objecthierarchy/src/network/packet/Gamestate.cc

    r2031 r2034  
    158158    {
    159159      s = Synchronisable::fabricate(mem, mode);
    160       assert(s);
     160      return false;
    161161//       if(!s)
    162162//         return false;
Note: See TracChangeset for help on using the changeset viewer.