// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
using System;
using FlaxEditor.GUI.Timeline.Undo;
using FlaxEditor.Scripting;
using FlaxEngine;
using FlaxEngine.GUI;
namespace FlaxEditor.GUI.Timeline.Tracks
{
///
/// The base class for timeline tracks that use single media with an asset reference.
///
/// The type of the asset.
/// The type of the media event.
///
public abstract class SingleMediaAssetTrack : SingleMediaTrack
where TAsset : Asset
where TMedia : Media, new()
{
///
/// The asset reference picker control.
///
protected readonly AssetPicker _picker;
///
/// The asset id.
///
public Guid AssetID;
///
/// Gets or sets the asset.
///
public TAsset Asset
{
get => FlaxEngine.Content.LoadAsync(AssetID);
set
{
if (AssetID == value?.ID)
return;
AssetID = value?.ID ?? Guid.Empty;
_picker.SelectedAsset = value;
OnAssetChanged();
Timeline?.MarkAsEdited();
}
}
///
protected SingleMediaAssetTrack(ref TrackCreateOptions options)
: base(ref options)
{
var width = 50.0f;
var height = 36.0f;
_picker = new AssetPicker(new ScriptType(typeof(TAsset)), Float2.Zero)
{
AnchorPreset = AnchorPresets.MiddleRight,
Offsets = new Margin(-width - 2 + _muteCheckbox.Offsets.Left, width, height * -0.5f, height),
Parent = this,
};
_picker.SelectedItemChanged += OnPickerSelectedItemChanged;
Height = 4 + _picker.Height;
}
private void OnPickerSelectedItemChanged()
{
if (Asset == (TAsset)_picker.SelectedAsset)
return;
using (new TrackUndoBlock(this))
Asset = (TAsset)_picker.SelectedAsset;
}
///
/// Called when selected asset gets changed.
///
protected virtual void OnAssetChanged()
{
}
}
}