コード例 #1
0
        public static FieldInfoWrapper GetFieldInfo(Component component, String valueName)
        {
            FieldInfoWrapper       fieldInfo = null;
            CustomMaterialOnScreen customMaterialOnScreen = null;

            try { customMaterialOnScreen = component as CustomMaterialOnScreen; }
            catch (Exception) { }

            if (customMaterialOnScreen != null)
            {
                var materialProperty = customMaterialOnScreen.GetMaterialProperty(valueName);
                if (materialProperty != null)
                {
                    fieldInfo = new CustomfieldInfo(materialProperty);
                }
            }
            else
            {
                FieldInfo fi = component.GetType().GetField(valueName);
                if (fi != null)
                {
                    fieldInfo = new DefaultFieldInfo(fi);
                }

                PropertyInfo pi = component.GetType().GetProperty(valueName);
                if (pi != null)
                {
                    fieldInfo = new CustomPropertyInfo(pi);
                }
            }

            return(fieldInfo);
        }
コード例 #2
0
        public void Update()
        {
            foreach (var interpolator in interpolators.Values)
            {
                interpolator.InterpolatorUpdate(interpolator.UnscaledTime ? UnityEngine.Time.unscaledDeltaTime : UnityEngine.Time.deltaTime);
            }

            if (DisplayDebug)
            {
                foreach (var component in componentsActivationDictionary.Keys)
                {
                    string effectName = "";
                    CustomMaterialOnScreen customMaterialOnScreen = null;
                    try
                    {
                        customMaterialOnScreen = component as CustomMaterialOnScreen;
                    }
                    catch (Exception)
                    {
                    }

                    if (customMaterialOnScreen != null)
                    {
                        effectName = customMaterialOnScreen.Name;
                    }
                    else
                    {
                        effectName = component.GetType().ToString();
                    }

                    //DebugText.WriteLine(">>> [" + (component.enabled ? "+" : "_") + ", " + componentsActivationDictionary[component].Second + "] " + effectName + " <" + componentsActivationDictionary[component].First + ">");
                }
            }
        }
コード例 #3
0
        public String[] GetAvailableValueNames()
        {
            if (Postprocess == null)
            {
                return(new String[0]);
            }

            var availableValueName = new List <String>();

            FieldInfo[] fieldInfos = Postprocess.GetType().GetFields();
            foreach (var fieldInfo in fieldInfos)
            {
                if (TypeToInterpolatorMap.ContainsKey(fieldInfo.FieldType) && !IsValueAlreadyInUse(fieldInfo.Name))
                {
                    availableValueName.Add(fieldInfo.Name);
                }
            }

            PropertyInfo[] PropertyInfos = Postprocess.GetType().GetProperties();
            foreach (var propertyInfo in PropertyInfos)
            {
                if (propertyInfo.CanRead && propertyInfo.CanWrite)
                {
                    if (TypeToInterpolatorMap.ContainsKey(propertyInfo.PropertyType) &&
                        !IsValueAlreadyInUse(propertyInfo.Name))
                    {
                        availableValueName.Add(propertyInfo.Name);
                    }
                }
            }

            //CustomMaterialOnScreen
            CustomMaterialOnScreen customMaterialOnScreen = null;

            try { customMaterialOnScreen = Postprocess as CustomMaterialOnScreen; }
            catch (Exception) {}

            if (customMaterialOnScreen != null)
            {
                foreach (var materialProperty in customMaterialOnScreen.MaterialProperties)
                {
                    if (!IsValueAlreadyInUse(materialProperty.Get().Name) &&
                        materialProperty.Get().GetValueType() != typeof(Texture))
                    {
                        availableValueName.Add(materialProperty.Get().Name);
                    }
                }
            }

            return(availableValueName.ToArray());
        }
コード例 #4
0
        public override void OnInspectorGUI()
        {
            if (lastFrameTime.Equals(0.0f))
            {
                deltaTime     = 0.0f;
                lastFrameTime = Time.realtimeSinceStartup;
            }
            else
            {
                deltaTime     = Time.realtimeSinceStartup - lastFrameTime;
                lastFrameTime = Time.realtimeSinceStartup;
            }

            var CameraEffectsInterpolator = (CameraEffectsInterpolator)target;

            EditorGUI.BeginDisabledGroup(Application.isPlaying);

            EditorGUILayout.BeginHorizontal();



            if (GUILayout.Button(CameraEffectsInterpolator.State != InterpolatorState.Playing ? "Play" : "Pause"))
            {
                switch (CameraEffectsInterpolator.State)
                {
                case InterpolatorState.Playing:
                    CameraEffectsInterpolator.Pause();
                    break;

                case InterpolatorState.Paused:
                    CameraEffectsInterpolator.Resume();
                    break;

                case InterpolatorState.Stopped:
                case InterpolatorState.None:
                    CameraEffectsInterpolator.Play();
                    break;
                }
            }



            if (GUILayout.Button("Stop"))
            {
                CameraEffectsInterpolator.Reset();
            }

//            if (CameraEffectsInterpolator.State == InterpolatorState.None)
//            {
//                CameraEffectsInterpolator.ResetChilds();
//            }

            EditorGUILayout.EndHorizontal();

            EditorGUI.BeginDisabledGroup(CameraEffectsInterpolator.State != InterpolatorState.Paused);
            float newTime = EditorGUILayout.Slider(CameraEffectsInterpolator.Time, 0.0f, CameraEffectsInterpolator.Duration);

            EditorGUI.EndDisabledGroup();

            if (CameraEffectsInterpolator.State == InterpolatorState.Paused)
            {
                CameraEffectsInterpolator.SetTimeAndUpdate(newTime);
            }

            EditorGUI.BeginDisabledGroup(CameraEffectsInterpolator.State != InterpolatorState.None);

            ////
            //    Globals
            ////
            _showGlobals = EditorGUILayout.Foldout(_showGlobals, "Globals:");
            if (_showGlobals)
            {
                Color defaultColor = GUI.color;
                GUI.color = Color.green;
                CameraEffectsInterpolator.Id = EditorGUILayout.TextField("Id", CameraEffectsInterpolator.Id);
                GUI.color = defaultColor;

                CameraEffectsInterpolator.Duration = EditorGUILayout.FloatField("Duration(s)",
                                                                                CameraEffectsInterpolator.Duration);

                CameraEffectsInterpolator.DefaultTimeScale = EditorGUILayout.FloatField("Time Scale",
                                                                                        CameraEffectsInterpolator.DefaultTimeScale);

                CameraEffectsInterpolator.DefaultPlayMode = (PlayMode)EditorGUILayout.EnumPopup("Play Mode",
                                                                                                CameraEffectsInterpolator.DefaultPlayMode);

                CameraEffectsInterpolator.DefaultLoops = EditorGUILayout.IntField("Loops",
                                                                                  CameraEffectsInterpolator.DefaultLoops);

                CameraEffectsInterpolator.UnscaledTime = EditorGUILayout.Toggle("Unscaled Time",
                                                                                CameraEffectsInterpolator.UnscaledTime);

                CameraEffectsInterpolator.ActivateComponentsOnStart = EditorGUILayout.Toggle("Activate Components On Start",
                                                                                             CameraEffectsInterpolator.ActivateComponentsOnStart);

                CameraEffectsInterpolator.DeactivateComponentsOnStop = EditorGUILayout.Toggle("Deactivate Components On Stop",
                                                                                              CameraEffectsInterpolator.DeactivateComponentsOnStop);
            }

            ////
            //    Effects
            ////
            var effectsToRemove = new List <PostprocessData>();

            foreach (var postprocessData in CameraEffectsInterpolator.Elements)
            {
                String effectName = "<None>";
                if (postprocessData.Postprocess != null)
                {
                    CustomMaterialOnScreen customMaterialOnScreen = null;
                    try
                    {
                        customMaterialOnScreen = postprocessData.Postprocess as CustomMaterialOnScreen;
                    }
                    catch (Exception) { }

                    if (customMaterialOnScreen != null)
                    {
                        effectName = customMaterialOnScreen.Name;
                    }
                    else
                    {
                        effectName = postprocessData.Postprocess.GetType().ToString();
                    }

                    effectName += " (" + postprocessData.Postprocess.name + ")";
                }

                Color defaultColor = GUI.color;
                // GUI.backgroundColor = Color.red;


                //generate posprocess color
                //Color currentColor = new Color(0,0,0);
                //currentColor.r = 1.0f / effectName.Length;
                //currentColor.g = 1/(effectName.Length % 3);
                //currentColor.b = 1/(effectName.Length % 3);


                if (postprocessData.Active)
                {
                    GUI.color = Color.yellow;
                }
                else
                {
                    GUI.color = Color.red;
                }

                postprocessData.showInInspector = EditorGUILayout.Foldout(postprocessData.showInInspector, effectName);
                GUI.color = defaultColor;

                if (postprocessData.showInInspector)
                {
                    ////
                    //    Component Header
                    ////
                    EditorGUILayout.BeginHorizontal();
                    postprocessData.Active      = EditorGUILayout.Toggle(postprocessData.Active);
                    postprocessData.Postprocess = (Component)EditorGUILayout.ObjectField(postprocessData.Postprocess, typeof(Component), true);

                    if (GUILayout.Button("Remove"))
                    {
                        effectsToRemove.Add(postprocessData);
                    }
                    EditorGUILayout.EndHorizontal();

                    EditorGUI.BeginDisabledGroup(!postprocessData.Active);

                    ////
                    //    List of available values
                    ////
                    EditorGUILayout.BeginHorizontal();
                    String[] availableValueNames = postprocessData.GetAvailableValueNames();
                    if (availableValueNames.Count() > 0)
                    {
                        bool addValue = GUILayout.Button("Animate Value:");

                        postprocessData.selectedValueIndex = EditorGUILayout.Popup(postprocessData.selectedValueIndex,
                                                                                   availableValueNames);

                        if (addValue)
                        {
                            postprocessData.AddInterpolatorFor(availableValueNames[postprocessData.selectedValueIndex]);
                            postprocessData.selectedValueIndex = 0;
                        }
                    }
                    EditorGUILayout.EndHorizontal();

                    ////
                    //    Single value view
                    ////
                    var valuesToRemove = new List <InterpolatorDataWrapper>();
                    foreach (var interpolatorDataWrapper in postprocessData.Values)
                    {
                        InterpolatorData interpolatorData = interpolatorDataWrapper.Get();
                        if (interpolatorData != null)
                        {
                            EditorGUILayout.Space();
                            EditorGUILayout.Space();

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField(interpolatorData.ValueName, EditorStyles.whiteLabel);
                            if (GUILayout.Button("Remove"))
                            {
                                valuesToRemove.Add(interpolatorDataWrapper);
                            }
                            EditorGUILayout.EndHorizontal();

                            interpolatorData.DrawInspector(CameraEffectsInterpolator.Duration);
                        }
                    }

                    foreach (var value in valuesToRemove)
                    {
                        postprocessData.Values.Remove(value);
                    }

                    EditorGUI.EndDisabledGroup();
                }

                EditorGUILayout.Space();
                EditorGUILayout.Space();
                EditorGUILayout.Space();
                EditorGUILayout.Space();
                EditorGUILayout.Space();
                EditorGUILayout.Space();
            }

            foreach (var postprocessData in effectsToRemove)
            {
                CameraEffectsInterpolator.Elements.Remove(postprocessData);
            }

            if (GUILayout.Button("Add Postprocess Component"))
            {
                CameraEffectsInterpolator.Elements.Add(new PostprocessData());
            }

            // Update
            CameraEffectsInterpolator.Setup();
            if (!Application.isPlaying)
            {
                CameraEffectsInterpolator.InterpolatorUpdate(deltaTime);
            }
            EditorUtility.SetDirty(target);

            EditorGUI.EndDisabledGroup();
            EditorGUI.EndDisabledGroup();
        }