void AssetManager::ReleaseAsset( AssetHandle* handle) { AssetIter iter = mAssetContainer.find(handle->GetId()); Asset* pAsset = iter->second; if(pAsset->GetUseCounter()) { pAsset->SubtractUseConter(); if (pAsset->GetUseCounter() == 0 && pAsset->IsAutoUnloading()) { IdIter idIterator = mAssetNameReferece.find(pAsset->GetName()); mAssetNameReferece.erase(idIterator); mAssetContainer.erase(iter); delete(pAsset); numOfAssets--; } handle->SetAssetPtr(0); } }
/// Search for a direct child of the specified object with the given name. /// /// @param[in] pObject Asset for which to locate a child, or null to search through top-level objects. /// @param[in] name Asset name. /// @param[in] instanceIndex Asset instance index. /// /// @return Pointer to the child object if found, null if not found. Asset* Asset::FindChildOf( const Asset* pObject, Name name, uint32_t instanceIndex ) { HELIUM_ASSERT( !name.IsEmpty() ); if( name.IsEmpty() ) { return NULL; } ScopeReadLock scopeLock( sm_objectListLock ); for( Asset* pChild = ( pObject ? pObject->m_wpFirstChild : sm_wpFirstTopLevelObject ); pChild != NULL; pChild = pChild->m_wpNextSibling ) { if( pChild->GetName() == name && pChild->GetInstanceIndex() == instanceIndex ) { return pChild; } } return NULL; }
void ProjectViewModel::GetValue( wxVariant& variant, const wxDataViewItem& item, unsigned int column ) const { if ( !item.IsOk() || ( column >= m_ColumnLookupTable.size() ) ) { return; } Asset *node = static_cast< Asset* >( item.GetID() ); if ( !node ) { return; } switch( m_ColumnLookupTable.at( column ) ) { default: break; case ProjectModelColumns::Name: { uint32_t docStatus = DocumentStatus::Default; // node->GetDocumentStatus(); String assetString( *node->GetName() ); wxString name = *assetString; if ( HasFlags<uint32_t>( docStatus, DocumentStatus::Changed ) ) { name = wxString( TXT( '*' ) ) + name; } wxBitmap bitmap = wxArtProvider::GetBitmap( GetArtIDFromPath( node->GetPath() ), wxART_OTHER, wxSize(16, 16) ); if ( docStatus > 0 ) { wxImage image = bitmap.ConvertToImage(); HELIUM_ASSERT( image.Ok() ); int overlayWidth = image.GetWidth() / 2; int overlayHeight = image.GetHeight() / 2; wxImage overlayImage; if ( HasFlags<uint32_t>( docStatus, DocumentStatus::Saving ) ) { overlayImage = wxArtProvider::GetBitmap( ArtIDs::Status::Busy, wxART_OTHER, wxSize( overlayWidth, overlayHeight ) ).ConvertToImage(); HELIUM_ASSERT( overlayImage.Ok() ); } else if ( HasFlags<uint32_t>( docStatus, DocumentStatus::Loading ) ) { overlayImage = wxArtProvider::GetBitmap( ArtIDs::Status::Busy, wxART_OTHER, wxSize( overlayWidth, overlayHeight ) ).ConvertToImage(); HELIUM_ASSERT( overlayImage.Ok() ); } else if ( HasFlags<uint32_t>( docStatus, DocumentStatus::Changed ) ) { overlayImage = wxArtProvider::GetBitmap( ArtIDs::Actions::Edit, wxART_OTHER, wxSize( overlayWidth, overlayHeight ) ).ConvertToImage(); HELIUM_ASSERT( overlayImage.Ok() ); } if ( overlayImage.Ok() ) { if ( overlayImage.GetWidth() != overlayWidth || overlayImage.GetHeight() != overlayHeight ) { overlayImage.Rescale( overlayWidth, overlayHeight ); } int x = 0; int y = 0; IconArtFile::CalculatePlacement( image, overlayImage, OverlayQuadrants::BottomRight, x, y ); image.Paste( overlayImage, x, y ); } bitmap = wxBitmap( image ); } wxIcon icon; icon.CopyFromBitmap( bitmap ); variant << wxDataViewIconText( name, icon ); } break; //case ProjectModelColumns::Icon: // { // int32_t imageID = GlobalFileIconsTable().GetIconIDFromPath( node->GetPath() ); // wxVariant bitmapVariant; // bitmapVariant. // variant = GlobalFileIconsTable().GetSmallImageList()->GetBitmap( imageID ); // } // break; case ProjectModelColumns::Details: { variant = std::string( TXT( "" ) ); } break; case ProjectModelColumns::FileSize: { variant = std::string( TXT( "" ) ); } break; case ProjectModelColumns::Type: { const AssetType *pType = node->GetAssetType(); HELIUM_ASSERT( pType ); variant = std::string( *pType->GetName() ); } break; } }
void SceneView3D::HandleDragEnterWidget(StringHash eventType, VariantMap& eventData) { using namespace DragEnterWidget; UIWidget* widget = static_cast<UIWidget*>(eventData[P_WIDGET].GetPtr()); if (widget != this) return; UIDragObject* dragObject = static_cast<UIDragObject*>(eventData[P_DRAGOBJECT].GetPtr()); Object* object = dragObject->GetObject(); if (!object) return; if (object->GetType() == Asset::GetTypeStatic()) { Asset* asset = (Asset*) object; AssetImporter* importer = asset->GetImporter(); if (!importer) return; StringHash importerType = importer->GetType(); if (importerType == PrefabImporter::GetTypeStatic()) { dragNode_ = scene_->CreateChild(asset->GetName()); PrefabComponent* pc = dragNode_->CreateComponent<PrefabComponent>(); pc->SetPrefabGUID(asset->GetGUID()); } else if (importerType == ModelImporter::GetTypeNameStatic()) { dragNode_ = scene_->CreateChild(); SharedPtr<File> file(new File(context_, asset->GetCachePath())); SharedPtr<XMLFile> xml(new XMLFile(context_)); if (!xml->Load(*file)) return; dragNode_->LoadXML(xml->GetRoot()); dragNode_->SetName(asset->GetName()); } else if (importerType == SpriterImporter::GetTypeNameStatic()) { AnimationSet2D* animationSet = GetSubsystem<ResourceCache>()->GetResource<AnimationSet2D>(asset->GetPath()); String animationName; if (animationSet && animationSet->GetNumAnimations()) { animationName = animationSet->GetAnimation(0)->GetName(); } dragNode_ = scene_->CreateChild(asset->GetName()); AnimatedSprite2D* sprite = dragNode_->CreateComponent<AnimatedSprite2D>(); if (!animationName.Length()) sprite->SetAnimationSet(animationSet); else sprite->SetAnimation(animationSet, animationName); } else if (importerType == TextureImporter::GetTypeNameStatic()) { dragNode_ = scene_->CreateChild(asset->GetName()); Sprite2D* spriteGraphic = GetSubsystem<ResourceCache>()->GetResource<Sprite2D>(asset->GetPath()); StaticSprite2D* sprite = dragNode_->CreateComponent<StaticSprite2D>(); sprite->SetSprite(spriteGraphic); } if (dragNode_.NotNull()) { Input* input = GetSubsystem<Input>(); IntVector2 pos = input->GetMousePosition(); UpdateDragNode(pos.x_, pos.y_); } //LOGINFOF("Dropped %s : %s on SceneView3D", asset->GetPath().CString(), asset->GetGUID().CString()); } }