You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.8 KiB
C#

4 years ago
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace MalbersAnimations.Scriptables
{
///<summary>String Scriptable Variable. Based on the Talk - Game Architecture with Scriptable Objects by Ryan Hipple</summary>
[CreateAssetMenu(menuName = "Malbers Animations/Variables/String Array", order = 1000)]
public class StringArrayVar : StringVar
{
[SerializeField] private IntReference index = new IntReference(-1);
[SerializeField] private List<string> array = new List<string>();
/// <summary>Value of the String Scriptable variable</summary>
public override string Value
{
get
{
if (array != null && array.Count > 0)
{
if (index == -1) //means its a random value
{
return array[UnityEngine.Random.Range(0, array.Count)];
}
else
{
return array[index % array.Count];
}
}
return string.Empty;
}
set
{
if (array != null && array.Count > 0 && index != -1)
{
array[Index] = value;
}
}
}
public int Index { get => index.Value; set => index.Value = value; }
}
#if UNITY_EDITOR
[CanEditMultipleObjects, CustomEditor(typeof(StringArrayVar))]
public class StringArrayVarEditor : Editor
{
public static GUIStyle StyleBlue => MTools.Style(new Color(0, 0.5f, 1f, 0.3f));
protected SerializedProperty value, Description, debug, index, array;
private void OnEnable()
{
value = serializedObject.FindProperty("value");
Description = serializedObject.FindProperty("Description");
debug = serializedObject.FindProperty("debug");
array = serializedObject.FindProperty("array");
index = serializedObject.FindProperty("index");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
MalbersEditor.DrawDescription("Scriptable String Array");
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
// EditorGUILayout.BeginHorizontal();
EditorGUILayout.PropertyField(Description);
// MalbersEditor.DrawDebugIcon(debug);
// EditorGUILayout.EndHorizontal();
EditorGUILayout.PropertyField(index);
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(array,true);
EditorGUI.indentLevel--;
EditorGUILayout.EndVertical();
serializedObject.ApplyModifiedProperties();
}
}
#endif
}