NumericFactory/FactoryNumeric/Packages/PrimeTween/Editor/PrimeTweenManagerInspector.cs

89 lines
3.9 KiB
C#

using System.Collections.Generic;
using JetBrains.Annotations;
using PrimeTween;
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(PrimeTweenManager))]
internal class PrimeTweenManagerInspector : Editor {
SerializedProperty tweensProp;
SerializedProperty lateUpdateTweensProp;
SerializedProperty fixedUpdateTweensProp;
GUIContent aliveTweenGuiContent;
GUIContent lateUpdateTweenGuiContent;
GUIContent fixedUpdateTweenGuiContent;
StringCache tweensCountCache;
StringCache maxSimultaneousTweensCountCache;
StringCache currentPoolCapacityCache;
void OnEnable() {
tweensProp = serializedObject.FindProperty(nameof(PrimeTweenManager.tweens));
lateUpdateTweensProp = serializedObject.FindProperty(nameof(PrimeTweenManager.lateUpdateTweens));
fixedUpdateTweensProp = serializedObject.FindProperty(nameof(PrimeTweenManager.fixedUpdateTweens));
Assert.IsNotNull(tweensProp);
Assert.IsNotNull(lateUpdateTweensProp);
Assert.IsNotNull(fixedUpdateTweensProp);
aliveTweenGuiContent = new GUIContent("Tweens");
lateUpdateTweenGuiContent = new GUIContent("Late update tweens");
fixedUpdateTweenGuiContent = new GUIContent("Fixed update tweens");
}
public override void OnInspectorGUI() {
using (new EditorGUI.DisabledScope(true)) {
EditorGUILayout.ObjectField("Script", MonoScript.FromMonoBehaviour((MonoBehaviour)target), typeof(MonoBehaviour), false);
}
var manager = target as PrimeTweenManager;
Assert.IsNotNull(manager);
GUILayout.BeginHorizontal();
GUILayout.Label("Alive tweens", EditorStyles.label);
GUILayout.Label(tweensCountCache.GetCachedString(manager.tweensCount), EditorStyles.boldLabel);
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label( Constants.maxAliveTweens, EditorStyles.label);
GUILayout.Label(maxSimultaneousTweensCountCache.GetCachedString(manager.maxSimultaneousTweensCount), EditorStyles.boldLabel);
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("Tweens capacity", EditorStyles.label);
GUILayout.Label(currentPoolCapacityCache.GetCachedString(manager.currentPoolCapacity), EditorStyles.boldLabel);
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
EditorGUILayout.HelpBox("Use " + Constants.setTweensCapacityMethod + " to set tweens capacity.\n" +
"To prevent memory allocations during runtime, choose the value that is greater than the maximum number of simultaneous tweens in your game.", MessageType.None);
drawList(tweensProp, manager.tweens, aliveTweenGuiContent);
drawList(lateUpdateTweensProp, manager.lateUpdateTweens, lateUpdateTweenGuiContent);
drawList(fixedUpdateTweensProp, manager.fixedUpdateTweens, fixedUpdateTweenGuiContent);
void drawList(SerializedProperty tweensProp, List<ReusableTween> list, GUIContent guiContent) {
if (tweensProp.isExpanded) {
foreach (var tween in list) {
if (tween != null && string.IsNullOrEmpty(tween.debugDescription)) {
tween.debugDescription = tween.GetDescription();
}
}
}
using (new EditorGUI.DisabledScope(true)) {
EditorGUILayout.PropertyField(tweensProp, guiContent);
}
}
}
struct StringCache {
int currentValue;
string str;
[NotNull]
internal string GetCachedString(int value) {
if (currentValue != value || str == null) {
currentValue = value;
str = value.ToString();
}
return str;
}
}
}