Beispiel #1
0
    public static bool DoPatch(Transform xffect)
    {
        bool needToReimport = false;

        Object[] deps = EditorUtility.CollectDeepHierarchy(new Object[] { xffect.gameObject as Object });

        foreach (Object obj in deps)
        {
            if (obj == null || obj.GetType() != typeof(GameObject))
            {
                continue;
            }
            GameObject  go  = obj as GameObject;
            EffectLayer efl = go.GetComponent <EffectLayer>();
            if (efl != null)
            {
                DoPatch(efl);
                needToReimport = true;
            }

            XftEventComponent xevent = go.GetComponent <XftEventComponent>();
            if (xevent != null)
            {
                DoPatch(xevent);
                needToReimport = true;
            }
        }

        return(needToReimport);
    }
Beispiel #2
0
    protected void GlowConfig(XftEventComponent ctarget)
    {
        DisplayGlowConfig = EditorGUILayout.Foldout(DisplayGlowConfig, "Glow Configuration");

        //if (DisplayGlowConfig)
        {
            EditorGUILayout.BeginVertical();

            ctarget.GlowCompositeShader  = (Shader)EditorGUILayout.ObjectField("composite shader:", ctarget.GlowCompositeShader, typeof(Shader), true);
            ctarget.GlowDownSampleShader = (Shader)EditorGUILayout.ObjectField("down sample shader:", ctarget.GlowDownSampleShader, typeof(Shader), true);
            ctarget.GlowBlurShader       = (Shader)EditorGUILayout.ObjectField("blur shader:", ctarget.GlowBlurShader, typeof(Shader), true);

            ctarget.GlowIntensity      = EditorGUILayout.Slider("glow intensity:", ctarget.GlowIntensity, 0f, 10f);
            ctarget.GlowBlurIterations = EditorGUILayout.IntSlider("blur iterations:", ctarget.GlowBlurIterations, 0, 30);
            ctarget.GlowBlurSpread     = EditorGUILayout.Slider("blur spread:", ctarget.GlowBlurSpread, 0.5f, 1f);

            EditorGUILayout.Space();
            ctarget.GlowColorGradualType = (COLOR_GRADUAL_TYPE)EditorGUILayout.EnumPopup("gradual type:", ctarget.GlowColorGradualType);
            if (ctarget.GlowColorGradualType == COLOR_GRADUAL_TYPE.CURVE)
            {
                ctarget.ColorCurve = EditorGUILayout.CurveField("color curve:", ctarget.ColorCurve,
                                                                Color.green, new Rect(0f, 0f, 99f, 1f));
            }
            else
            {
                ctarget.GlowColorGradualTime = EditorGUILayout.FloatField("color gradual time:", ctarget.GlowColorGradualTime);
            }
            ctarget.GlowColorStart = EditorGUILayout.ColorField("glow color start:", ctarget.GlowColorStart);
            ctarget.GlowColorEnd   = EditorGUILayout.ColorField("glow color end:", ctarget.GlowColorEnd);



            EditorGUILayout.EndVertical();
        }
    }
Beispiel #3
0
    protected void LightConfig(XftEventComponent ctarget)
    {
        DisplayLightConfig = EditorGUILayout.Foldout(DisplayLightConfig, "Light Configuration");
        //if (DisplayLightConfig)
        {
            EditorGUILayout.BeginVertical();

            ctarget.LightComp = (Light)EditorGUILayout.ObjectField("light obj:", ctarget.LightComp, typeof(Light), true);

            ctarget.LightIntensityType = (MAGTYPE)EditorGUILayout.EnumPopup("intensity type:", ctarget.LightIntensityType);
            if (ctarget.LightIntensityType == MAGTYPE.Curve)
            {
                ctarget.LightIntensityCurve = EditorGUILayout.CurveField("intensity curve:", ctarget.LightIntensityCurve);
            }
            else
            {
                ctarget.LightIntensity = EditorGUILayout.FloatField("intensity:", ctarget.LightIntensity);
            }
            EditorGUILayout.Space();

            ctarget.LightRangeType = (MAGTYPE)EditorGUILayout.EnumPopup("range type:", ctarget.LightRangeType);
            if (ctarget.LightRangeType == MAGTYPE.Curve)
            {
                ctarget.LightRangeCurve = EditorGUILayout.CurveField("range curve:", ctarget.LightRangeCurve);
            }
            else
            {
                ctarget.LightRange = EditorGUILayout.FloatField("range:", ctarget.LightRange);
            }
            EditorGUILayout.EndVertical();
        }
    }
Beispiel #4
0
    public void Init(XftEventComponent client)
    {
        m_client = client;

        ReplacementShader = client.GlowPerObjReplacementShader;
        blendShader       = client.GlowPerObjBlendShader;

        if (m_blendMaterial == null)
        {
            m_blendMaterial           = new Material(blendShader);
            m_blendMaterial.hideFlags = HideFlags.HideAndDontSave;
        }

        if (m_DownsampleMaterial == null)
        {
            downsampleShader               = client.GlowDownSampleShader;
            m_DownsampleMaterial           = new Material(downsampleShader);
            m_DownsampleMaterial.hideFlags = HideFlags.HideAndDontSave;
        }

        if (m_CompositeMaterial == null)
        {
            compositeShader               = client.GlowCompositeShader;
            m_CompositeMaterial           = new Material(compositeShader);
            m_CompositeMaterial.hideFlags = HideFlags.HideAndDontSave;
        }

        if (m_BlurMaterial == null)
        {
            blurShader               = client.GlowBlurShader;
            m_BlurMaterial           = new Material(blurShader);
            m_BlurMaterial.hideFlags = HideFlags.HideAndDontSave;
        }
        SetClientParam();
    }
Beispiel #5
0
    protected void RadialBlurConfig(XftEventComponent ctarget)
    {
        DisplayRadialBlurConfig = EditorGUILayout.Foldout(DisplayRadialBlurConfig, "RadialBlur Configuration");

        //if (DisplayRadialBlurConfig)
        {
            EditorGUILayout.BeginVertical();

            EditorGUILayout.LabelField("[note:if you want to use radial blur in mobile,");
            EditorGUILayout.LabelField("use 'Camera Radial Blur Mask' instead.]");

            ctarget.RadialBlurShader = (Shader)EditorGUILayout.ObjectField("radial blur shader:", ctarget.RadialBlurShader, typeof(Shader), true);

            ctarget.RBStrengthType = (MAGTYPE)EditorGUILayout.EnumPopup("sample strength type:", ctarget.RBStrengthType);

            if (ctarget.RBStrengthType == MAGTYPE.Fixed)
            {
                ctarget.RBSampleStrength = EditorGUILayout.Slider("sample strength:", ctarget.RBSampleStrength, 0f, 1f);
            }
            else
            {
                ctarget.RBSampleStrengthCurve = EditorGUILayout.CurveField("strength curve:", ctarget.RBSampleStrengthCurve,
                                                                           Color.green, new Rect(0f, 0f, 99f, 1f));
            }
            EditorGUILayout.EndVertical();
        }
    }
Beispiel #6
0
    public override void OnInspectorGUI()
    {
        XftEventComponent ctarget = (XftEventComponent)target;

        EditorGUILayout.BeginVertical();

        ctarget.EventType = (XftEventType)EditorGUILayout.EnumPopup("event type:", ctarget.EventType);

        ctarget.StartTime = EditorGUILayout.FloatField("start time:", ctarget.StartTime);
        ctarget.EndTime   = EditorGUILayout.FloatField("end time:", ctarget.EndTime);

        switch (ctarget.EventType)
        {
        case XftEventType.CameraShake:
            CameraShakeConfig(ctarget);
            break;

        case XftEventType.Sound:
            SoundConfig(ctarget);
            break;

        case XftEventType.Light:
            LightConfig(ctarget);
            break;

        case XftEventType.CameraRadialBlur:
            RadialBlurConfig(ctarget);
            break;

        case XftEventType.CameraRadialBlurMask:
            RadialBlurTexAddConfig(ctarget);
            break;

        case XftEventType.CameraGlow:
            GlowConfig(ctarget);
            break;

        case XftEventType.CameraColorInverse:
            ColorInverseConfig(ctarget);
            break;

        case XftEventType.TimeScale:
            TimeScaleEventConfig(ctarget);
            break;

        default:
            break;
        }

        EditorGUILayout.EndVertical();

        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
Beispiel #7
0
    public void Update()
    {
        CurTime = Time.realtimeSinceStartup;
#if UNITY_EDITOR
        if (!EditorApplication.isPlaying)
        {
            if (!EditView)
            {
                return;
            }
            CurTime = EditorApplication.timeSinceStartup;
            if (!CheckEditModeInited())
            {
                ResetEditScene();
            }
        }
#endif
        float deltaTime = (float)(CurTime - LastTime);

        if (!IgnoreTimeScale)
        {
            deltaTime *= Time.timeScale;
        }

        ElapsedTime += deltaTime;
        foreach (EffectLayer el in EflList)
        {
            if (el == null)
            {
                continue;
            }
            if (ElapsedTime > el.StartTime && IsActive(el.gameObject))
            {
                el.FixedUpdateCustom(deltaTime);
            }
        }

        for (int i = 0; i < EventList.Count; i++)
        {
            XftEventComponent e = EventList[i];
            if (IsActive(e.gameObject))
            {
                e.UpdateCustom(deltaTime);
            }
        }

        LastTime = CurTime;

#if UNITY_EDITOR
        if (!EditorApplication.isPlaying)
        {
            LateUpdate();
        }
#endif
    }
Beispiel #8
0
 protected void TimeScaleEventConfig(XftEventComponent ctarget)
 {
     DisplayTimeScaleConfig = EditorGUILayout.Foldout(DisplayTimeScaleConfig, "Time Scale Configuration");
     //if (DisplayTimeScaleConfig)
     {
         EditorGUILayout.BeginVertical();
         ctarget.TimeScale         = EditorGUILayout.FloatField("time scale:", ctarget.TimeScale);
         ctarget.TimeScaleDuration = EditorGUILayout.FloatField("duration:", ctarget.TimeScaleDuration);
         EditorGUILayout.EndVertical();
     }
 }
Beispiel #9
0
 protected void SoundConfig(XftEventComponent ctarget)
 {
     DisplaySoundConfig = EditorGUILayout.Foldout(DisplaySoundConfig, "Sound Configuration");
     //if (DisplaySoundConfig)
     {
         EditorGUILayout.BeginVertical();
         ctarget.Clip   = (AudioClip)EditorGUILayout.ObjectField("audio clip:", ctarget.Clip, typeof(AudioClip), true);
         ctarget.Volume = EditorGUILayout.FloatField("volume:", ctarget.Volume);
         ctarget.Pitch  = EditorGUILayout.FloatField("pitch:", ctarget.Pitch);
         EditorGUILayout.EndVertical();
     }
 }
Beispiel #10
0
    protected void ColorInverseConfig(XftEventComponent ctarget)
    {
        DisplayColorInverseConfig = EditorGUILayout.Foldout(DisplayColorInverseConfig, "Color Inverse Configuration");

        //if (DisplayColorInverseConfig)
        {
            EditorGUILayout.BeginVertical();

            ctarget.ColorInverseShader = (Shader)EditorGUILayout.ObjectField("color inverse shader:", ctarget.ColorInverseShader, typeof(Shader), true);

            ctarget.CIStrengthCurve = EditorGUILayout.CurveField("strength curve:", ctarget.CIStrengthCurve,
                                                                 Color.green, new Rect(0f, 0f, 99f, 1f));
            EditorGUILayout.EndVertical();
        }
    }
Beispiel #11
0
    protected void RadialBlurTexAddConfig(XftEventComponent ctarget)
    {
        DisplayRadialBlurTexAddConfig = EditorGUILayout.Foldout(DisplayRadialBlurTexAddConfig, "RadialBlur Mask Configuration");

        //if (DisplayRadialBlurTexAddConfig)
        {
            EditorGUILayout.BeginVertical();

            if (ctarget.RadialBlurTexAddShader == null)
            {
                ctarget.RadialBlurTexAddShader = Shader.Find("Xffect/PP/radial_blur_mask");
            }

            ctarget.RadialBlurTexAddShader = (Shader)EditorGUILayout.ObjectField("radial blur mask shader:", ctarget.RadialBlurTexAddShader, typeof(Shader), true);
            string assetPath = AssetDatabase.GetAssetPath(ctarget.RadialBlurTexAddShader);
            int    index     = assetPath.LastIndexOf("Xffect");
            string basePath  = assetPath.Substring(0, index + 7);
            string texPath   = basePath + "Resources/PostProcess/Textures/radial_mask1.psd";


            if (ctarget.RadialBlurMask == null)
            {
                ctarget.RadialBlurMask = (Texture2D)AssetDatabase.LoadAssetAtPath(texPath, typeof(Texture2D));
            }

            ctarget.RadialBlurMask = (Texture2D)EditorGUILayout.ObjectField("radial blur mask:", ctarget.RadialBlurMask, typeof(Texture2D), false);

            ctarget.RBMaskSampleDist = EditorGUILayout.FloatField("sample dist:", ctarget.RBMaskSampleDist);


            ctarget.RBMaskStrengthType = (MAGTYPE)EditorGUILayout.EnumPopup("sample strength type:", ctarget.RBMaskStrengthType);

            if (ctarget.RBMaskStrengthType == MAGTYPE.Fixed)
            {
                ctarget.RBMaskSampleStrength = EditorGUILayout.Slider("sample strength:", ctarget.RBMaskSampleStrength, 0f, 1f);
            }
            else
            {
                ctarget.RBMaskSampleStrengthCurve = EditorGUILayout.CurveField("strength curve:", ctarget.RBMaskSampleStrengthCurve);
            }

            EditorGUILayout.EndVertical();
        }
    }
    public static bool DoPatch(Transform xffect)
    {
        XffectComponent xft = xffect.GetComponent <XffectComponent>();

        System.Version myVer = new System.Version(xft.MyVersion);

        if (xft != null && myVer >= new System.Version("4.4.0"))
        {
            return(false);
        }

        bool needToReimport = false;

        Object[] deps = EditorUtility.CollectDeepHierarchy(new Object[] { xffect.gameObject as Object });

        foreach (Object obj in deps)
        {
            if (obj == null || obj.GetType() != typeof(GameObject))
            {
                continue;
            }
            GameObject  go  = obj as GameObject;
            EffectLayer efl = go.GetComponent <EffectLayer>();
            if (efl != null)
            {
                DoPatch(efl);
                needToReimport = true;
            }

            XftEventComponent xevent = go.GetComponent <XftEventComponent>();
            if (xevent != null)
            {
                DoPatch(xevent);
                needToReimport = true;
            }
        }

        if (xft != null)
        {
            xft.MyVersion = XffectComponent.CurVersion;
        }

        return(needToReimport);
    }
Beispiel #13
0
    public static void DoPatch(XftEventComponent xevent)
    {
        if (xevent.EventType == XftEventType.CameraGlow && xevent.GlowColorGradualType != COLOR_GRADUAL_TYPE.CURVE)
        {
            Debug.LogWarning("[upgrade note]color gradual type is deprecated in glow event, please re-fill the gradual curve:" + GetPath(xevent.transform));
        }

        if (xevent.EventType == XftEventType.CameraColorInverse)
        {
            xevent.Type = XEventType.CameraEffect;
            xevent.CameraEffectType = CameraEffectEvent.EType.ColorInverse;
        }
        else if (xevent.EventType == XftEventType.CameraGlow)
        {
            xevent.Type = XEventType.CameraEffect;
            xevent.CameraEffectType = CameraEffectEvent.EType.Glow;
        }
        else if (xevent.EventType == XftEventType.CameraRadialBlur)
        {
            xevent.Type = XEventType.CameraEffect;
            xevent.CameraEffectType = CameraEffectEvent.EType.RadialBlur;
        }
        else if (xevent.EventType == XftEventType.CameraRadialBlurMask)
        {
            xevent.Type = XEventType.CameraEffect;
            xevent.CameraEffectType = CameraEffectEvent.EType.RadialBlurMask;
        }
        else if (xevent.EventType == XftEventType.CameraShake && xevent.Type == XEventType.CameraShake)
        {
            xevent.Type = XEventType.CameraShake;
        }
        else if (xevent.EventType == XftEventType.Light)
        {
            xevent.Type = XEventType.Light;
        }
        else if (xevent.EventType == XftEventType.Sound)
        {
            xevent.Type = XEventType.Sound;
        }
        else if (xevent.EventType == XftEventType.TimeScale)
        {
            xevent.Type = XEventType.TimeScale;
        }
    }
Beispiel #14
0
    public static void DoPatch(XftEventComponent xevent)
    {
        if (xevent.EventType == XftEventType.CameraGlow && xevent.GlowColorGradualType != COLOR_GRADUAL_TYPE.CURVE)
        {
            Debug.LogWarning("[upgrade note]color gradual type is deprecated in glow event, please re-fill the gradual curve:" + GetPath(xevent.transform));
        }

        if (xevent.EventType == XftEventType.CameraColorInverse)
        {
            xevent.Type             = XEventType.CameraEffect;
            xevent.CameraEffectType = CameraEffectEvent.EType.ColorInverse;
        }
        else if (xevent.EventType == XftEventType.CameraGlow)
        {
            xevent.Type             = XEventType.CameraEffect;
            xevent.CameraEffectType = CameraEffectEvent.EType.Glow;
        }
        else if (xevent.EventType == XftEventType.CameraRadialBlur)
        {
            xevent.Type             = XEventType.CameraEffect;
            xevent.CameraEffectType = CameraEffectEvent.EType.RadialBlur;
        }
        else if (xevent.EventType == XftEventType.CameraRadialBlurMask)
        {
            xevent.Type             = XEventType.CameraEffect;
            xevent.CameraEffectType = CameraEffectEvent.EType.RadialBlurMask;
        }
        else if (xevent.EventType == XftEventType.CameraShake && xevent.Type == XEventType.CameraShake)
        {
            xevent.Type = XEventType.CameraShake;
        }
        else if (xevent.EventType == XftEventType.Light)
        {
            xevent.Type = XEventType.Light;
        }
        else if (xevent.EventType == XftEventType.Sound)
        {
            xevent.Type = XEventType.Sound;
        }
        else if (xevent.EventType == XftEventType.TimeScale)
        {
            xevent.Type = XEventType.TimeScale;
        }
    }
Beispiel #15
0
    public void Reset(XftEventComponent client)
    {
        if (m_client != null && !CheckDone())
        {
            //Debug.LogWarning("can't reset CameraShake Component, may be the last shake is not finished?");
            //return;
        }

        m_client = client;
        PositionSpring.Stiffness = new Vector3(m_client.PositionStifness, m_client.PositionStifness, m_client.PositionStifness);
        PositionSpring.Damping   = Vector3.one - new Vector3(m_client.PositionDamping, m_client.PositionDamping, m_client.PositionDamping);

        RotationSpring.Stiffness = new Vector3(m_client.RotationStiffness, m_client.RotationStiffness, m_client.RotationStiffness);
        RotationSpring.Damping   = Vector3.one - new Vector3(m_client.RotationDamping, m_client.RotationDamping, m_client.RotationDamping);
        m_elapsedTime            = 0f;

        PositionSpring.RefreshTransformType();
        RotationSpring.RefreshTransformType();

        m_earthQuakeTimeTemp = m_client.EarthQuakeTime;
    }
Beispiel #16
0
    public void Reset(XftEventComponent client)
    {
        if (m_client != null && !CheckDone())
        {
            //Debug.LogWarning("can't reset CameraShake Component, may be the last shake is not finished?");
            //return;
        }

        m_client = client;
        PositionSpring.Stiffness = new Vector3(m_client.PositionStifness,m_client.PositionStifness,m_client.PositionStifness);
        PositionSpring.Damping = Vector3.one - new Vector3(m_client.PositionDamping,m_client.PositionDamping,m_client.PositionDamping);

        RotationSpring.Stiffness = new Vector3(m_client.RotationStiffness,m_client.RotationStiffness,m_client.RotationStiffness);
        RotationSpring.Damping = Vector3.one - new Vector3(m_client.RotationDamping,m_client.RotationDamping,m_client.RotationDamping);
        m_elapsedTime = 0f;

        PositionSpring.RefreshTransformType();
        RotationSpring.RefreshTransformType();

        m_earthQuakeTimeTemp = m_client.EarthQuakeTime;
    }
Beispiel #17
0
    protected void CameraShakeConfig(XftEventComponent ctarget)
    {
        DisplayCameraShakeConfig = EditorGUILayout.Foldout(DisplayCameraShakeConfig, "CameraShake Configuration");
        //if (DisplayCameraShakeConfig)
        {
            EditorGUILayout.BeginVertical();
            EditorGUILayout.LabelField("[note camera shake will change");
            EditorGUILayout.LabelField("the camera's local position directly.]");
            ctarget.PositionStifness = EditorGUILayout.FloatField("position stiffness", ctarget.PositionStifness);
            ctarget.PositionDamping  = EditorGUILayout.FloatField("position damping:", ctarget.PositionDamping);
            EditorGUILayout.Space();
            ctarget.RotationStiffness = EditorGUILayout.FloatField("rotation stiffness:", ctarget.RotationStiffness);
            ctarget.RotationDamping   = EditorGUILayout.FloatField("rotation damping:", ctarget.RotationDamping);
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("spring force:");
            ctarget.PositionForce = EditorGUILayout.Vector3Field("position force:", ctarget.PositionForce);
            ctarget.RotationForce = EditorGUILayout.Vector3Field("rotation force:", ctarget.RotationForce);
            EditorGUILayout.Space();
            ctarget.UseEarthQuake = EditorGUILayout.Toggle("use earthquake?", ctarget.UseEarthQuake);
            if (ctarget.UseEarthQuake)
            {
                ctarget.EarthQuakeTime             = EditorGUILayout.FloatField("earthquake time:", ctarget.EarthQuakeTime);
                ctarget.EarthQuakeCameraRollFactor = EditorGUILayout.FloatField("roll factor:", ctarget.EarthQuakeCameraRollFactor);
                ctarget.EarthQuakeMagTye           = (MAGTYPE)EditorGUILayout.EnumPopup("magnitude type:", ctarget.EarthQuakeMagTye);
                if (ctarget.EarthQuakeMagTye == MAGTYPE.Curve)
                {
                    ctarget.EarthQuakeMagCurve = EditorGUILayout.CurveField("magnitude curve:", ctarget.EarthQuakeMagCurve);
                }
                else
                {
                    ctarget.EarthQuakeMagnitude = EditorGUILayout.FloatField("earthquake magnitude:", ctarget.EarthQuakeMagnitude);
                }
            }

            EditorGUILayout.EndVertical();
        }
    }
	void OnEnable()
	{
		Script = target as XftEventComponent;
		InitSerializedProperty();
		LoadStyle();
	}
Beispiel #19
0
    public void Init(XftEventComponent client)
    {
        m_client = client;

        ReplacementShader = client.GlowPerObjReplacementShader;
        blendShader = client.GlowPerObjBlendShader;

        if (m_blendMaterial == null)
        {
            m_blendMaterial = new Material( blendShader );
            m_blendMaterial.hideFlags = HideFlags.HideAndDontSave;
        }

        if (m_DownsampleMaterial == null)
        {
            downsampleShader = client.GlowDownSampleShader;
            m_DownsampleMaterial = new Material( downsampleShader );
            m_DownsampleMaterial.hideFlags = HideFlags.HideAndDontSave;
        }

        if (m_CompositeMaterial == null)
        {
            compositeShader = client.GlowCompositeShader;
            m_CompositeMaterial = new Material(compositeShader);
            m_CompositeMaterial.hideFlags = HideFlags.HideAndDontSave;
        }

        if (m_BlurMaterial == null)
        {
            blurShader = client.GlowBlurShader;
            m_BlurMaterial = new Material(blurShader);
            m_BlurMaterial.hideFlags = HideFlags.HideAndDontSave;
        }
        SetClientParam();
    }
 void OnEnable()
 {
     Script = target as XftEventComponent;
     InitSerializedProperty();
     LoadStyle();
 }
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        XEditor.BeginCommonArea("xffect main config", Script.gameObject.name, this, true);

        EditorGUILayout.Space();

        XEditor.DrawToggle("update in editor?", "", EditView);

        //EditView.boolValue = EditorGUILayout.Toggle("update in editor:", EditView.boolValue,GUILayout.Height(40f));


        if (EditView.boolValue == true)
        {
            if (!XffectComponent.IsActive(Script.gameObject))
            {
                EditView.boolValue = false;
                Debug.Log("you need to activate the xffect object: " + Script.gameObject.name + " before updating it in editor.");
            }
        }

        if (EditView.boolValue)
        {
            Script.EnableEditView();
        }
        else
        {
            Script.DisableEditView();
        }

        if (EditView.boolValue)
        {
            if (GUILayout.Button("Reset"))
            {
                Script.ResetEditScene();
            }
        }

        XEditor.DrawSeparator();

        XEditor.DrawFloat("life(-1 means infinite):", "", LifeTime);
        XEditor.DrawToggle("ignore time scale?", "", IgnoreTimeScale);


        EditorGUILayout.Space();

        XEditor.DrawFloat("scale:", "change this Xffect's scale", Scale);


        if (GUILayout.Button("Add Layer"))
        {
            GameObject  layer = new GameObject(LayerName);
            EffectLayer efl   = (EffectLayer)layer.AddComponent("EffectLayer");
            layer.transform.parent      = Selection.activeTransform;
            efl.transform.localPosition = Vector3.zero;
            //default to effect layer object.
            efl.ClientTransform  = efl.transform;
            efl.GravityObject    = efl.transform;
            efl.BombObject       = efl.transform;
            efl.TurbulenceObject = efl.transform;
            efl.AirObject        = efl.transform;
            efl.VortexObj        = efl.transform;
            efl.DirCenter        = efl.transform;
            efl.Material         = AssetDatabase.LoadAssetAtPath(XEditorTool.GetXffectPath() + DefaultMatPath, typeof(Material)) as Material;

            efl.gameObject.layer = Script.gameObject.layer;

            Selection.activeGameObject = layer;
        }


        if (GUILayout.Button("Add Event"))
        {
            GameObject        obj    = new GameObject("_Event");
            XftEventComponent xevent = (XftEventComponent)obj.AddComponent("XftEventComponent");
            xevent.transform.parent        = Selection.activeTransform;
            xevent.transform.localPosition = Vector3.zero;
            xevent.RadialBlurShader        = Shader.Find("Xffect/PP/radial_blur_new");
            xevent.GlowCompositeShader     = Shader.Find("Xffect/PP/glow_compose");
            xevent.GlowDownSampleShader    = Shader.Find("Xffect/PP/glow_downsample");
            xevent.GlowBlurShader          = Shader.Find("Xffect/PP/glow_conetap");
            xevent.RadialBlurObj           = xevent.transform;
            xevent.ColorInverseShader      = Shader.Find("Xffect/PP/color_inverse");

            xevent.GlowPerObjBlendShader       = Shader.Find("Xffect/glow_per_obj/blend");
            xevent.GlowPerObjReplacementShader = Shader.Find("Xffect/glow_per_obj/replacement");

            xevent.gameObject.layer = Script.gameObject.layer;

            Selection.activeGameObject = obj;
        }


        EditorGUILayout.Space();

        XEditor.EndXArea();

        DrawInfos();

        serializedObject.ApplyModifiedProperties();
    }
Beispiel #22
0
 public static void DoPatch(XftEventComponent xevent)
 {
 }
Beispiel #23
0
    public override void OnInspectorGUI()
    {
        XffectComponent ctarget = (XffectComponent)target;

        if (Application.isEditor && !EditorApplication.isPlaying)
        {
            EditorApplication.update = ctarget.Update;
        }

        EditorGUILayout.BeginVertical();
        EditorGUILayout.Space();
        EditorGUILayout.Separator();
        ctarget.LifeTime = EditorGUILayout.FloatField("life:", ctarget.LifeTime);
        EditorGUILayout.LabelField("[life -1 means infinite.]");

        ctarget.IgnoreTimeScale = EditorGUILayout.Toggle("ignore time scale?", ctarget.IgnoreTimeScale);

        EditorGUILayout.Separator();

        ctarget.Scale = EditorGUILayout.FloatField("scale:", ctarget.Scale);
        EditorGUILayout.Separator();

        if (GUILayout.Button("Add Layer"))
        {
            GameObject  layer = new GameObject(LayerName);
            EffectLayer efl   = (EffectLayer)layer.AddComponent("EffectLayer");
            layer.transform.parent = Selection.activeTransform;

            efl.transform.localPosition = Vector3.zero;
            //fixed 2012.6.25. default to effect layer object.
            efl.ClientTransform  = efl.transform;
            efl.GravityObject    = efl.transform;
            efl.BombObject       = efl.transform;
            efl.TurbulenceObject = efl.transform;
            efl.AirObject        = efl.transform;
            efl.VortexObj        = efl.transform;
            efl.DirCenter        = efl.transform;
        }


        if (GUILayout.Button("Add Event"))
        {
            GameObject        layer  = new GameObject("_Event");
            XftEventComponent xevent = (XftEventComponent)layer.AddComponent("XftEventComponent");
            xevent.transform.parent        = Selection.activeTransform;
            xevent.transform.localPosition = Vector3.zero;
            xevent.RadialBlurShader        = Shader.Find("Xffect/PP/radial_blur_new");
            xevent.GlowCompositeShader     = Shader.Find("Xffect/PP/glow_compose");
            xevent.GlowDownSampleShader    = Shader.Find("Xffect/PP/glow_downsample");
            xevent.GlowBlurShader          = Shader.Find("Xffect/PP/glow_conetap");
            xevent.RadialBlurObj           = xevent.transform;
            xevent.ColorInverseShader      = Shader.Find("Xffect/PP/color_inverse");
        }

        EditorGUILayout.Separator();
        ctarget.EditView = EditorGUILayout.Toggle("update in editor?", ctarget.EditView);

        //prevent asset inspector to update.
        if (ctarget.EditView == true)
        {
            if (!XffectComponent.IsActive(ctarget.gameObject))
            {
                ctarget.EditView = false;
                Debug.Log("you should activate the xffect object: " + ctarget.gameObject.name + " before updating it in editor.");
            }
        }

        if (ctarget.EditView)
        {
            ctarget.EnableEditView();
        }
        else
        {
            ctarget.DisableEditView();
        }

        if (ctarget.EditView)
        {
            if (GUILayout.Button("Reset Editor Xffect"))
            {
                ctarget.ResetEditScene();
            }
        }
        EditorGUILayout.EndVertical();

        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
Beispiel #24
0
 public static void DoPatch(XftEventComponent xevent)
 {
 }
Beispiel #25
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();


        //check if need to upgrade.
        System.Version myVer = new System.Version(Script.MyVersion);
        if (myVer <= new System.Version("4.4.0"))
        {
            DoPatch440(Script);
            EditorUtility.SetDirty(target);
        }

        XEditor.BeginCommonArea("xffect main config", Script.gameObject.name, this, true);

        EditorGUILayout.Space();


        if (EditorUtility.IsPersistent(target))
        {
            if (GUILayout.Button("Put To Scene"))
            {
                GameObject obj = PrefabUtility.InstantiatePrefab(Selection.activeObject as GameObject) as GameObject;
                Selection.activeGameObject = obj;
                if (obj != null)
                {
                    XffectComponent xobj = obj.GetComponent <XffectComponent>();
                    if (xobj != null)
                    {
                        xobj.EditView = true;
                        xobj.EnableEditView();
                    }
                }
            }
        }


        XEditor.DrawToggle("update in editor?", "", EditView);

        //EditView.boolValue = EditorGUILayout.Toggle("update in editor:", EditView.boolValue,GUILayout.Height(40f));


        //if (EditView.boolValue == true) {
        //if (!XffectComponent.IsActive(Script.gameObject)) {
        //EditView.boolValue = false;
        //Debug.Log ("you need to activate the xffect object: " + Script.gameObject.name + " before updating it in editor.");
        //}
        //}

        if (EditView.boolValue)
        {
            Script.EnableEditView();
        }
        else
        {
            Paused.boolValue = false;
            Script.DisableEditView();
        }

        if (EditView.boolValue)
        {
            PlaybackTime.floatValue = EditorGUILayout.FloatField("Playback time: ", PlaybackTime.floatValue);

            if (PlaybackTime.floatValue < 0f)
            {
                PlaybackTime.floatValue = 0f;
            }

            string disp = "Pause";
            if (Paused.boolValue)
            {
                disp = "Play";
            }
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button(disp))
            {
                Paused.boolValue = !Paused.boolValue;
            }

            if (GUILayout.Button("Reset"))
            {
                Paused.boolValue = false;
                Script.ResetEditScene();
            }
            EditorGUILayout.EndHorizontal();
        }

        XEditor.DrawSeparator();

        XEditor.DrawFloat("life(-1 means infinite):", "", LifeTime);
        XEditor.DrawToggle("ignore time scale?", "", IgnoreTimeScale);

        XEditor.DrawToggle("auto destroy?", "check on this option if you want this obj to be destroyed when finished, note this option only works in play mode.", AutoDestroy);

        XEditor.DrawToggle("merge same mesh?", "check on this option to merge the meshes with same material, can reduce drawcalls.", MergeSameMaterialMesh);

        XEditor.DrawToggle("update when offscreen?", "", UpdateWhenOffScreen);

        if (XEditor.DrawToggle("use with 2d sprite?", "", UseWith2DSprite))
        {
            XEditor.DrawText("sorting layer name:", "", SortingLayerName);
            XEditor.DrawInt("sorting order:", "", SortingOrder);
        }

        EditorGUILayout.Space();



        XEditor.DrawInt("Max Fps:", "", MaxFps);

        XEditor.DrawFloat("scale:", "change this Xffect's scale", Scale);



        if (!Mathf.Approximately(1f, Scale.floatValue))
        {
            XEditor.DrawInfo("note it's not recommended to use this function to change xffect's scale. if you encounter strange behavious, please change it back to 1.");
        }

        if (GUILayout.Button("Add Layer"))
        {
            GameObject  layer = new GameObject(LayerName);
            EffectLayer efl   = (EffectLayer)layer.AddComponent <EffectLayer>();
            layer.transform.parent      = Selection.activeTransform;
            efl.transform.localPosition = Vector3.zero;
            //default to effect layer object.
            efl.ClientTransform  = efl.transform;
            efl.GravityObject    = efl.transform;
            efl.BombObject       = efl.transform;
            efl.TurbulenceObject = efl.transform;
            efl.AirObject        = efl.transform;
            efl.VortexObj        = efl.transform;
            //efl.DirCenter = efl.transform;
            efl.Material = AssetDatabase.LoadAssetAtPath(XEditorTool.GetXffectPath() + DefaultMatPath, typeof(Material)) as Material;

            efl.gameObject.layer = Script.gameObject.layer;

            efl.LineStartObj = efl.transform;

            Selection.activeGameObject = layer;
        }


        if (GUILayout.Button("Add Event"))
        {
            GameObject        obj    = new GameObject("_Event");
            XftEventComponent xevent = (XftEventComponent)obj.AddComponent <XftEventComponent>();
            xevent.transform.parent        = Selection.activeTransform;
            xevent.transform.localPosition = Vector3.zero;
            xevent.RadialBlurShader        = Shader.Find("Xffect/PP/radial_blur");
            xevent.GlowCompositeShader     = Shader.Find("Xffect/PP/glow_compose");
            xevent.GlowDownSampleShader    = Shader.Find("Xffect/PP/glow_downsample");
            xevent.GlowBlurShader          = Shader.Find("Xffect/PP/glow_conetap");
            xevent.RadialBlurObj           = xevent.transform;
            xevent.ColorInverseShader      = Shader.Find("Xffect/PP/color_inverse");

            xevent.GlowPerObjBlendShader       = Shader.Find("Hidden/PP/Xffect/glow_per_obj/blend");
            xevent.GlowPerObjReplacementShader = Shader.Find("Hidden/PP/Xffect/glow_per_obj/replacement");
            xevent.gameObject.layer            = Script.gameObject.layer;

            Selection.activeGameObject = obj;
        }
        XEditor.EndXArea();

        DrawInfos();
        serializedObject.ApplyModifiedProperties();
    }
Beispiel #26
0
    //in editor mode, Awake() method called twice, why?.
    public void Initialize()
    {
        if (EflList.Count > 0)
        {//already inited.
            return;
        }
        //fixed : 2012.5.25. can't add child game object during foreach..
        //ArrayList tobeAdded = new ArrayList();

        foreach (Transform child in transform)
        {
            EffectLayer el = (EffectLayer)child.GetComponent(typeof(EffectLayer));
            if (el == null)
            {
                continue;
            }

            if (el.Material == null)
            {
                Debug.LogWarning("effect layer: " + el.gameObject.name + " has no material, please assign a material first!");
                continue;
            }

            SetActive(el.gameObject, true);

            Material mat = el.Material;
            //ver 1.2.1
            mat.renderQueue  = mat.shader.renderQueue;
            mat.renderQueue += el.Depth;
            EflList.Add(el);
            MeshFilter   Meshfilter;
            MeshRenderer Meshrenderer;

            Transform oldMesh = transform.Find("xftmesh " + mat.name);
            if (oldMesh != null)
            {//already instaniate by object cache.just recreate vertex pool.\
                Meshfilter            = (MeshFilter)oldMesh.GetComponent(typeof(MeshFilter));
                Meshrenderer          = (MeshRenderer)oldMesh.GetComponent(typeof(MeshRenderer));
                Meshfilter.sharedMesh = new Mesh();
                Meshfilter.sharedMesh.Clear();
                MatDic[mat.name] = new VertexPool(Meshfilter.sharedMesh, mat);
                //fixed 2012.7.20 if already exist, Add to MeshList too.
                if (!MeshList.Contains(oldMesh.gameObject))
                {
                    MeshList.Add(oldMesh.gameObject);
                }
            }
            if (!MatDic.ContainsKey(mat.name))
            {
                GameObject obj = new GameObject("xftmesh " + mat.name);
                obj.layer = gameObject.layer;
                //obj.transform.parent = this.transform;
                //tobeAdded.Add(obj);
                MeshList.Add(obj);
                obj.AddComponent <MeshFilter>();
                obj.AddComponent <MeshRenderer>();
                SetActive(obj, IsActive(gameObject));

#if UNITY_EDITOR
                if (!EditorApplication.isPlaying)
                {
                    XffectComponent.SetActive(obj, true);
                }
#endif


                Meshfilter                  = (MeshFilter)obj.GetComponent(typeof(MeshFilter));
                Meshrenderer                = (MeshRenderer)obj.GetComponent(typeof(MeshRenderer));
                Meshrenderer.castShadows    = false;
                Meshrenderer.receiveShadows = false;
                Meshrenderer.GetComponent <Renderer>().sharedMaterial = mat;
                Meshfilter.sharedMesh = new Mesh();
                MatDic[mat.name]      = new VertexPool(Meshfilter.sharedMesh, mat);
            }
        }

        //now set each gameobject's parent.
        foreach (GameObject obj in MeshList)
        {
            obj.transform.parent = this.transform;

            //fixed 2012.6.25,
            obj.transform.position = Vector3.zero;
            obj.transform.rotation = Quaternion.identity;

            //fixed 2012.7.11, avoid the lossy scale influence the mesh object.
            Vector3 realLocalScale = Vector3.zero;
            realLocalScale.x = 1 / obj.transform.parent.lossyScale.x;
            realLocalScale.y = 1 / obj.transform.parent.lossyScale.y;
            realLocalScale.z = 1 / obj.transform.parent.lossyScale.z;

            obj.transform.localScale = realLocalScale * Scale;
        }


        //start each effect layer.
        foreach (EffectLayer efl in EflList)
        {
            efl.Vertexpool = MatDic[efl.Material.name];
        }
        //this.transform.position = Vector3.zero;
        //this.transform.rotation = Quaternion.identity;
        this.transform.localScale = Vector3.one;

        foreach (EffectLayer el in EflList)
        {
            el.StartCustom();
        }

        //add events
        EventList.Clear();
        foreach (Transform child in transform)
        {
            XftEventComponent xftevent = child.GetComponent <XftEventComponent>();
            if (xftevent == null)
            {
                continue;
            }
            EventList.Add(xftevent);
            xftevent.Initialize();
        }
        Initialized = true;
    }
Beispiel #27
0
    public void Update()
    {
        CurTime = Time.realtimeSinceStartup;
#if UNITY_EDITOR
        if (!EditorApplication.isPlaying)
        {
            if (!EditView)
            {
                return;
            }
            CurTime = EditorApplication.timeSinceStartup;
            if (!CheckEditModeInited())
            {
                ResetEditScene();
            }
        }
#endif
        float deltaTime = (float)(CurTime - LastTime);

        //simple method to check game delay: the game must run above 20 FPS.
        if (deltaTime > 0.05f)
        {
            deltaTime = 0.0333f;
        }

        if (!IgnoreTimeScale)
        {
            deltaTime *= Time.timeScale;
        }

        ElapsedTime += deltaTime;

        for (int i = 0; i < EflList.Count; i++)
        {
            if (EflList[i] == null)            //be destroyed?
            {
                return;
            }
            EffectLayer el = EflList[i];
            if (ElapsedTime > el.StartTime && IsActive(el.gameObject))
            {
                el.FixedUpdateCustom(deltaTime);
            }
        }


        for (int i = 0; i < EventList.Count; i++)
        {
            XftEventComponent e = EventList[i];
            if (IsActive(e.gameObject))
            {
                e.UpdateCustom(deltaTime);
            }
        }

        LastTime = CurTime;

#if UNITY_EDITOR
        if (!EditorApplication.isPlaying)
        {
            LateUpdate();
        }
#endif
    }