summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/MaterializeFX/Scripts/MfxControllerEditor.cs
blob: 50ad9e500c8617f9dd167d8ecc9a5cfea5380942 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using System.Globalization;
using UnityEditor;
using UnityEngine;

namespace Assets.MaterializeFX.Scripts
{
    [CustomEditor(typeof(MfxController))]
    internal sealed class MfxControllerEditor : Editor
    {
        private GameObject _targetObject;
        private bool _modifyChildren;

        private AnimationCurve _maskOffsetCurve;
        private string _scaleTimeFactor;
        private string _scalePositionFactor;

        private bool _byDistance;
        private GameObject _distanceBasedObject;

        private bool _replaceMaterial;
        private bool _replaceMaterialMode;
        private Material _mfxMaterial;

        public override void OnInspectorGUI()
        {
            var mfxController = (MfxController)target;

            _targetObject = mfxController.TargetObject;
            _modifyChildren = mfxController.ModifyChildren;

            _maskOffsetCurve = mfxController.MaskOffsetCurve;
            _scaleTimeFactor = mfxController.ScaleTimeFactor.ToString(CultureInfo.InvariantCulture);
            _scalePositionFactor = mfxController.ScaleOffsetFactor.ToString(CultureInfo.InvariantCulture);

            _byDistance = mfxController.ByDistance;
            _distanceBasedObject = mfxController.DistanceBasedObject;

            _replaceMaterial = mfxController.ReplaceMaterial;
            _replaceMaterialMode = mfxController.ReplaceMaterialMode;
            _mfxMaterial = mfxController.MfxMaterial;

            EditorGUILayout.Separator();

            // Modify children
            EditorGUILayout.Separator();
            _modifyChildren = EditorGUILayout.Toggle(MfxEditorLocalization.ModifyChildrenLabel, _modifyChildren);
            mfxController.ModifyChildren = _modifyChildren;

            // Target object
            _targetObject = (GameObject)EditorGUILayout.ObjectField(MfxEditorLocalization.TargetObjectLabel, _targetObject, typeof(GameObject), true);
            mfxController.TargetObject = _targetObject;

            EditorGUILayout.Separator();
            EditorGUILayout.LabelField(MfxEditorLocalization.DistanceParamsLabel, EditorStyles.boldLabel);
          
            // ReplaceMaterials depending on the distance
            _byDistance = EditorGUILayout.Toggle(MfxEditorLocalization.ByDistanceLabel, _byDistance);
            mfxController.ByDistance = _byDistance;

            // Object To Calculate Distance
            if (_byDistance)
            {
                _distanceBasedObject = (GameObject)EditorGUILayout.ObjectField(MfxEditorLocalization.DistanceBasedObjectLabel, _distanceBasedObject, typeof(GameObject), true);
                mfxController.DistanceBasedObject = _distanceBasedObject;
            }

            if (!_byDistance)
            {
                // Direction type
                EditorGUILayout.Separator();
                EditorGUILayout.LabelField(MfxEditorLocalization.MfxParamsLabel, EditorStyles.boldLabel);

                _maskOffsetCurve = EditorGUILayout.CurveField(MfxEditorLocalization.MaskOffsetCurve, _maskOffsetCurve);
                mfxController.MaskOffsetCurve = _maskOffsetCurve;
               
                _scaleTimeFactor = EditorGUILayout.TextField(MfxEditorLocalization.ScaleTimeLabel, _scaleTimeFactor);
                _scalePositionFactor = EditorGUILayout.TextField(MfxEditorLocalization.ScalePositionLabel, _scalePositionFactor);
                mfxController.ScaleTimeFactor = float.Parse(_scaleTimeFactor);
                mfxController.ScaleOffsetFactor = float.Parse(_scalePositionFactor);
            }

            EditorGUILayout.Separator();
            EditorGUILayout.LabelField(MfxEditorLocalization.ReplaceMaterialParamsLabel, EditorStyles.boldLabel);

            _replaceMaterial = EditorGUILayout.Toggle(MfxEditorLocalization.ReplaceMaterialLabel, _replaceMaterial);

            mfxController.ReplaceMaterial = _replaceMaterial;

            if (_replaceMaterial)
            {
                _mfxMaterial = (Material)EditorGUILayout.ObjectField(MfxEditorLocalization.MaterialLabel, _mfxMaterial, typeof(Material), true);
                mfxController.MfxMaterial = _mfxMaterial;
            }

            if (_replaceMaterial)
            {
                _replaceMaterialMode = EditorGUILayout.Toggle(MfxEditorLocalization.ReplaceMaterialInEditorLabel, _replaceMaterialMode);
                mfxController.ReplaceMaterialMode = _replaceMaterialMode;

                if (_replaceMaterial && _replaceMaterialMode)
                {
                    if (GUILayout.Button(MfxEditorLocalization.ReplaceMaterialButton))
                    {
                        if (_mfxMaterial == null)
                            Debug.LogWarning("template mfx materials is not selected");
                        else
                        {
                            var targetObject = mfxController.Target;

                            MfxMaterialUtil.ReplaceRenderersMaterials(_mfxMaterial, targetObject, true);
                        }
                    }
                }
            }

            EditorUtility.SetDirty(target);
        }

        private static class MfxEditorLocalization
        {
            public const string TargetObjectLabel = "Target Object";
            public const string ModifyChildrenLabel = "Modify Children";
            public const string DistanceParamsLabel = "Distance Params";
            public const string ByDistanceLabel = "Depending on the distance";
            public const string DistanceBasedObjectLabel = "Object to calcualte distance";

            public const string MfxParamsLabel = "Mfx Params";
            public const string MaskOffsetCurve = "Mask Offset Curve";
            public const string ScaleTimeLabel = "Scale Time Factor";
            public const string ScalePositionLabel = "Scale Offset Factor";

            public const string ReplaceMaterialParamsLabel = "Replace Material Params";
            public const string ReplaceMaterialLabel = "Replace Material";
            public const string ReplaceMaterialInEditorLabel = "Replace in Editor";
            public const string ReplaceMaterialButton = "Copy & Replace";
            public const string MaterialLabel = "Mfx Material Template";
        }
    }
}