using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace AutoGroupGenerator
{
///
/// Custom inspector for configuring assets.
///
[CustomEditor(typeof(AssetSelectionInputRule))]
public class AssetSelectionInputRuleEditor : Editor
{
#region Fields
private SerializedProperty m_ValidAssets;
private SerializedProperty m_JsonAssetLists;
#endregion
#region Methods
private void OnEnable()
{
m_ValidAssets = serializedObject.FindProperty("m_SelectedAssets");
m_JsonAssetLists = serializedObject.FindProperty("m_JsonAssetLists");
}
///
/// Draws the custom inspector UI for the asset selection rule.
///
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.LabelField("Selected Assets", EditorStyles.boldLabel);
DrawObjectList(m_ValidAssets, allowSceneAssets: false, objectLabelWidth: 0f,
validator: IsValidSelectedAsset,
removeButtonTooltip: "Remove this asset");
EditorGUILayout.Space();
DrawAddAssetButton();
EditorGUILayout.Space();
EditorGUILayout.LabelField("JSON Input Lists", EditorStyles.boldLabel);
EditorGUILayout.HelpBox(
"Each TextAsset should contain a JSON array of asset paths, e.g.:\n" +
"[\"Assets/Prefabs/Player.prefab\", \"Assets/Textures/UI/Btn.png\"]\n" +
"Corrupt JSON files will be skipped with a warning.",
MessageType.Info
);
DrawTextAssetList(m_JsonAssetLists, removeButtonTooltip: "Remove this JSON file");
EditorGUILayout.Space();
DrawAddJsonTextAssetField();
EditorGUILayout.Space();
SerializedProperty includeAddressables = serializedObject.FindProperty("m_IncludeCurrentAddressables");
EditorGUILayout.PropertyField(includeAddressables);
EditorGUILayout.Space();
if (GUILayout.Button("Add Scenes in Build Profile"))
{
AddScenesInBuildToList();
}
serializedObject.ApplyModifiedProperties();
}
private void DrawObjectList(SerializedProperty arrayProp, bool allowSceneAssets, float objectLabelWidth,
System.Func