/*
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 * All rights reserved.
 *
 * Licensed under the Oculus SDK License Agreement (the "License");
 * you may not use the Oculus SDK except in compliance with the License,
 * which is provided at the time of installation or download, or which
 * otherwise accompanies this software in either electronic or hard copy form.
 *
 * You may obtain a copy of the License at
 *
 * https://developer.oculus.com/licenses/oculussdk/
 *
 * Unless required by applicable law or agreed to in writing, the Oculus SDK
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/************************************************************************************
 * Filename    :   ONSPAudioSourceEditor.cs
 * Content     :   This script adds editor functionality to OculusSpatializerUserParams script.
 ***********************************************************************************/

#define CUSTOM_LAYOUT

using UnityEditor;
using UnityEngine;
using System.Collections.Generic;

[CustomEditor(typeof(ONSPAudioSource))]

public class OculusSpatializerUserParamsEditor : Editor
{
	// target component
	private ONSPAudioSource m_Component;

	// OnEnable
	void OnEnable()
	{
		m_Component = (ONSPAudioSource)target;
	}
	
	// OnInspectorGUI
	public override void OnInspectorGUI()
	{
		GUI.color = Color.white;
		Undo.RecordObject(m_Component, "OculusSpatializerUserParams");
		
		{
			#if CUSTOM_LAYOUT
			m_Component.EnableSpatialization = EditorGUILayout.Toggle("Spatialization Enabled", m_Component.EnableSpatialization);
			m_Component.EnableRfl  = EditorGUILayout.Toggle("Reflections Enabled", m_Component.EnableRfl);
			m_Component.Gain  = EditorGUILayout.FloatField("Gain", m_Component.Gain);

			Separator();

			Label ("OCULUS ATTENUATION");
			m_Component.UseInvSqr = EditorGUILayout.Toggle("Enabled", m_Component.UseInvSqr);
			Label ("");
			Label("RANGE (0.0 - 1000000.0 meters)");
			m_Component.Near  = EditorGUILayout.FloatField("Minimum", m_Component.Near);
			m_Component.Far   = EditorGUILayout.FloatField("Maximum", m_Component.Far);

            Label("");
            Label("VOLUMETRIC RADIUS (0.0 - 1000.0 meters)");
            m_Component.VolumetricRadius = EditorGUILayout.FloatField("Radius", m_Component.VolumetricRadius);

			Separator();

			Label("REVERB SEND LEVEL (-60.0 - 20.0 decibels)");
			m_Component.ReverbSend  = EditorGUILayout.FloatField(" ", m_Component.ReverbSend);

			Separator();

			#else			 
			DrawDefaultInspector ();
			#endif
		}
		
		if (GUI.changed)
		{
			EditorUtility.SetDirty(m_Component);
		}
	}	
	
	// Utilities, move out of here (or copy over to other editor script)
	
	// Separator
	void Separator()
	{
		GUI.color = new Color(1, 1, 1, 0.25f);
		GUILayout.Box("", "HorizontalSlider", GUILayout.Height(16));
		GUI.color = Color.white;
	}
	
	// Label
	void Label(string label)
	{
		EditorGUILayout.LabelField (label);
	}
	
}