virtual void operator()(gd::InitialInstance * instancePtr) { gd::InitialInstance & instance = *instancePtr; std::vector<ObjSPtr>::const_iterator sceneObject = std::find_if(scene.GetObjects().begin(), scene.GetObjects().end(), std::bind2nd(ObjectHasName(), instance.GetObjectName())); std::vector<ObjSPtr>::const_iterator globalObject = std::find_if(game.GetObjects().begin(), game.GetObjects().end(), std::bind2nd(ObjectHasName(), instance.GetObjectName())); RuntimeObjSPtr newObject = std::shared_ptr<RuntimeObject> (); if ( sceneObject != scene.GetObjects().end() ) //We check first scene's objects' list. newObject = CppPlatform::Get().CreateRuntimeObject(scene, **sceneObject); else if ( globalObject != scene.game->GetObjects().end() ) //Then the global object list newObject = CppPlatform::Get().CreateRuntimeObject(scene, **globalObject); if ( newObject != std::shared_ptr<RuntimeObject> () ) { newObject->SetX( instance.GetX() + xOffset ); newObject->SetY( instance.GetY() + yOffset ); newObject->SetZOrder( instance.GetZOrder() ); newObject->SetLayer( instance.GetLayer() ); newObject->ExtraInitializationFromInitialInstance(instance); newObject->SetAngle( instance.GetAngle() ); if ( instance.HasCustomSize() ) { newObject->SetWidth(instance.GetCustomWidth()); newObject->SetHeight(instance.GetCustomHeight()); } //Substitute initial variables specific to that object instance. newObject->GetVariables().Merge(instance.GetVariables()); scene.objectsInstances.AddObject(newObject); } else std::cout << "Could not find and put object " << instance.GetObjectName() << std::endl; }
void ClassWithObjects::RemoveObject(const gd::String & name) { std::vector< std::shared_ptr<gd::Object> >::iterator object = find_if(initialObjects.begin(), initialObjects.end(), bind2nd(ObjectHasName(), name)); if ( object == initialObjects.end() ) return; initialObjects.erase(object); }