BITFALL/Assets/GSpawn - Level Designer/Scripts/Objects/Layers/PluginObjectLayerDbUI.cs

107 lines
4.3 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor.UIElements;
using System.Collections.Generic;
namespace GSpawn
{
public class PluginObjectLayerDbUI : PluginUI
{
private List<PluginObjectLayer> _pluginLayerBuffer = new List<PluginObjectLayer>();
private List<int> _unityLayerBuffer = new List<int>();
[SerializeField]
private ListViewState _layerViewState;
private ListView<UIPluginObjectLayerItem, PluginObjectLayer> _layerView;
public static PluginObjectLayerDbUI instance { get { return PluginObjectLayerDb.instance.ui; } }
protected override void onRefresh()
{
refreshLayerView();
}
protected override void onBuild()
{
createTopToolbar();
createLayerView();
refreshLayerView();
}
protected override void onEnabled()
{
if (_layerViewState == null)
{
_layerViewState = ScriptableObject.CreateInstance<ListViewState>();
_layerViewState.name = GetType().Name + "_LayerViewState";
AssetDbEx.addObjectToAsset(_layerViewState, PluginObjectLayerDb.instance);
}
}
protected override void onDestroy()
{
ScriptableObjectEx.destroyImmediate(_layerViewState);
}
protected override void onUndoRedo()
{
if (_layerView != null)
refreshLayerView();
}
private void createTopToolbar()
{
var toolbar = new Toolbar();
toolbar.style.flexShrink = 0.0f;
contentContainer.Add(toolbar);
var button = UI.createToolbarButton(TexturePool.instance.lightBulb, UI.ButtonStyle.Push, UIValues.smallToolbarButtonSize, toolbar);
UI.useDefaultMargins(button);
button.tooltip = "Activate selected layers.";
button.clicked += () => { selectedLayers(_unityLayerBuffer); PluginScene.instance.setLayersActive(_unityLayerBuffer, true, true); };
button = UI.createToolbarButton(TexturePool.instance.lightBulbGray, UI.ButtonStyle.Push, UIValues.smallToolbarButtonSize, toolbar);
UI.useDefaultMargins(button);
button.tooltip = "Deactivate selected layers.";
button.clicked += () => { selectedLayers(_unityLayerBuffer); PluginScene.instance.setLayersActive(_unityLayerBuffer, false, true); };
button = UI.createToolbarButton(TexturePool.instance.delete, UI.ButtonStyle.Push, UIValues.smallToolbarButtonSize, toolbar);
UI.useDefaultMargins(button);
button.tooltip = "Delete selected layers. Note: Tile rule prefab instances will not be deleted.";
button.clicked += () => { selectedLayers(_unityLayerBuffer); PluginScene.instance.deleteLayers(_unityLayerBuffer); };
UI.createFlexGrow(toolbar);
button = UI.createToolbarButton(TexturePool.instance.refresh, UI.ButtonStyle.Push, UIValues.smallToolbarButtonSize, toolbar);
button.tooltip = "Refresh.";
button.style.marginTop = 2.0f;
button.clicked += () => { refresh(); };
}
private void createLayerView()
{
_layerView = new ListView<UIPluginObjectLayerItem, PluginObjectLayer>(_layerViewState, contentContainer);
contentContainer.style.flexGrow = 1.0f; // Note: Must be here. Otherwise, the list view scroll bar shows up unnecessarily.
_layerView.canRenameItems = true;
_layerView.canMultiSelect = true;
}
private void refreshLayerView()
{
_layerView.onBeginBuild();
var layers = new List<PluginObjectLayer>();
PluginObjectLayerDb.instance.getLayers(layers);
foreach (var l in layers)
_layerView.addItem(l, true);
_layerView.onEndBuild();
}
private void selectedLayers(List<int> layers)
{
_layerView.getSelectedItemData(_pluginLayerBuffer);
PluginObjectLayerDb.instance.getUnityLayers(_pluginLayerBuffer, layers);
}
}
}
#endif