5 using RyleRadio.Tracks;
15 [CustomEditor(typeof(RadioData))]
16 public class RadioDataEditor : Editor
19 private SerializedProperty trackWs;
21 private int lastTrackWSize;
24 private SerializedProperty gizmoColor;
26 private SerializedProperty gizmoColorSecondary;
29 private SerializedProperty forceClipSampleRate;
31 private SerializedProperty forcedSampleRate;
34 private bool showAdvanced =
false;
40 private void OnEnable()
43 gizmoColor = serializedObject.FindProperty(
"gizmoColor");
44 gizmoColorSecondary = serializedObject.FindProperty(
"gizmoColorSecondary");
46 forceClipSampleRate = serializedObject.FindProperty(
"forceClipSampleRate");
47 forcedSampleRate = serializedObject.FindProperty(
"forcedSampleRate");
50 trackWs = serializedObject.FindProperty(
"trackWs");
51 lastTrackWSize = trackWs.arraySize;
54 for (
int i = 0; i < trackWs.arraySize; i++)
57 SerializedProperty track = trackWs.GetArrayElementAtIndex(i);
60 SerializedProperty radioTrack = track.FindPropertyRelative(
"track");
61 SerializedProperty trackType = track.FindPropertyRelative(
"trackType");
64 if (radioTrack.managedReferenceValue ==
null)
67 radioTrack.managedReferenceValue = RadioTrackWrapper.CreateTrackEditor(trackType.stringValue);
72 trackType.stringValue = RadioTrackWrapper.GetTrackType(radioTrack.managedReferenceValue.ToString());
77 serializedObject.ApplyModifiedProperties();
83 public override void OnInspectorGUI()
86 serializedObject.Update();
89 showAdvanced = EditorGUILayout.Foldout(showAdvanced,
new GUIContent(
"Advanced Settings"));
94 DrawAdvancedOptions();
98 EditorGUILayout.PropertyField(trackWs,
new GUIContent(
"Tracks",
"These are actually RadioTrackWrappers, not RadioTracks"));
104 if (trackWs.arraySize > lastTrackWSize)
109 else if (trackWs.arraySize < lastTrackWSize)
117 serializedObject.ApplyModifiedProperties();
123 private void DrawAdvancedOptions()
126 EditorGUILayout.PropertyField(gizmoColor,
new GUIContent(
"Gizmo Colour"));
127 EditorGUILayout.PropertyField(gizmoColorSecondary,
new GUIContent(
"Secondary Gizmo Colour"));
130 forceClipSampleRate.boolValue = EditorGUILayout.BeginToggleGroup(
"Force sample rate on Clips", forceClipSampleRate.boolValue);
133 EditorGUILayout.PropertyField(forcedSampleRate,
new GUIContent(
"Forced sample rate"));
136 if (GUILayout.Button(
new GUIContent(
"Force Clips to sample rate")))
137 ForceClipsToSampleRate();
140 EditorGUILayout.EndToggleGroup();
143 if (GUILayout.Button(
new GUIContent(
"Clear Cache")))
144 ((RadioData)serializedObject.targetObject).ClearCache();
150 private void InitNewTrack()
153 SerializedProperty newElement = trackWs.GetArrayElementAtIndex(trackWs.arraySize - 1);
156 SerializedProperty radioTrack = newElement.FindPropertyRelative(
"track");
157 SerializedProperty trackType = newElement.FindPropertyRelative(
"trackType");
160 SerializedProperty gain = newElement.FindPropertyRelative(
"gain");
163 SerializedProperty rangeCurve = newElement.FindPropertyRelative(
"rangeCurve");
166 radioTrack.managedReferenceValue = RadioTrackWrapper.CreateTrackEditor(trackType.stringValue);
169 gain.floatValue = 100;
170 rangeCurve.animationCurveValue =
new(RadioTrackWrapper.DefaultRangeCurve.keys);
179 private void ForceClipsToSampleRate()
182 for (
int i = 0; i < trackWs.arraySize; i++)
185 SerializedProperty wrapper = trackWs.GetArrayElementAtIndex(i);
188 if (wrapper.FindPropertyRelative(
"track").managedReferenceValue is ClipRadioTrack clipTrack)
191 ForceSingleClipToSampleRate(clipTrack.clip);
194 else if (wrapper.FindPropertyRelative(
"track").managedReferenceValue is StationRadioTrack stationTrack)
197 foreach (StationRadioTrackWrapper sTrackW
in stationTrack.stationTrackWs)
200 if (sTrackW.EditorChildClip !=
null)
201 ForceSingleClipToSampleRate(sTrackW.EditorChildClip);
211 private void ForceSingleClipToSampleRate(AudioClip _clip)
214 AudioImporter importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(_clip)) as AudioImporter;
217 string buildTarget = BuildPipeline.GetBuildTargetName(EditorUserBuildSettings.activeBuildTarget);
220 var sampleSettings = importer.GetOverrideSampleSettings(buildTarget);
223 sampleSettings.sampleRateSetting = AudioSampleRateSetting.OverrideSampleRate;
226 uint lastSampleRate = sampleSettings.sampleRateOverride;
229 if (forceClipSampleRate.intValue > 0)
230 sampleSettings.sampleRateOverride = (uint)forcedSampleRate.intValue;
232 sampleSettings.sampleRateOverride = (uint)AudioSettings.outputSampleRate;
235 if (sampleSettings.sampleRateOverride != lastSampleRate)
236 Debug.Log(
"Changed clip {_clip} sample rate to {sampleSettings.sampleRateOverride} for platform {buildTarget}.");
239 importer.SetOverrideSampleSettings(buildTarget, sampleSettings);
Editor scripts for classes and attributes, notably excluding MultiselectAttribute.