Files
sbox-public/game/addons/tools/Code/Editor/AssetBrowser/MainAssetBrowser.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

88 lines
2.4 KiB
C#

using System.Threading;
namespace Editor;
[Dock( "Editor", "Asset Browser", "folder_open" )]
public class MainAssetBrowser : WrappedAssetBrowser
{
private static WrappedAssetBrowser _instance;
public static WrappedAssetBrowser Instance
{
get
{
if ( !_instance.IsValid() ) return null;
return _instance;
}
private set => _instance = value;
}
/// <summary>
/// This constructor should only get called by the Docked version created by the editor.
/// </summary>
public MainAssetBrowser( Widget parent ) : base( parent, null )
{
Instance ??= this;
Local.OnAssetHighlight = a => EditorUtility.InspectorObject = a;
Local.OnAssetsHighlight = a => EditorUtility.InspectorObject = a;
Local.OnAssetSelected = a => a.OpenInEditor();
Local.OnFileSelected = f => EditorUtility.OpenFile( f );
Cloud.OnPackageHighlight = p => _ = InspectPackage( p );
Mounts.OnAssetHighlight = a => EditorUtility.InspectorObject = a;
Mounts.OnAssetsHighlight = a => EditorUtility.InspectorObject = a;
}
CancellationTokenSource packageCTS;
private async Task InspectPackage( Package package )
{
packageCTS?.Cancel();
packageCTS = new CancellationTokenSource();
// Get the full package info
package = await Package.FetchAsync( package.FullIdent, false );
if ( await TryInspectPrimaryAsset( package, packageCTS.Token ) )
return;
// Show package info
}
async Task<bool> TryInspectPrimaryAsset( Package package, CancellationToken cancel )
{
if ( package.TypeName == "map" ) return false;
if ( package.TypeName == "game" ) return false;
if ( package.TypeName == "collection" ) return false;
if ( package.TypeName == "addon" ) return false;
if ( package.TypeName == "library" ) return false;
if ( package.GetMeta<string>( "PrimaryAsset" ) is not string assetPath )
return false;
if ( cancel.IsCancellationRequested )
return false;
var asset = await AssetSystem.InstallAsync( package.FullIdent, true, null, cancel );
if ( asset is null )
return false;
EditorUtility.PlayAssetSound( asset );
if ( cancel.IsCancellationRequested )
return false;
EditorUtility.InspectorObject = asset;
return true;
}
[Event( "tools.editorwindow.postcreateview" )]
private static void AddViewMenuButtons( Menu menu )
{
menu.AddSeparator();
menu.AddOption( "New Asset Browser", "create_new_folder", () => EditorWindow.DockManager.Create<MainAssetBrowser>() );
}
}