using System; using RosettaUI.Swatch; using UnityEngine; using UnityEngine.UIElements; namespace RosettaUI.UIToolkit.AnimationCurveEditor { /// /// AnimationCurveEditor下部のプリセット表示部分 /// public class PresetsPreview : VisualElement { private static readonly string USSClassName = $"{AnimationCurveEditor.USSClassName}__presets-preview"; private readonly SwatchPersistentService _persistentService; private readonly Action _applyValueFunc; public PresetsPreview(SwatchPersistentService persistentService, Action applyValueFunc) { _persistentService = persistentService; _applyValueFunc = applyValueFunc; AddToClassList(USSClassName); RegisterCallback(OnAttachToPanel); RegisterCallback(OnDetachFromPanel); } private void OnAttachToPanel(AttachToPanelEvent evt) { ResetView(); _persistentService.onSaveSwatches += ResetView; } private void OnDetachFromPanel(DetachFromPanelEvent evt) { _persistentService.onSaveSwatches -= ResetView; } private void ResetView() { // remove all children Clear(); var nameAndValues = _persistentService.LoadSwatches() ?? Array.Empty>(); foreach (var nameAndValue in nameAndValues) { var preset = new Preset() { Value = nameAndValue.value, Label = nameAndValue.name }; preset.RegisterCallback(_ => _applyValueFunc?.Invoke(preset.Value)); Add(preset); } } } }