OldBlueWater/BlueWater/Assets/Doozy/Editor/Mody/Components/ModyActionsDrawerItem.cs

85 lines
3.2 KiB
C#

// Copyright (c) 2015 - 2023 Doozy Entertainment. All Rights Reserved.
// This code can only be used under the standard Unity Asset Store End User License Agreement
// A Copy of the EULA APPENDIX 1 is available at http://unity3d.com/company/legal/as_terms
using Doozy.Editor.EditorUI.Components;
using Doozy.Editor.EditorUI.Utils;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
// ReSharper disable MemberCanBePrivate.Global
namespace Doozy.Editor.Mody.Components
{
public class ModyActionsDrawerItem
{
public string actionName
{
get => actionNameProperty.stringValue;
set
{
if (actionNameProperty.stringValue.Equals(value)) return;
actionNameProperty.stringValue = value;
actionProperty.serializedObject.ApplyModifiedProperties();
}
}
public bool actionEnabled
{
get => actionEnabledProperty.boolValue;
set
{
if (actionEnabledProperty.boolValue == value) return;
actionEnabledProperty.boolValue = value;
actionProperty.serializedObject.ApplyModifiedProperties();
}
}
public SerializedProperty actionProperty { get; }
public SerializedProperty actionNameProperty { get; }
public SerializedProperty actionEnabledProperty { get; }
public FluidAnimatedContainer animatedContainer { get; }
public ModyActionsDrawer parentDrawer { get; set; }
public ModyActionsDrawerItem(SerializedProperty actionProperty)
{
this.actionProperty = actionProperty;
actionNameProperty = this.actionProperty.FindPropertyRelative("ActionName");
actionEnabledProperty = this.actionProperty.FindPropertyRelative("ActionEnabled");
animatedContainer = new FluidAnimatedContainer(actionNameProperty.stringValue, true);
animatedContainer.OnShowCallback = () =>
{
animatedContainer
.AddContent(DesignUtils.NewPropertyField(actionProperty.propertyPath))
.AddContent(DesignUtils.spaceBlock)
;
animatedContainer.Bind(actionProperty.serializedObject);
};
animatedContainer.Toggle(actionEnabledProperty.boolValue, false);
Toggle invisibleToggle = DesignUtils.NewToggle(actionEnabledProperty.propertyPath, true);
animatedContainer.Add(invisibleToggle);
invisibleToggle.RegisterValueChangedCallback(evt =>
{
// Debug.Log($"{actionName}: {(evt.newValue ? "Show" : "Hide")}");
animatedContainer.Toggle(evt.newValue, false);
parentDrawer?.ItemUpdated(this, evt.newValue);
});
}
public void ShowItem(bool animateChange = true) =>
animatedContainer?.Show(animateChange);
public void HideItem(bool animateChange = true) =>
animatedContainer?.Hide(animateChange);
public void ToggleItem(bool show, bool animateChange = true) =>
animatedContainer?.Toggle(show, animateChange);
}
}