Exemplo n.º 1
0
    public override void OnInspectorGUI()
    {
        UltimateToonWater UTW = (UltimateToonWater)target;

        bool needGenerateMesh       = false;
        bool needUpdateTextures     = false;
        bool needUpdateColors       = false;
        bool needUpdateTextureSize  = false;
        bool needUpdateTextureProps = false;

        bPreviewMode.boolValue = GUILayout.Toggle(bPreviewMode.boolValue, "Preview water in editor.");

        openSetup = EditorGUILayout.Foldout(openSetup, "Setup:");
        if (openSetup == true)
        {
            bUseGPU.boolValue = EditorGUILayout.Toggle("Use GPU rendering:", bUseGPU.boolValue);
            if (bUseGPU.boolValue == false)
            {
                EditorGUILayout.HelpBox("Always use GPU rendering if possible.\nThis is much faster!", MessageType.Warning);
            }
            bMoveMesh.boolValue      = EditorGUILayout.Toggle("Generate Waves:", bMoveMesh.boolValue);
            bMoveTextures.boolValue  = EditorGUILayout.Toggle("Move Textures:", bMoveTextures.boolValue);
            bStickToTarget.boolValue = EditorGUILayout.Toggle("Snap to Target:", bStickToTarget.boolValue);
            if (bStickToTarget.boolValue == true)
            {
                tTarget.objectReferenceValue = EditorGUILayout.ObjectField("Target:", tTarget.objectReferenceValue, typeof(Transform), true);
            }
            GUILayout.Label("* = Optional setting, can be left empty.");
        }



        openBasic = EditorGUILayout.Foldout(openBasic, "Basic settings:");
        if (openBasic == true)
        {
            float fSizeOld = fSize.floatValue;
            float fMeshPointDistanceOld = fMeshPointDistance.floatValue;

            fSize.floatValue = EditorGUILayout.FloatField("Square Water Size: ", fSize.floatValue);
            fMeshPointDistance.floatValue = EditorGUILayout.FloatField("Meshpoint Distance: ", fMeshPointDistance.floatValue);
            if (fSizeOld != fSize.floatValue || fMeshPointDistanceOld != fMeshPointDistance.floatValue)
            {
                needGenerateMesh = true;
            }
        }
        openAppearance = EditorGUILayout.Foldout(openAppearance, "Appearance:");
        if (openAppearance == true)
        {
            Color cWaterColorNew = cWaterColor.colorValue;
            Color cWaveColorNew  = cWaveColor.colorValue;
            cWaterColorNew   = EditorGUILayout.ColorField("Water Color:", cWaterColorNew);
            cWaveColorNew    = EditorGUILayout.ColorField("Wave Color:", cWaveColorNew);
            cWaterColorNew.a = EditorGUILayout.Slider("Water transparency:", cWaterColorNew.a, 0f, 1f);

            if (cWaterColorNew != cWaterColor.colorValue || cWaveColorNew != cWaveColor.colorValue)
            {
                cWaterColor.colorValue = cWaterColorNew;
                cWaveColor.colorValue  = cWaveColorNew;
                needUpdateColors       = true;
            }

            float fColorTextureRatioOld = fColorTextureRatio.floatValue;
            float fHeightColoringOld    = fHeightColoring.floatValue;
            float fShoreFoamLineOld     = fShoreFoamLine.floatValue;
            float fShoreFoamCutOld      = fShoreFoamCut.floatValue;
            float fTextureBiasOld       = fTextureBias.floatValue;

            fColorTextureRatio.floatValue = EditorGUILayout.Slider("Color/Texture ratio:", fColorTextureRatio.floatValue, 0f, 1f);
            fTextureBias.floatValue       = EditorGUILayout.Slider("Texture mix:", fTextureBias.floatValue, 0f, 1f);
            fHeightColoring.floatValue    = EditorGUILayout.Slider("Steepness coloring:", fHeightColoring.floatValue, 0f, 1f);
            fShoreFoamLine.floatValue     = EditorGUILayout.FloatField("Shore foam amount:", fShoreFoamLine.floatValue);
            fShoreFoamCut.floatValue      = EditorGUILayout.Slider("Shoe foam cut:", fShoreFoamCut.floatValue, 0f, 1f);

            if (fColorTextureRatio.floatValue != fColorTextureRatioOld ||
                fTextureBias.floatValue != fTextureBiasOld ||
                fHeightColoring.floatValue != fHeightColoringOld ||
                fShoreFoamLine.floatValue != fShoreFoamLineOld ||
                fShoreFoamCut.floatValue != fShoreFoamCutOld
                )
            {
                needUpdateTextureProps = true;
            }


            Object tMainTextureOld   = tMainTexture.objectReferenceValue;
            Object tDetailTextureOld = tDetailTexture.objectReferenceValue;

            tMainTexture.objectReferenceValue   = EditorGUILayout.ObjectField("Main Texture:", tMainTexture.objectReferenceValue, typeof(Texture2D), false);
            tDetailTexture.objectReferenceValue = EditorGUILayout.ObjectField("Detail Texture:", tDetailTexture.objectReferenceValue, typeof(Texture2D), false);


            if (tMainTexture.objectReferenceValue != tMainTextureOld || tDetailTexture.objectReferenceValue != tDetailTextureOld)
            {
                needUpdateTextures = true;
            }

            Vector2 v2MainTextureTitleOld   = v2MainTextureTitle.vector2Value;
            Vector2 v2DetailTextureTitleOld = v2DetailTextureTitle.vector2Value;
            Vector2 v2MainTexturScrollOld   = v2MainTexturScroll.vector2Value;
            Vector2 v2DetailTexturScrollOld = v2DetailTexturScroll.vector2Value;

            v2MainTextureTitle.vector2Value   = EditorGUILayout.Vector2Field("Main Texture Size:", v2MainTextureTitle.vector2Value);
            v2DetailTextureTitle.vector2Value = EditorGUILayout.Vector2Field("Detail Texture Size:", v2DetailTextureTitle.vector2Value);
            v2MainTexturScroll.vector2Value   = EditorGUILayout.Vector2Field("Main Texture Scroll:", v2MainTexturScroll.vector2Value);
            v2DetailTexturScroll.vector2Value = EditorGUILayout.Vector2Field("Detail Texture Scroll:", v2DetailTexturScroll.vector2Value);

            if (v2MainTextureTitle.vector2Value != v2MainTextureTitleOld ||
                v2DetailTextureTitle.vector2Value != v2DetailTextureTitleOld ||
                v2MainTexturScroll.vector2Value != v2MainTexturScrollOld ||
                v2DetailTexturScroll.vector2Value != v2DetailTexturScrollOld)
            {
                needUpdateTextureSize = true;
            }
        }

        openWaves = EditorGUILayout.Foldout(openWaves, "Waves:");
        if (openWaves == true)
        {
            //GUILayout.Label("Warning!: If more than 2 waves are used,\nCPU rendering will be enabled.\nThis is much slower than GPU rendering.",warningStyle);
            if (UTW.waveForms.Count > 2)
            {
                EditorGUILayout.HelpBox("If more than 2 waves are used,\nCPU rendering will be enabled.\nThis is much slower than GPU rendering.", MessageType.Warning);
            }
            EditorGUI.BeginChangeCheck();
            EditorGUILayout.PropertyField(aWaveForms, true);
            if (EditorGUI.EndChangeCheck())
            {
                serializedObject.ApplyModifiedProperties();
            }
            EditorGUIUtility.LookLikeControls();
        }

        showDefaultInspectorOptions = EditorGUILayout.Foldout(showDefaultInspectorOptions, "Default Inspector:");
        if (showDefaultInspectorOptions == true)
        {
            EditorGUILayout.HelpBox("Only edit if you understand the functioning of the script!", MessageType.Warning);
            DrawDefaultInspector();
        }

        dimObj.ApplyModifiedProperties();


        if (needGenerateMesh == true)
        {
            int numVerts = (int)(fSize.floatValue / fMeshPointDistance.floatValue);
            numVerts *= numVerts;
            if (numVerts > 65000)
            {
                fMeshPointDistance.floatValue = Mathf.CeilToInt(fSize.floatValue / Mathf.Sqrt(65000f));
                dimObj.ApplyModifiedProperties();
            }

            UTW.generateMesh();
        }

        if (needUpdateTextures == true)
        {
            UTW.UpdateTextures();
        }

        if (needUpdateColors == true)
        {
            UTW.UpdateColor();
        }

        if (needUpdateTextureSize == true)
        {
            UTW.UpdateTextureSize();
        }

        if (needUpdateTextureProps == true)
        {
            UTW.UpdateTextureProps();
        }
    }
Exemplo n.º 2
0
    void ShowControls(int id)
    {
        bool needGenerateMesh = false;

        GUILayout.BeginVertical();

        if (GUILayout.Button("Toggle Particles"))
        {
            if (waveParticles != null)
            {
                waveParticles.gameObject.SetActive(!waveParticles.gameObject.activeSelf);
            }
            if (floaterParticles != null)
            {
                floaterParticles.gameObject.SetActive(!floaterParticles.gameObject.activeSelf);
            }
        }

        if (island != null)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Island Y:", GUILayout.Width(100));
            float islandHeight = GUILayout.HorizontalSlider(island.position.y, -50, -10);
            island.position = new Vector3(island.position.x, islandHeight, island.position.z);
            GUILayout.EndHorizontal();
        }

        GUILayout.BeginHorizontal();
        float startSize = UTW.size;

        GUILayout.Label("Water Size (" + startSize + "):", GUILayout.Width(100));
        UTW.size = Mathf.RoundToInt(GUILayout.HorizontalSlider(startSize, 100, 2000));
        if (UTW.size != startSize)
        {
            needGenerateMesh = true;
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        float startMPD = UTW.meshPointDistance;

        GUILayout.Label("MeshPoint Distance (" + startMPD + "):", GUILayout.Width(100));
        UTW.meshPointDistance = GUILayout.HorizontalSlider(startMPD, 1, 20);
        if (UTW.meshPointDistance != startMPD)
        {
            needGenerateMesh = true;
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        Color  color       = UTW.GetComponent <Renderer>().material.GetColor("_Color");
        string colorString = color.ToString();

        GUILayout.Label("Base Color:", GUILayout.Width(100));
        GUILayout.BeginVertical();
        color.r = GUILayout.HorizontalSlider(color.r, 0f, 1f);
        color.g = GUILayout.HorizontalSlider(color.g, 0f, 1f);
        color.b = GUILayout.HorizontalSlider(color.b, 0f, 1f);
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Water Alpha:", GUILayout.Width(100));
        color.a = GUILayout.HorizontalSlider(color.a, 0f, 1f);
        if (colorString != color.ToString())
        {
            UTW.GetComponent <Renderer>().material.SetColor("_Color", color);
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        float startTC = UTW.GetComponent <Renderer>().material.GetFloat("_ColorBias");
        float cloneTC = startTC;

        GUILayout.Label("Texture/Color:", GUILayout.Width(100));
        startTC = GUILayout.HorizontalSlider(startTC, 0f, 1f);
        if (cloneTC != startTC)
        {
            UTW.GetComponent <Renderer>().material.SetFloat("_ColorBias", startTC);
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        float startTT = UTW.GetComponent <Renderer>().material.GetFloat("_TextureBias");
        float cloneTT = startTT;

        GUILayout.Label("Texture/Texture:", GUILayout.Width(100));
        startTT = GUILayout.HorizontalSlider(startTT, 0f, 1f);
        if (cloneTT != startTT)
        {
            UTW.GetComponent <Renderer>().material.SetFloat("_TextureBias", startTT);
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        float startT1S = UTW.mainTextureTitle.x;

        GUILayout.Label("Texture1 Size:", GUILayout.Width(100));
        startT1S = GUILayout.HorizontalSlider(startT1S, 1f, 1200);
        if (startT1S != UTW.mainTextureTitle.x)
        {
            UTW.mainTextureTitle = new Vector2(startT1S, startT1S);
            UTW.UpdateTextureSize();
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Texture1 Scroll:", GUILayout.Width(100));
        GUILayout.BeginVertical();
        //mainTexturScroll
        Vector2 scroll = UTW.mainTexturScroll;

        scroll.x             = GUILayout.HorizontalSlider(scroll.x, -1f, 1f);
        scroll.y             = GUILayout.HorizontalSlider(scroll.y, -1f, 1f);
        UTW.mainTexturScroll = scroll;
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        float startT2S = UTW.detailTextureTitle.x;

        GUILayout.Label("Texture2 Size:", GUILayout.Width(100));
        startT2S = GUILayout.HorizontalSlider(startT2S, 1f, 100);
        if (startT2S != UTW.detailTextureTitle.x)
        {
            UTW.detailTextureTitle = new Vector2(startT2S, startT2S);
            UTW.UpdateTextureSize();
        }
        GUILayout.EndHorizontal();


        GUILayout.BeginHorizontal();
        GUILayout.Label("Texture2 Scroll:", GUILayout.Width(100));
        GUILayout.BeginVertical();
        //mainTexturScroll
        Vector2 scroll2 = UTW.detailTexturScroll;

        scroll2.x = GUILayout.HorizontalSlider(scroll2.x, -1f, 1f);
        scroll2.y = GUILayout.HorizontalSlider(scroll2.y, -1f, 1f);
        UTW.detailTexturScroll = scroll2;
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        float startHF = UTW.GetComponent <Renderer>().material.GetFloat("_HeightFactor");
        float cloneHF = startHF;

        GUILayout.Label("Height Coloring:", GUILayout.Width(100));
        startHF = GUILayout.HorizontalSlider(startHF, 0f, 0.5f);
        if (cloneHF != startHF)
        {
            UTW.GetComponent <Renderer>().material.SetFloat("_HeightFactor", startHF);
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        float startSD = UTW.GetComponent <Renderer>().material.GetFloat("_HighlightThresholdMax");
        float cloneSD = startSD;

        GUILayout.Label("Shore Foam:", GUILayout.Width(100));
        startSD = GUILayout.HorizontalSlider(startSD, 0f, 10f);
        if (cloneSD != startSD)
        {
            UTW.GetComponent <Renderer>().material.SetFloat("_HighlightThresholdMax", startSD);
        }
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        Color  color2       = UTW.GetComponent <Renderer>().material.GetColor("_Color2");
        string color2String = color2.ToString();

        GUILayout.Label("Shore Foam Color:", GUILayout.Width(100));
        GUILayout.BeginVertical();
        color2.r = GUILayout.HorizontalSlider(color2.r, 0f, 1f);
        color2.g = GUILayout.HorizontalSlider(color2.g, 0f, 1f);
        color2.b = GUILayout.HorizontalSlider(color2.b, 0f, 1f);
        if (color2String != color2.ToString())
        {
            UTW.GetComponent <Renderer>().material.SetColor("_Color2", color2);
        }
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        float startSDC = UTW.GetComponent <Renderer>().material.GetFloat("_HighlightThresholdRange");
        float cloneSDC = startSDC;

        GUILayout.Label("Shore Foam Cut:", GUILayout.Width(100));
        startSDC = GUILayout.HorizontalSlider(startSDC, 0f, 1f);
        if (cloneSDC != startSDC)
        {
            UTW.GetComponent <Renderer>().material.SetFloat("_HighlightThresholdRange", startSDC);
        }
        GUILayout.EndHorizontal();

        GUILayout.EndVertical();

        if (needGenerateMesh == true)
        {
            int numVerts = (int)(UTW.size / UTW.meshPointDistance);
            numVerts *= numVerts;
            if (numVerts > 65000)
            {
                UTW.meshPointDistance = Mathf.CeilToInt(UTW.size / Mathf.Sqrt(65000f));
            }

            UTW.generateMesh();
        }
    }