Code Review

1 using System;
2 using
UnityEditor;
3 using
UnityEngine;
4
5 namespace
UnityStandardAssets.ImageEffects
6 {
7     
[CustomEditor (typeof(ColorCorrectionCurves))]
8     
class ColorCorrectionCurvesEditor : Editor {
9         SerializedObject serObj;
10
11         SerializedProperty mode;
12
13         SerializedProperty redChannel;
14         SerializedProperty greenChannel;
15         SerializedProperty blueChannel;
16
17         SerializedProperty useDepthCorrection;
18
19         SerializedProperty depthRedChannel;
20         SerializedProperty depthGreenChannel;
21         SerializedProperty depthBlueChannel;
22
23         SerializedProperty zCurveChannel;
24
25         SerializedProperty saturation;
26
27         SerializedProperty selectiveCc;
28         SerializedProperty selectiveFromColor;
29         SerializedProperty selectiveToColor;
30
31         
private bool applyCurveChanges = false;
32
33         
void OnEnable () {
34             serObj =
new SerializedObject (target);
35
36             mode = serObj.FindProperty (
"mode");
37
38             saturation = serObj.FindProperty (
"saturation");
39
40             redChannel = serObj.FindProperty (
"redChannel");
41             greenChannel = serObj.FindProperty (
"greenChannel");
42             blueChannel = serObj.FindProperty (
"blueChannel");
43
44             useDepthCorrection = serObj.FindProperty (
"useDepthCorrection");
45
46             zCurveChannel = serObj.FindProperty (
"zCurve");
47
48             depthRedChannel = serObj.FindProperty (
"depthRedChannel");
49             depthGreenChannel = serObj.FindProperty (
"depthGreenChannel");
50             depthBlueChannel = serObj.FindProperty (
"depthBlueChannel");
51
52             serObj.ApplyModifiedProperties ();
53
54             selectiveCc = serObj.FindProperty (
"selectiveCc");
55             selectiveFromColor = serObj.FindProperty (
"selectiveFromColor");
56             selectiveToColor = serObj.FindProperty (
"selectiveToColor");
57         }
58
59         
void CurveGui ( string name, SerializedProperty animationCurve, Color color) {
60             
// @NOTE: EditorGUILayout.CurveField is buggy and flickers, using PropertyField for now
61             
//animationCurve.animationCurveValue = EditorGUILayout.CurveField (GUIContent (name), animationCurve.animationCurveValue, color, Rect (0.0f,0.0f,1.0f,1.0f));
62             EditorGUILayout.PropertyField (animationCurve,
new GUIContent (name));
63             
if (GUI.changed)
64                 applyCurveChanges =
true;
65         }
66
67         
void BeginCurves () {
68             applyCurveChanges =
false;
69         }
70
71         
void ApplyCurves () {
72             
if (applyCurveChanges) {
73                 serObj.ApplyModifiedProperties ();
74                 (serObj.targetObject
as ColorCorrectionCurves).gameObject.SendMessage ("UpdateTextures");
75             }
76         }
77
78
79         
public override void OnInspectorGUI () {
80             serObj.Update ();
81
82             GUILayout.Label (
"Use curves to tweak RGB channel colors", EditorStyles.miniBoldLabel);
83
84             saturation.floatValue = EditorGUILayout.Slider(
"Saturation", saturation.floatValue, 0.0f, 5.0f);
85
86             EditorGUILayout.PropertyField (mode,
new GUIContent ("Mode"));
87             EditorGUILayout.Separator ();
88
89             BeginCurves ();
90
91             CurveGui (
" Red", redChannel, Color.red);
92             CurveGui (
" Green", greenChannel, Color.green);
93             CurveGui (
" Blue", blueChannel, Color.blue);
94
95             EditorGUILayout.Separator ();
96
97             
if (mode.intValue > 0)
98                 useDepthCorrection.boolValue =
true;
99             
else
100                 useDepthCorrection.boolValue =
false;
101
102             
if (useDepthCorrection.boolValue) {
103                 CurveGui (
" Red (depth)", depthRedChannel, Color.red);
104                 CurveGui (
" Green (depth)", depthGreenChannel, Color.green);
105                 CurveGui (
" Blue (depth)", depthBlueChannel, Color.blue);
106                 EditorGUILayout.Separator ();
107                 CurveGui (
" Blend Curve", zCurveChannel, Color.grey);
108             }
109
110             EditorGUILayout.Separator ();
111             EditorGUILayout.PropertyField (selectiveCc,
new GUIContent ("Selective"));
112             
if (selectiveCc.boolValue) {
113                 EditorGUILayout.PropertyField (selectiveFromColor,
new GUIContent (" Key"));
114                 EditorGUILayout.PropertyField (selectiveToColor,
new GUIContent (" Target"));
115             }
116
117
118             ApplyCurves ();
119
120             
if (!applyCurveChanges)
121                 serObj.ApplyModifiedProperties ();
122         }
123     }
124 }


Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *