/// Recursive function for resolving a package request. /// /// @param[out] rspPackage Resolved package. /// @param[in] packagePath Package object path. void CachePackageLoader::ResolvePackage( GameObjectPtr& rspPackage, GameObjectPath packagePath ) { HELIUM_ASSERT( !packagePath.IsEmpty() ); rspPackage = GameObject::FindObject( packagePath ); if( !rspPackage ) { GameObjectPtr spParent; GameObjectPath parentPath = packagePath.GetParent(); if( !parentPath.IsEmpty() ) { ResolvePackage( spParent, parentPath ); HELIUM_ASSERT( spParent ); } HELIUM_VERIFY( GameObject::CreateObject( rspPackage, Package::GetStaticType(), packagePath.GetName(), spParent ) ); HELIUM_ASSERT( rspPackage ); HELIUM_ASSERT( rspPackage->IsClass( Package::GetStaticType()->GetClass() ) ); } rspPackage->SetFlags( GameObject::FLAG_PRELOADED | GameObject::FLAG_LINKED | GameObject::FLAG_LOADED ); }