UP-Viagg-io/Viagg-io/Assets/AVProVideo/Editor/Scripts/Components/ResolveToRenderTextureEdito...

123 lines
4.2 KiB
C#

using UnityEditor;
using UnityEngine;
//-----------------------------------------------------------------------------
// Copyright 2015-2022 RenderHeads Ltd. All rights reserved.
//-----------------------------------------------------------------------------
namespace RenderHeads.Media.AVProVideo.Editor
{
/// <summary>
/// Editor for the ResolveToRenderTexture component
/// </summary>
[CanEditMultipleObjects]
[CustomEditor(typeof(ResolveToRenderTexture))]
public class ResolveToRenderTextureEditor : UnityEditor.Editor
{
private SerializedProperty _propMediaPlayer;
private SerializedProperty _propExternalTexture;
private SerializedProperty _propResolveFlags;
private SerializedProperty _propOptionsApplyHSBC;
private SerializedProperty _propOptionsHue;
private SerializedProperty _propOptionsSaturation;
private SerializedProperty _propOptionsBrightness;
private SerializedProperty _propOptionsContrast;
private SerializedProperty _propOptionsGamma;
private SerializedProperty _propOptionsTint;
private SerializedProperty _propOptionsAspectRatio;
void OnEnable()
{
_propMediaPlayer = this.CheckFindProperty("_mediaPlayer");
_propExternalTexture = this.CheckFindProperty("_externalTexture");
_propResolveFlags = this.CheckFindProperty("_resolveFlags");
_propOptionsApplyHSBC = this.CheckFindProperty("_options.applyHSBC");
_propOptionsHue = this.CheckFindProperty("_options.hue");
_propOptionsSaturation = this.CheckFindProperty("_options.saturation");
_propOptionsBrightness = this.CheckFindProperty("_options.brightness");
_propOptionsContrast = this.CheckFindProperty("_options.contrast");
_propOptionsGamma = this.CheckFindProperty("_options.gamma");
_propOptionsTint = this.CheckFindProperty("_options.tint");
_propOptionsAspectRatio = this.CheckFindProperty("_options.aspectRatio");
}
private void ButtonFloatReset(SerializedProperty prop, float value)
{
GUILayout.BeginHorizontal();
EditorGUILayout.PropertyField(prop);
if (GUILayout.Button("Reset", GUILayout.ExpandWidth(false)))
{
prop.floatValue = value;
}
GUILayout.EndHorizontal();
}
private void ButtonColorReset(SerializedProperty prop, Color value)
{
GUILayout.BeginHorizontal();
EditorGUILayout.PropertyField(prop);
if (GUILayout.Button("Reset", GUILayout.ExpandWidth(false)))
{
prop.colorValue = value;
}
GUILayout.EndHorizontal();
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(_propMediaPlayer);
EditorGUILayout.PropertyField(_propExternalTexture);
_propResolveFlags.intValue = EditorGUILayout.MaskField("Resolve Flags", _propResolveFlags.intValue, System.Enum.GetNames(typeof( VideoRender.ResolveFlags)));
EditorGUI.BeginChangeCheck();
{
EditorGUILayout.PropertyField(_propOptionsApplyHSBC);
EditorGUI.BeginDisabledGroup(!_propOptionsApplyHSBC.boolValue);
{
EditorGUI.indentLevel++;
ButtonFloatReset(_propOptionsHue, 0f);
ButtonFloatReset(_propOptionsSaturation, 0.5f);
ButtonFloatReset(_propOptionsBrightness, 0.5f);
ButtonFloatReset(_propOptionsContrast, 0.5f);
ButtonFloatReset(_propOptionsGamma, 1f);
EditorGUI.indentLevel--;
}
EditorGUI.EndDisabledGroup();
ButtonColorReset(_propOptionsTint, Color.white);
}
if (EditorGUI.EndChangeCheck())
{
Object[] resolves = this.serializedObject.targetObjects;
if (resolves != null)
{
foreach (ResolveToRenderTexture resolve in resolves)
{
resolve.SetMaterialDirty();
}
}
}
EditorGUILayout.PropertyField(_propOptionsAspectRatio);
serializedObject.ApplyModifiedProperties();
{
ResolveToRenderTexture resolve = this.target as ResolveToRenderTexture;
if (resolve != null && resolve.TargetTexture != null)
{
Rect r = GUILayoutUtility.GetAspectRect(resolve.TargetTexture.width / (float)resolve.TargetTexture.height);
GUI.DrawTexture(r, resolve.TargetTexture, ScaleMode.StretchToFill, true);
if (GUILayout.Button("Select Texture"))
{
Selection.activeObject = resolve.TargetTexture;
}
Repaint();
}
}
}
}
}