Files
Ipseity-Demo/Packages/OctoCore/Editor/OctoSettingsEditor.cs
T
2026-02-09 23:53:14 +01:00

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();
}
}
}