- Timestamp:
- Aug 9, 2013, 9:26:46 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core6/src/libraries/network/synchronisable/Synchronisable.cc
r9564 r9629 49 49 * Initializes all Variables and sets the right objectID_ 50 50 */ 51 Synchronisable::Synchronisable( BaseObject* creator)51 Synchronisable::Synchronisable(Context* context) 52 52 { 53 53 RegisterRootObject(Synchronisable); … … 69 69 this->setPriority( Priority::Normal ); 70 70 71 // get creator id 72 if( creator ) 73 this->creatorID_ = creator->getSceneID(); 74 else 75 this->creatorID_ = OBJECTID_UNKNOWN; 71 // get context id 72 this->contextID_ = this->findContextID(context); 76 73 } 77 74 … … 100 97 } 101 98 99 /** 100 * @brief Returns the id of the context. 101 * If the context is not Synchronisable, it moves on to its parent, recursively. 102 */ 103 uint32_t Synchronisable::findContextID(Context* context) 104 { 105 if (context == NULL) 106 return OBJECTID_UNKNOWN; 107 108 Synchronisable* synchronisableContext = orxonox_cast<Synchronisable*>(context); 109 if (synchronisableContext != NULL) 110 return synchronisableContext->getObjectID(); 111 else 112 return this->findContextID(context->getParentContext()); 113 } 102 114 103 115 /** … … 142 154 } 143 155 assert(id); 144 BaseObject* creator= 0;145 if (header.getC reatorID() != OBJECTID_UNKNOWN)146 { 147 Synchronisable* synchronisable_c reator = Synchronisable::getSynchronisable(header.getCreatorID());148 if (!synchronisable_c reator)156 Context* context = 0; 157 if (header.getContextID() != OBJECTID_UNKNOWN) 158 { 159 Synchronisable* synchronisable_context = Synchronisable::getSynchronisable(header.getContextID()); 160 if (!synchronisable_context) 149 161 { 150 162 mem += header.getDataSize()+SynchronisableHeader::getSize(); //.TODO: this suckz.... remove size from header … … 153 165 } 154 166 else 155 c reator = orxonox_cast<BaseObject*>(synchronisable_creator);167 context = orxonox_cast<Context*>(synchronisable_context); 156 168 } 157 169 assert(getSynchronisable(header.getObjectID())==0); //make sure no object with this id exists 158 BaseObject *bo = orxonox_cast<BaseObject*>(id->fabricate(c reator));170 BaseObject *bo = orxonox_cast<BaseObject*>(id->fabricate(context)); 159 171 assert(bo); 160 172 Synchronisable *no = orxonox_cast<Synchronisable*>(bo); … … 162 174 assert( Synchronisable::objectMap_.find(header.getObjectID()) == Synchronisable::objectMap_.end() ); 163 175 no->setObjectID(header.getObjectID()); 164 //no->c reatorID=header.getCreatorID(); //TODO: remove this176 //no->contextID=header.getContextID(); //TODO: remove this 165 177 no->setClassID(header.getClassID()); 166 assert(no->creatorID_ == header.getCreatorID()); 167 if( creator ) 168 bo->setLevel(creator->getLevel()); // Note: this ensures that the level is known on the client for child objects of the scene (and the scene itself) 178 assert(no->contextID_ == header.getContextID()); 179 if( context ) 180 { 181 BaseObject* boContext = orxonox_cast<BaseObject*>(context); 182 if (boContext) 183 bo->setLevel(boContext->getLevel()); // Note: this ensures that the level is known on the client for child objects of the scene (and the scene itself) 184 } 169 185 //assert(no->classID_ == header.getClassID()); 170 186 orxout(verbose, context::network) << "fabricate objectID_: " << no->objectID_ << " classID_: " << no->classID_ << endl; … … 274 290 275 291 header.setObjectID( this->objectID_ ); 276 header.setC reatorID( this->creatorID_ );292 header.setContextID( this->contextID_ ); 277 293 header.setClassID( this->classID_ ); 278 294 header.setDataSize( tempsize ); … … 331 347 SynchronisableHeader syncHeader2(mem); 332 348 assert( this->getClassID() == syncHeader2.getClassID() ); 333 assert( this->getC reatorID() == syncHeader2.getCreatorID() );349 assert( this->getContextID() == syncHeader2.getContextID() ); 334 350 mem += SynchronisableHeader::getSize(); 335 351 std::vector<SynchronisableVariableBase *>::iterator i;
Note: See TracChangeset
for help on using the changeset viewer.