//---------------------------------------------------------------------------------- // //---------------------------------------------------------------------------------- void CoreLayer2D_Imp::RemoveObject(ObjectPtr object) { { auto o = CoreObject2DToImp(object); o->OnRemoving(m_renderer); #if __CULLING_2D__ if (object->GetObjectType() == Object2DType::Map) { auto mapObj = (CoreMapObject2D_Imp*)o; auto &chips = mapObj->GetChips(); for (auto c : chips) { auto chipImp = (CoreChip2D_Imp*)c; auto cObj = chipImp->GetCullingObject(); RemoveTransformedObject(cObj); auto userData = (Culling2DUserData*)(cObj->GetUserData()); SafeDelete(userData); world->RemoveObject(cObj); } } else if (object->GetObjectType() != Object2DType::Camera) { auto cObj = o->GetCullingObject(); RemoveTransformedObject(cObj); auto userData = (Culling2DUserData*)(cObj->GetUserData()); SafeDelete(userData); world->RemoveObject(cObj); } #endif } object->SetLayer(nullptr); if (object->GetObjectType() == Object2DType::Camera) { auto camera = (CoreCameraObject2D*)object; m_cameras.remove(camera); SafeRelease(camera); } else { m_objects.remove(object); SafeRelease(object); } }
//---------------------------------------------------------------------------------- // //---------------------------------------------------------------------------------- void CoreLayer2D_Imp::AddObject(ObjectPtr object) { if (object->GetObjectType() == Object2DType::Camera) { auto camera = (CoreCameraObject2D_Imp*)object; m_cameras.push_back(camera); SafeAddRef(camera); } else { m_objects.push_back(object); SafeAddRef(object); } object->SetLayer(this); { auto o = CoreObject2DToImp(object); o->OnAdded(m_renderer); #if __CULLING_2D__ if (object->GetObjectType() == Object2DType::Map) { auto map = (CoreMapObject2D_Imp*)o; map->RegisterObjectToCulling(); map->SetFirstSortedKey(world->GetNextFirstSortedKey()); world->IncNextFirstSortedKey(); } else if (object->GetObjectType() != Object2DType::Camera) { auto userData = new Culling2DUserData(object); auto cObj = culling2d::Object::Create(userData, world); cObj->SetFirstSortedKey(world->GetNextFirstSortedKey()); world->IncNextFirstSortedKey(); o->SetCullingObject(cObj); AddTransformedObject(cObj); o->SetAlreadyCullingUpdated(true); world->AddObject(cObj); } #endif } }