74 lines
2.1 KiB
C#

using UnityEngine;
using UnityEditor;
namespace Klak.Spout.Editor {
[CanEditMultipleObjects]
[CustomEditor(typeof(SpoutSender))]
sealed class SpoutSenderEditor : UnityEditor.Editor
{
SerializedProperty _spoutName;
SerializedProperty _keepAlpha;
SerializedProperty _captureMethod;
SerializedProperty _sourceCamera;
SerializedProperty _sourceTexture;
static class Labels
{
public static Label SpoutName = "Spout Name";
}
// Sender restart request
void RequestRestart()
{
// Dirty trick: We only can restart senders by modifying the
// spoutName property, so we modify it by an invalid name, then
// revert it.
foreach (SpoutSender send in targets)
{
send.spoutName = "";
send.spoutName = _spoutName.stringValue;
}
}
void OnEnable()
{
var finder = new PropertyFinder(serializedObject);
_spoutName = finder["_spoutName"];
_keepAlpha = finder["_keepAlpha"];
_captureMethod = finder["_captureMethod"];
_sourceCamera = finder["_sourceCamera"];
_sourceTexture = finder["_sourceTexture"];
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUI.BeginChangeCheck();
EditorGUILayout.DelayedTextField(_spoutName, Labels.SpoutName);
var restart = EditorGUI.EndChangeCheck();
EditorGUILayout.PropertyField(_keepAlpha);
EditorGUILayout.PropertyField(_captureMethod);
EditorGUI.indentLevel++;
if (_captureMethod.hasMultipleDifferentValues ||
_captureMethod.enumValueIndex == (int)CaptureMethod.Camera)
EditorGUILayout.PropertyField(_sourceCamera);
if (_captureMethod.hasMultipleDifferentValues ||
_captureMethod.enumValueIndex == (int)CaptureMethod.Texture)
EditorGUILayout.PropertyField(_sourceTexture);
EditorGUI.indentLevel--;
serializedObject.ApplyModifiedProperties();
if (restart) RequestRestart();
}
}
} // namespace Klak.Spout.Editor