using AlicizaX; using System.Collections.Generic; using AlicizaX.Runtime; using UnityEditor; using UnityEngine; namespace AlicizaX.Editor { [CustomEditor(typeof(BaseComponent))] internal sealed class BaseComponentInspector : GameFrameworkInspector { private static readonly float[] GameSpeed = new float[] {0f, 0.01f, 0.1f, 0.25f, 0.5f, 1f, 1.5f, 2f, 4f, 8f}; private static readonly string[] GameSpeedForDisplay = new string[] {"0x", "0.01x", "0.1x", "0.25x", "0.5x", "1x", "1.5x", "2x", "4x", "8x"}; private SerializedProperty m_FrameRate = null; private SerializedProperty m_GameSpeed = null; private SerializedProperty m_RunInBackground = null; private SerializedProperty m_NeverSleep = null; public override void OnInspectorGUI() { base.OnInspectorGUI(); serializedObject.Update(); BaseComponent t = (BaseComponent) target; int frameRate = EditorGUILayout.IntSlider("Frame Rate", m_FrameRate.intValue, 1, 120); if (frameRate != m_FrameRate.intValue) { if (EditorApplication.isPlaying) { t.FrameRate = frameRate; } else { m_FrameRate.intValue = frameRate; } } EditorGUILayout.BeginVertical("box"); { float gameSpeed = EditorGUILayout.Slider("Game Speed", m_GameSpeed.floatValue, 0f, 8f); int selectedGameSpeed = GUILayout.SelectionGrid(GetSelectedGameSpeed(gameSpeed), GameSpeedForDisplay, 5); if (selectedGameSpeed >= 0) { gameSpeed = GetGameSpeed(selectedGameSpeed); } if (gameSpeed != m_GameSpeed.floatValue) { if (EditorApplication.isPlaying) { t.GameSpeed = gameSpeed; } else { m_GameSpeed.floatValue = gameSpeed; } } } EditorGUILayout.EndVertical(); bool runInBackground = EditorGUILayout.Toggle("Run in Background", m_RunInBackground.boolValue); if (runInBackground != m_RunInBackground.boolValue) { if (EditorApplication.isPlaying) { t.RunInBackground = runInBackground; } else { m_RunInBackground.boolValue = runInBackground; } } bool neverSleep = EditorGUILayout.Toggle("Never Sleep", m_NeverSleep.boolValue); if (neverSleep != m_NeverSleep.boolValue) { if (EditorApplication.isPlaying) { t.NeverSleep = neverSleep; } else { m_NeverSleep.boolValue = neverSleep; } } serializedObject.ApplyModifiedProperties(); } protected override void OnCompileComplete() { base.OnCompileComplete(); } private void OnEnable() { m_FrameRate = serializedObject.FindProperty("m_FrameRate"); m_GameSpeed = serializedObject.FindProperty("m_GameSpeed"); m_RunInBackground = serializedObject.FindProperty("m_RunInBackground"); m_NeverSleep = serializedObject.FindProperty("m_NeverSleep"); } private float GetGameSpeed(int selectedGameSpeed) { if (selectedGameSpeed < 0) { return GameSpeed[0]; } if (selectedGameSpeed >= GameSpeed.Length) { return GameSpeed[GameSpeed.Length - 1]; } return GameSpeed[selectedGameSpeed]; } private int GetSelectedGameSpeed(float gameSpeed) { for (int i = 0; i < GameSpeed.Length; i++) { if (gameSpeed == GameSpeed[i]) { return i; } } return -1; } } }