258 lines
11 KiB
C#
258 lines
11 KiB
C#
using OctoCore.Inputs;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace OctoCore
|
|
{
|
|
[CustomEditor(typeof(OctoSettings))]
|
|
public class OctoSettingsEditor : UnityEditor.Editor
|
|
{
|
|
SerializedProperty saveProp;
|
|
SerializedProperty saveBooleansProp;
|
|
SerializedProperty saveFloatsProp;
|
|
SerializedProperty saveIntegersProp;
|
|
SerializedProperty saveStringsProp;
|
|
SerializedProperty saveVectorsProp;
|
|
|
|
SerializedProperty mappingProp;
|
|
SerializedProperty mappingInputActionAssetProp;
|
|
SerializedProperty mappingActionsProp;
|
|
|
|
SerializedProperty languagesProp;
|
|
SerializedProperty languagesDefaultProp;
|
|
SerializedProperty languagesSaveWrittenProp;
|
|
SerializedProperty languagesSaveAudioProp;
|
|
SerializedProperty languagesOverridesProp;
|
|
|
|
SerializedProperty scenesProp;
|
|
SerializedProperty scenesSceneDatasProp;
|
|
SerializedProperty scenesUseAddressablesProp;
|
|
SerializedProperty scenesFadeSettingsProp;
|
|
|
|
SerializedProperty UiProp;
|
|
SerializedProperty UiReferenceSizeProp;
|
|
SerializedProperty UiIconsBackgroundProp;
|
|
|
|
bool foldoutSave;
|
|
bool foldoutMapping;
|
|
bool foldoutLanguages;
|
|
bool foldoutScenes;
|
|
bool foldoutUi;
|
|
|
|
void OnEnable()
|
|
{
|
|
saveProp = serializedObject.FindProperty("Save");
|
|
saveBooleansProp = saveProp.FindPropertyRelative("Booleans");
|
|
saveIntegersProp = saveProp.FindPropertyRelative("Integers");
|
|
saveFloatsProp = saveProp.FindPropertyRelative("Floats");
|
|
saveStringsProp = saveProp.FindPropertyRelative("Strings");
|
|
saveVectorsProp = saveProp.FindPropertyRelative("Vectors");
|
|
|
|
mappingProp = serializedObject.FindProperty("Mapping");
|
|
mappingInputActionAssetProp = mappingProp.FindPropertyRelative("InputActionAsset");
|
|
mappingActionsProp = mappingProp.FindPropertyRelative("Actions");
|
|
|
|
languagesProp = serializedObject.FindProperty("Languages");
|
|
languagesDefaultProp = languagesProp.FindPropertyRelative("Default");
|
|
languagesSaveWrittenProp = languagesProp.FindPropertyRelative("SaveWritten");
|
|
languagesSaveAudioProp = languagesProp.FindPropertyRelative("SaveAudio");
|
|
languagesOverridesProp = languagesProp.FindPropertyRelative("Overrides");
|
|
|
|
scenesProp = serializedObject.FindProperty("Scenes");
|
|
scenesSceneDatasProp = scenesProp.FindPropertyRelative("SceneDatas");
|
|
scenesUseAddressablesProp = scenesProp.FindPropertyRelative("UseAddressables");
|
|
scenesFadeSettingsProp = scenesProp.FindPropertyRelative("FadeSettings");
|
|
|
|
UiProp = serializedObject.FindProperty("Ui");
|
|
UiReferenceSizeProp = UiProp.FindPropertyRelative("ReferenceSize");
|
|
UiIconsBackgroundProp = UiProp.FindPropertyRelative("IconsBackground");
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
OctoSettings data = (OctoSettings)target;
|
|
|
|
serializedObject.Update();
|
|
|
|
GUIStyle foldout = new GUIStyle(EditorStyles.foldout) { fontStyle = FontStyle.Bold };
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
// SAVE
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
EditorGUILayout.BeginVertical("box");
|
|
EditorGUI.indentLevel++;
|
|
|
|
foldoutSave = EditorGUILayout.Foldout(foldoutSave, "SAVE", true, foldout);
|
|
|
|
if (foldoutSave)
|
|
{
|
|
EditorGUILayout.Space();
|
|
EditorGUI.indentLevel++;
|
|
|
|
if (GUILayout.Button("Get All Datas"))
|
|
{
|
|
data.GetAllDatas();
|
|
}
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
EditorGUILayout.PropertyField(saveBooleansProp);
|
|
EditorGUILayout.PropertyField(saveFloatsProp);
|
|
EditorGUILayout.PropertyField(saveIntegersProp);
|
|
EditorGUILayout.PropertyField(saveStringsProp);
|
|
EditorGUILayout.PropertyField(saveVectorsProp);
|
|
|
|
EditorGUI.indentLevel--;
|
|
EditorGUILayout.Space(4);
|
|
}
|
|
|
|
EditorGUI.indentLevel--;
|
|
EditorGUILayout.EndVertical();
|
|
EditorGUILayout.Space();
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
// MAPPING
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
EditorGUILayout.BeginVertical("box");
|
|
EditorGUI.indentLevel++;
|
|
|
|
foldoutMapping = EditorGUILayout.Foldout(foldoutMapping, "MAPPING", true, foldout);
|
|
|
|
if (foldoutMapping)
|
|
{
|
|
EditorGUILayout.Space();
|
|
|
|
#if ENABLE_INPUT_SYSTEM
|
|
EditorGUILayout.PropertyField(mappingInputActionAssetProp);
|
|
EditorGUI.indentLevel++;
|
|
EditorGUILayout.PropertyField(mappingActionsProp);
|
|
EditorGUI.indentLevel--;
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
EditorGUILayout.HelpBox(
|
|
"To generate OctoActions enum:\n" +
|
|
"1. Assign an Input Action Asset first\n" +
|
|
"2. Click 'Generate Inputs'\n\n" +
|
|
"Note: The enum will be generated in Assets/OctoCore/ (safe from package updates)",
|
|
MessageType.Info
|
|
);
|
|
|
|
EditorGUILayout.Space(5);
|
|
|
|
GUI.enabled = data.Mapping.InputActionAsset != null;
|
|
if (GUILayout.Button("Generate Inputs", GUILayout.Height(20)))
|
|
{
|
|
data.GenerateInputs();
|
|
}
|
|
GUI.enabled = true;
|
|
#else
|
|
EditorGUILayout.HelpBox(
|
|
"Input System Package is not enabled.\n" +
|
|
"Please enable it in Project Settings > Player > Active Input Handling.",
|
|
MessageType.Warning
|
|
);
|
|
#endif
|
|
|
|
EditorGUILayout.Space(4);
|
|
}
|
|
|
|
EditorGUI.indentLevel--;
|
|
EditorGUILayout.EndVertical();
|
|
EditorGUILayout.Space();
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
// LANGUAGES
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
EditorGUILayout.BeginVertical("box");
|
|
EditorGUI.indentLevel++;
|
|
|
|
foldoutLanguages = EditorGUILayout.Foldout(foldoutLanguages, "LANGUAGES", true, foldout);
|
|
|
|
if (foldoutLanguages)
|
|
{
|
|
EditorGUILayout.Space();
|
|
|
|
EditorGUILayout.PropertyField(languagesDefaultProp);
|
|
EditorGUILayout.PropertyField(languagesSaveWrittenProp);
|
|
EditorGUILayout.PropertyField(languagesSaveAudioProp);
|
|
EditorGUI.indentLevel++;
|
|
EditorGUILayout.PropertyField(languagesOverridesProp);
|
|
EditorGUI.indentLevel--;
|
|
|
|
EditorGUILayout.Space(4);
|
|
}
|
|
|
|
EditorGUI.indentLevel--;
|
|
EditorGUILayout.EndVertical();
|
|
EditorGUILayout.Space();
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
// SCENES
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
EditorGUILayout.BeginVertical("box");
|
|
EditorGUI.indentLevel++;
|
|
|
|
foldoutScenes = EditorGUILayout.Foldout(foldoutScenes, "SCENES", true, foldout);
|
|
|
|
if (foldoutScenes)
|
|
{
|
|
EditorGUILayout.Space();
|
|
EditorGUI.indentLevel++;
|
|
|
|
if (GUILayout.Button("Get All Scene Datas"))
|
|
{
|
|
data.GetAllSceneDatas();
|
|
}
|
|
|
|
EditorGUILayout.Space();
|
|
|
|
EditorGUILayout.PropertyField(scenesSceneDatasProp);
|
|
EditorGUILayout.PropertyField(scenesUseAddressablesProp);
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.LabelField("Fade Settings", EditorStyles.boldLabel);
|
|
EditorGUI.indentLevel++;
|
|
EditorGUILayout.PropertyField(scenesFadeSettingsProp);
|
|
EditorGUI.indentLevel--;
|
|
|
|
EditorGUI.indentLevel--;
|
|
EditorGUILayout.Space(4);
|
|
}
|
|
|
|
EditorGUI.indentLevel--;
|
|
EditorGUILayout.EndVertical();
|
|
EditorGUILayout.Space();
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
// UI
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
EditorGUILayout.BeginVertical("box");
|
|
EditorGUI.indentLevel++;
|
|
|
|
foldoutUi = EditorGUILayout.Foldout(foldoutUi, "INTERFACE", true, foldout);
|
|
|
|
if (foldoutUi)
|
|
{
|
|
EditorGUILayout.Space();
|
|
|
|
EditorGUILayout.PropertyField(UiReferenceSizeProp);
|
|
EditorGUILayout.PropertyField(UiIconsBackgroundProp);
|
|
|
|
EditorGUILayout.Space(4);
|
|
}
|
|
|
|
EditorGUI.indentLevel--;
|
|
EditorGUILayout.EndVertical();
|
|
EditorGUILayout.Space();
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
}
|
|
}
|
|
}
|