OldBlueWater/BlueWater/Assets/Doozy/Editor/SceneManagement/Nodes/UnloadSceneNodeEditor.cs

135 lines
5.6 KiB
C#
Raw Normal View History

// 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 System.Collections.Generic;
using Doozy.Editor.EditorUI;
using Doozy.Editor.EditorUI.Components;
using Doozy.Editor.EditorUI.Components.Internal;
using Doozy.Editor.EditorUI.ScriptableObjects.Colors;
using Doozy.Editor.EditorUI.Utils;
using Doozy.Editor.Nody.Nodes.Internal;
using Doozy.Runtime.SceneManagement;
using Doozy.Runtime.SceneManagement.Nodes;
using Doozy.Runtime.UIElements.Extensions;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
namespace Doozy.Editor.SceneManagement.Nodes
{
[CustomEditor(typeof(UnloadSceneNode))]
public class UnloadSceneNodeEditor : FlowNodeEditor
{
public override Color nodeAccentColor => EditorColors.SceneManagement.Component;
public override EditorSelectableColorInfo nodeSelectableAccentColor => EditorSelectableColors.SceneManagement.Component;
public override IEnumerable<Texture2D> nodeIconTextures => EditorSpriteSheets.SceneManagement.Icons.UnloadSceneNode;
private FluidField getSceneByFluidField { get; set; }
private FluidField sceneBuildIndexFluidField { get; set; }
private FluidField sceneNameFluidField { get; set; }
private FluidToggleSwitch waitForSceneToUnloadSwitch { get; set; }
private SerializedProperty propertyGetSceneBy { get; set; }
private SerializedProperty propertySceneBuildIndex { get; set; }
private SerializedProperty propertySceneName { get; set; }
private SerializedProperty propertyWaitForSceneToUnload { get; set; }
protected override void OnDestroy()
{
base.OnDestroy();
getSceneByFluidField?.Recycle();
sceneBuildIndexFluidField?.Recycle();
sceneNameFluidField?.Recycle();
waitForSceneToUnloadSwitch?.Recycle();
}
protected override void FindProperties()
{
base.FindProperties();
propertyGetSceneBy = serializedObject.FindProperty(nameof(UnloadSceneNode.GetSceneBy));
propertySceneBuildIndex = serializedObject.FindProperty(nameof(UnloadSceneNode.SceneBuildIndex));
propertySceneName = serializedObject.FindProperty(nameof(UnloadSceneNode.SceneName));
propertyWaitForSceneToUnload = serializedObject.FindProperty(nameof(UnloadSceneNode.WaitForSceneToUnload));
}
protected override void InitializeEditor()
{
base.InitializeEditor();
componentHeader
.SetComponentNameText(ObjectNames.NicifyVariableName(nameof(UnloadSceneNode)))
.SetIcon(EditorSpriteSheets.SceneManagement.Icons.UnloadSceneNode)
.SetAccentColor(EditorColors.SceneManagement.Component)
.AddManualButton()
.AddApiButton()
.AddYouTubeButton()
;
EnumField getSceneByEnumField =
DesignUtils.NewEnumField(propertyGetSceneBy).SetStyleFlexGrow(1);
getSceneByFluidField =
FluidField.Get()
.SetLabelText("Get Scene By")
.AddFieldContent(getSceneByEnumField)
.SetStyleMaxWidth(112);
sceneNameFluidField =
FluidField.Get<TextField>(propertySceneName)
.SetLabelText("Scene Name");
sceneBuildIndexFluidField =
FluidField.Get<IntegerField>(propertySceneBuildIndex)
.SetLabelText("Scene Build Index");
sceneNameFluidField.SetStyleDisplay(propertyGetSceneBy.enumValueIndex == (int)GetSceneBy.Name ? DisplayStyle.Flex : DisplayStyle.None);
sceneBuildIndexFluidField.SetStyleDisplay(propertyGetSceneBy.enumValueIndex == (int)GetSceneBy.BuildIndex ? DisplayStyle.Flex : DisplayStyle.None);
getSceneByEnumField.RegisterValueChangedCallback(evt =>
{
if (evt?.newValue == null) return;
sceneNameFluidField.SetStyleDisplay((GetSceneBy)evt.newValue == GetSceneBy.Name ? DisplayStyle.Flex : DisplayStyle.None);
sceneBuildIndexFluidField.SetStyleDisplay((GetSceneBy)evt.newValue == GetSceneBy.BuildIndex ? DisplayStyle.Flex : DisplayStyle.None);
});
waitForSceneToUnloadSwitch =
FluidToggleSwitch.Get()
.SetLabelText("Wait for Scene to Unload")
.SetToggleAccentColor(nodeSelectableAccentColor)
.BindToProperty(propertyWaitForSceneToUnload);
AutoRefreshNodeView(); // <<< IMPORTANT - this updates the NodeView
}
protected override void Compose()
{
base.Compose();
root
.AddChild
(
DesignUtils.column
.AddChild
(
DesignUtils.row
.AddChild(getSceneByFluidField)
.AddSpaceBlock()
.AddChild(sceneNameFluidField)
.AddChild(sceneBuildIndexFluidField)
)
.AddSpaceBlock()
.AddChild
(
DesignUtils.row
.AddChild(waitForSceneToUnloadSwitch)
)
)
;
}
}
}