예제 #1
0
    void ListKeywords(Material mat, GUIContent label, float buttonSize)
    {
        keywordsList.Clear();
        foreach (string s in mat.shaderKeywords)
        {
            keywordsList.Add(s);
        }

        if (MGUI.LinkButton(label, buttonSize, buttonSize, (MGUI.GetInspectorWidth() / 2.0f) - 11.0f))
        {
            displayKeywords = !displayKeywords;
        }

        if (displayKeywords)
        {
            MGUI.Space8();
            string infoString = "";
            if (keywordsList.Capacity == 0)
            {
                infoString = "NO KEYWORDS FOUND";
            }
            else
            {
                infoString = "\nKeywords Used:\n\n";
                foreach (string s in keywordsList)
                {
                    infoString += " " + s + "\n";
                }
            }
            MGUI.DisplayText(infoString);
            MGUI.SpaceN8();
        }
        GUILayout.Space(buttonSize - 10);
    }
 void DoVariantArea()
 {
     MGUI.PropertyGroup(() => {
         me.ShaderProperty(workflow, Tips.standWorkflow);
         me.ShaderProperty(blendMode, Tips.standBlendMode);
         me.ShaderProperty(samplingMode, Tips.samplingMode);
         if (blendMode.floatValue > 0)
         {
             me.ShaderProperty(useAlphaMask, Tips.separateAlpha);
         }
         if (samplingMode.floatValue == 3)
         {
             me.ShaderProperty(triplanarFalloff, Tips.triplanarFalloff);
         }
         if (samplingMode.floatValue == 4)
         {
             me.ShaderProperty(edgeFadeMin, "Edge Fade Min");
             me.ShaderProperty(edgeFadeMax, "Edge Fade Max");
         }
         if (blendMode.floatValue == 1)
         {
             me.ShaderProperty(alphaCutoff, Tips.alphaCutoffText);
         }
         me.ShaderProperty(useSmoothness, Tips.useSmoothness);
         if (workflow.floatValue > 0 && samplingMode.floatValue < 3)
         {
             me.ShaderProperty(useHeight, Tips.useHeight);
         }
     });
 }
 void DoSubsurfaceArea()
 {
     MGUI.PropertyGroup(() => {
         me.ShaderProperty(subsurface, "Enable");
         MGUI.ToggleGroup(subsurface.floatValue == 0);
         MGUI.PropertyGroupLayer(() => {
             MGUI.SpaceN1();
             me.TexturePropertySingleLine(Tips.thicknessMapText, thicknessMap, thicknessMap.textureValue ? thicknessMapPower : null);
             if (thicknessMap.textureValue)
             {
                 MGUI.TexPropLabel("Power", 94);
             }
             me.ShaderProperty(scatterCol, Tips.scatterCol);
             me.ShaderProperty(scatterAlbedoTint, Tips.scatterAlbedoTint);
             MGUI.Space8();
             me.ShaderProperty(scatterIntensity, Tips.scatterIntensity);
             me.ShaderProperty(scatterAmbient, Tips.scatterAmbient);
             me.ShaderProperty(scatterPow, Tips.scatterPow);
             me.ShaderProperty(scatterDist, Tips.scatterDist);
             me.ShaderProperty(wrappingFactor, Tips.wrappingFactor);
             MGUI.SpaceN2();
         });
         MGUI.ToggleGroupEnd();
     });
 }
    static void SetMaterialKeywords(Material material)
    {
        // Note: keywords must be based on Material value not on MaterialProperty due to multi-edit & material animation
        // (MaterialProperty value might come from renderer material property block)
        int workflow      = material.GetInt("_Workflow");
        int samplingMode  = material.GetInt("_SamplingMode");
        int blendModeEnum = material.GetInt("_BlendMode");

        MGUI.SetKeyword(material, "_NORMALMAP", material.GetTexture("_BumpMap") || material.GetTexture("_DetailNormalMap"));
        MGUI.SetKeyword(material, "_WORKFLOW_PACKED_ON", workflow == 1);
        MGUI.SetKeyword(material, "_SPECGLOSSMAP", material.GetTexture("_SpecGlossMap"));
        MGUI.SetKeyword(material, "_METALLICGLOSSMAP", material.GetTexture("_MetallicGlossMap"));
        MGUI.SetKeyword(material, "_DETAIL_MULX2", material.GetTexture("_DetailAlbedoMap"));
        MGUI.SetKeyword(material, "_REFLECTION_FALLBACK_ON", material.GetTexture("_ReflCube"));
        MGUI.SetKeyword(material, "_REFLECTION_OVERRIDE_ON", material.GetTexture("_ReflCubeOverride"));
        MGUI.SetKeyword(material, "_SCREENSPACE_REFLECTIONS_ON", material.GetInt("_SSR") == 1);
        MGUI.SetKeyword(material, "_SPECULARHIGHLIGHTS_OFF", material.GetInt("_SpecularHighlights") == 0);
        MGUI.SetKeyword(material, "_GLOSSYREFLECTIONS_OFF", material.GetInt("_GlossyReflections") == 0);
        MGUI.SetKeyword(material, "_STOCHASTIC_ON", samplingMode == 1);
        MGUI.SetKeyword(material, "_TSS_ON", samplingMode == 2);
        MGUI.SetKeyword(material, "_TRIPLANAR_ON", samplingMode == 3);
        MGUI.SetKeyword(material, "_DECAL_ON", samplingMode == 4);
        MGUI.SetKeyword(material, "_DETAIL_ROUGH_ON", material.GetTexture("_DetailRoughnessMap"));
        MGUI.SetKeyword(material, "_DETAIL_AO_ON", material.GetTexture("_DetailAOMap"));
        MGUI.SetKeyword(material, "_SUBSURFACE_ON", material.GetInt("_Subsurface") == 1);
        MGUI.SetKeyword(material, "_AUDIOLINK_ON", material.GetInt("_AudioLinkEmission") > 0);
        MGUI.SetKeyword(material, "_DETAIL_SAMPLEMODE_ON", material.GetInt("_DetailSamplingMode") == 1);
        MGUI.SetKeyword(material, "_ALPHAMASK_ON", blendModeEnum > 0 && material.GetInt("_UseAlphaMask") == 1);
        MGUI.SetKeyword(material, "_BICUBIC_SAMPLING_ON", material.GetInt("_BicubicLightmap") == 1);
        MGUI.SetKeyword(material, "BAKERY_SH", material.GetInt("_BakeryMode") == 1);
        MGUI.SetKeyword(material, "BAKERY_RNM", material.GetInt("_BakeryMode") == 2);
        MGUI.SetKeyword(material, "_FILTERING_ON", material.GetInt("_Filtering") == 1);

        if (samplingMode < 3)
        {
            if (!material.GetTexture("_PackedMap"))
            {
                MGUI.SetKeyword(material, "_PARALLAXMAP", material.GetTexture("_ParallaxMap"));
            }
            else
            {
                MGUI.SetKeyword(material, "_PARALLAXMAP", material.GetInt("_UseHeight") == 1);
            }
        }
        else
        {
            MGUI.SetKeyword(material, "_PARALLAXMAP", false);
        }

        // A material's GI flag internally keeps track of whether emission is enabled at all, it's enabled but has no effect
        // or is enabled and may be modified at runtime. This state depends on the values of the current flag and emissive color.
        // The fixup routine makes sure that the material is in the correct state if/when changes are made to the mode or color.
        MaterialEditor.FixupEmissiveFlag(material);
        bool shouldEmissionBeEnabled = (material.globalIlluminationFlags & MaterialGlobalIlluminationFlags.EmissiveIsBlack) == 0;

        MGUI.SetKeyword(material, "_EMISSION", shouldEmissionBeEnabled);

        material.SetShaderPassEnabled("Always", material.GetInt("_SSR") == 1);
    }
예제 #5
0
 void OnGUI()
 {
     //GUI.Box(new Rect(0, 0, Screen.width, Screen.height), Background);
     GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), Background);
     if (MGUI.HoveredButton(new Rect(MGUI.Margin, Screen.height - MGUI.menuButtonWidth - MGUI.Margin, MGUI.menuButtonWidth, MGUI.menuButtonWidth), MainMenuButton))
     {
         Application.LoadLevel("MainMenu");
     }
     if (MGUI.HoveredButton(new Rect(Screen.width - MGUI.menuButtonWidth - MGUI.Margin, Screen.height - MGUI.menuButtonWidth - MGUI.Margin, MGUI.menuButtonWidth, MGUI.menuButtonWidth), PlayButton))
     {
         StartCoroutine(WaitForEndOfMusic());
     }
 }
 void DoDetailArea()
 {
     MGUI.BoldLabel("Detail Textures");
     MGUI.PropertyGroup(() => {
         me.TexturePropertySingleLine(Tips.detailAlbedoText, detailAlbedoMap, detailAlbedoMap.textureValue ? detailAlbedoBlend : null);
         me.TexturePropertySingleLine(Tips.detailNormalMapText, detailNormalMap, detailNormalMap.textureValue ? detailNormalMapScale : null);
         me.TexturePropertySingleLine(Tips.detailRoughnessMapText, detailRoughnessMap, detailRoughnessMap.textureValue ? detailRoughBlend : null);
         MGUI.sRGBWarning(detailRoughnessMap);
         me.TexturePropertySingleLine(Tips.detailAOMapText, detailAOMap, detailAOMap.textureValue ? detailAOBlend : null);
         MGUI.sRGBWarning(detailAOMap);
         MGUI.SpaceN2();
     });
 }
예제 #7
0
    // Use this for initialization
    void Start()
    {
        selectedGameName = "";


        currentLevel          = 1;
        gamesNumber           = gameList.Length;
        buttonBarHeight       = barHeightToScreenHeightRatio * Screen.height;
        gameSelectionTextures = new Texture[gamesNumber];
        previewTextures       = new Texture[gamesNumber];
        playButtonsTextures   = new Texture[gamesNumber];
        gameSelectionRects    = new Rect[gamesNumber];

        float buttonWidth = (Screen.width - MGUI.Margin * (gamesNumber + 1)) / gamesNumber;

        for (int i = 0; i < gamesNumber; i++)
        {
            gameSelectionTextures[i] = (Texture)Resources.Load("MainMenu/Buttons/" + gameList[i]);
            previewTextures[i]       = (Texture)Resources.Load("MainMenu/Previews/" + gameList[i]);
            playButtonsTextures[i]   = (Texture)Resources.Load("MenuCommon/play_" + gameList[i]);


            float buttonHeight = buttonWidth * gameSelectionTextures[i].height / gameSelectionTextures[i].width;
            gameSelectionRects[i] = new Rect(i * (buttonWidth) + (i + 1) * MGUI.Margin, centerPosition(buttonHeight, buttonBarHeight), buttonWidth, buttonHeight);
        }

        soundON         = (Texture)Resources.Load("MainMenu/Buttons/soundon");
        soundOff        = (Texture)Resources.Load("MainMenu/Buttons/soundoff");
        options         = (Texture)Resources.Load("MainMenu/Buttons/options_credits_btn");
        credits         = (Texture)Resources.Load("MainMenu/Buttons/roll_credits_btn");
        gameExitTexture = (Texture)Resources.Load("MainMenu/Buttons/button_exit");

        float titleHeight = Screen.height - buttonBarHeight - MGUI.Margin;
        float titleWidth  = titleHeight * gameTitleTexture.width / gameTitleTexture.width;

        gameTitleRect = new Rect(centerPosition(titleWidth, Screen.width), Screen.height - titleHeight, titleWidth, titleHeight);

        quitRect = new Rect(MGUI.Margin, Screen.height - MGUI.Margin - MGUI.menuButtonWidth, MGUI.menuButtonWidth, MGUI.menuButtonWidth);

        creditsRect = new Rect(Screen.width - MGUI.Margin - MGUI.menuButtonWidth, Screen.height - MGUI.Margin - MGUI.menuButtonWidth, MGUI.menuButtonWidth, MGUI.menuButtonWidth);

        float previewRatio  = (float)previewTextures[0].width / previewTextures[0].height;
        float previewWidth  = Screen.width * gamePreviewWidthToScreenWidthRatio;
        float previewHeight = Mathf.Min(previewWidth / previewRatio, Screen.height - buttonBarHeight - 2 * MGUI.Margin);

        gamePreviewRect   = new Rect(centerPosition(previewWidth, Screen.width), buttonBarHeight + MGUI.Margin, previewWidth, previewHeight);
        soundButtonRect   = MGUI.centerInRect(new Rect(Screen.width / 7, gamePreviewArrowHeightRation * gamePreviewRect.height, MGUI.menuButtonWidth, MGUI.menuButtonWidth), gamePreviewRect);
        creditsButtonRect = MGUI.centerInRect(new Rect(Screen.width / 9 - Screen.width / 4, gamePreviewArrowHeightRation * gamePreviewRect.height, MGUI.menuButtonWidth, MGUI.menuButtonWidth), gamePreviewRect);
        //TODO make centerRect method
        gamePreviewButtonRect = MGUI.centerInRect(new Rect(0, gamePreviewArrowHeightRation * gamePreviewRect.height, MGUI.menuButtonWidth, MGUI.menuButtonWidth), gamePreviewRect);        // new Rect(centerPosition(), centerPosition(), Screen.width/7, Screen.width/7);
    }
 void DoFilteringArea()
 {
     MGUI.PropertyGroup(() => {
         me.ShaderProperty(filtering, "Enable");
         MGUI.ToggleGroup(filtering.floatValue == 0);
         MGUI.BoldLabel("Base Color");
         MGUI.PropertyGroupLayer(() => {
             MGUI.SpaceN1();
             me.ShaderProperty(hue, "Hue");
             me.ShaderProperty(saturation, "Saturation");
             me.ShaderProperty(brightness, "Brightness");
             me.ShaderProperty(contrast, "Contrast");
             MGUI.SpaceN2();
         });
         MGUI.Space4();
         MGUI.BoldLabel("Detail Color");
         MGUI.PropertyGroupLayer(() => {
             MGUI.SpaceN1();
             me.ShaderProperty(hueDet, "Hue");
             me.ShaderProperty(saturationDet, "Saturation");
             me.ShaderProperty(brightnessDet, "Brightness");
             me.ShaderProperty(contrastDet, "Contrast");
             MGUI.SpaceN2();
         });
         if (emissionEnabled)
         {
             MGUI.Space4();
             MGUI.BoldLabel("Emission Color");
             MGUI.PropertyGroupLayer(() => {
                 MGUI.SpaceN1();
                 me.ShaderProperty(hueEmiss, "Hue");
                 me.ShaderProperty(saturationEmiss, "Saturation");
                 me.ShaderProperty(brightnessEmiss, "Brightness");
                 me.ShaderProperty(contrastEmiss, "Contrast");
                 MGUI.SpaceN2();
             });
         }
         MGUI.Space4();
         MGUI.BoldLabel("Global Color");
         MGUI.PropertyGroupLayer(() => {
             MGUI.SpaceN1();
             me.ShaderProperty(huePost, "Hue");
             me.ShaderProperty(saturationPost, "Saturation");
             me.ShaderProperty(brightnessPost, "Brightness");
             me.ShaderProperty(contrastPost, "Contrast");
             MGUI.SpaceN2();
         });
         MGUI.ToggleGroupEnd();
     });
 }
 void DoRimArea()
 {
     MGUI.PropertyGroup(() => {
         me.ShaderProperty(rimTog, "Enable");
         MGUI.ToggleGroup(rimTog.floatValue == 0);
         MGUI.PropertyGroupLayer(() => {
             MGUI.SpaceN2();
             me.ShaderProperty(rimBlend, Tips.rimBlend);
             me.ShaderProperty(rimCol, Tips.rimCol);
             me.ShaderProperty(rimStr, Tips.rimStr);
             me.ShaderProperty(rimWidth, Tips.rimWidth);
             me.ShaderProperty(rimEdge, Tips.rimEdge);
             MGUI.SpaceN2();
         });
         MGUI.ToggleGroupEnd();
     });
 }
    void ApplyMaterialSettings(Material mat)
    {
        bool ssrToggle        = mat.GetInt("_SSR") == 1;
        int  vertMode         = mat.GetInt("_VertOffsetMode");
        int  reflMode         = mat.GetInt("_Reflections");
        int  specMode         = mat.GetInt("_Specular");
        int  foamToggle       = mat.GetInt("_FoamToggle");
        int  foamNormalToggle = mat.GetInt("_FoamNormalToggle");
        bool foamNormals      = foamToggle == 1 && foamNormalToggle == 1;

        MGUI.SetKeyword(mat, "_REFLECTIONS_ON", reflMode > 0);
        MGUI.SetKeyword(mat, "_REFLECTIONS_MANUAL_ON", reflMode == 2);
        MGUI.SetKeyword(mat, "_SPECULAR_ON", specMode > 0);
        MGUI.SetKeyword(mat, "_SCREENSPACE_REFLECTIONS_ON", ssrToggle);
        MGUI.SetKeyword(mat, "_VERTEX_OFFSET_ON", vertMode == 1);
        MGUI.SetKeyword(mat, "_GERSTNER_WAVES_ON", vertMode == 2);
        MGUI.SetKeyword(mat, "_FOAM_NORMALS_ON", foamNormals);
    }
    void DoFooter()
    {
        GUILayout.Space(20);
        float buttonSize = 35f;
        Rect  footerRect = EditorGUILayout.GetControlRect();

        footerRect.x     += (MGUI.GetInspectorWidth() / 2f) - buttonSize - 5f;
        footerRect.width  = buttonSize;
        footerRect.height = buttonSize;
        if (GUI.Button(footerRect, MGUI.patIconTex))
        {
            Application.OpenURL("https://www.patreon.com/mochieshaders");
        }
        footerRect.x += buttonSize + 5f;
        footerRect.y += 17f;
        GUIStyle formatting = new GUIStyle();

        formatting.fontSize  = 15;
        formatting.fontStyle = FontStyle.Bold;
        if (EditorGUIUtility.isProSkin)
        {
            formatting.normal.textColor = new Color(0.8f, 0.8f, 0.8f, 1);
            formatting.hover.textColor  = new Color(0.8f, 0.8f, 0.8f, 1);
            GUI.Label(footerRect, versionLabel, formatting);
            footerRect.y     += 20f;
            footerRect.x     -= 35f;
            footerRect.width  = 70f;
            footerRect.height = 70f;
            GUI.Label(footerRect, MGUI.mochieLogoPro);
            GUILayout.Space(90);
        }
        else
        {
            GUI.Label(footerRect, versionLabel, formatting);
            footerRect.y     += 20f;
            footerRect.x     -= 35f;
            footerRect.width  = 70f;
            footerRect.height = 70f;
            GUI.Label(footerRect, MGUI.mochieLogo);
            GUILayout.Space(90);
        }
    }
 void DoEmissionArea(Material material)
 {
     if (me.EmissionEnabledProperty())
     {
         emissionEnabled = true;
         bool hadEmissionTexture = emissionMap.textureValue != null;
         MGUI.ToggleGroup(!emissionEnabled);
         MGUI.PropertyGroupLayer(() => {
             MGUI.SpaceN2();
             me.LightmapEmissionFlagsProperty(0, true);
             me.ShaderProperty(audioLinkEmission, Tips.audioLinkEmission);
             me.ShaderProperty(emissPulseWave, Tips.emissPulseWave);
             if (audioLinkEmission.floatValue > 0)
             {
                 me.ShaderProperty(audioLinkEmissionStrength, Tips.audioLinkEmissionStrength);
             }
             if (emissPulseWave.floatValue > 0)
             {
                 me.ShaderProperty(emissPulseStrength, Tips.emissPulseStrength);
                 me.ShaderProperty(emissPulseSpeed, Tips.emissPulseSpeed);
             }
             MGUI.Space2();
             me.TexturePropertySingleLine(Tips.emissionText, emissionMap, emissionColorForRendering, emissIntensity);
             MGUI.TexPropLabel("Intensity", 105);
             MGUI.SpaceN2();
             me.TexturePropertySingleLine(Tips.maskText, emissionMask);
             MGUI.SpaceN4();
         });
         MGUI.ToggleGroupEnd();
         float brightness = emissionColorForRendering.colorValue.maxColorComponent;
         if (emissionMap.textureValue != null && !hadEmissionTexture && brightness <= 0f)
         {
             emissionColorForRendering.colorValue = Color.white;
         }
     }
     else
     {
         emissionEnabled = false;
     }
 }
예제 #13
0
    void ApplyMaterialSettings(Material mat)
    {
        bool softening  = mat.GetInt("_Softening") == 1;
        bool distortion = mat.GetInt("_Distortion") == 1;
        bool distortUV  = mat.GetInt("_DistortMainTex") == 1 && distortion;
        bool layering   = mat.GetTexture("_SecondTex");
        bool pulse      = mat.GetInt("_Pulse") == 1;
        bool falloff    = mat.GetInt("_Falloff") == 1;
        bool flipbook   = mat.GetInt("_FlipbookBlending") == 1;
        bool cutout     = mat.GetInt("_IsCutout") == 1;
        bool filtering  = mat.GetInt("_Filtering") == 1;

        MGUI.SetKeyword(mat, "_ALPHATEST_ON", cutout);
        MGUI.SetKeyword(mat, "_FADING_ON", softening);
        MGUI.SetKeyword(mat, "_DISTORTION_ON", distortion);
        MGUI.SetKeyword(mat, "_DISTORTION_UV_ON", distortUV);
        MGUI.SetKeyword(mat, "_LAYERED_TEX_ON", layering);
        MGUI.SetKeyword(mat, "_PULSE_ON", pulse);
        MGUI.SetKeyword(mat, "_FALLOFF_ON", falloff);
        MGUI.SetKeyword(mat, "_FLIPBOOK_BLENDING_ON", flipbook);
        MGUI.SetKeyword(mat, "_FILTERING_ON", filtering);
        mat.SetShaderPassEnabled("Always", distortion);
        SetBlendMode(mat);
    }
 public override void AssignNewShaderToMaterial(Material mat, Shader oldShader, Shader newShader)
 {
     base.AssignNewShaderToMaterial(mat, oldShader, newShader);
     MGUI.ClearKeywords(mat);
 }
    public override void OnGUI(MaterialEditor me, MaterialProperty[] props)
    {
        if (!me.isVisible)
        {
            return;
        }

        ClearDictionaries();

        foreach (var property in GetType().GetFields(bindingFlags))
        {
            if (property.FieldType == typeof(MaterialProperty))
            {
                property.SetValue(this, FindProperty(property.Name, props));
            }
        }
        Material mat = (Material)me.target;

        if (m_FirstTimeApply)
        {
            m_FirstTimeApply = false;
        }

        header = "WaterHeader_Pro";
        if (!EditorGUIUtility.isProSkin)
        {
            header = "WaterHeader";
        }

        Texture2D headerTex    = (Texture2D)Resources.Load(header, typeof(Texture2D));
        Texture2D collapseIcon = (Texture2D)Resources.Load("CollapseIcon", typeof(Texture2D));

        GUILayout.Label(headerTex);
        MGUI.Space4();

        if (!foldouts.ContainsKey(mat))
        {
            foldouts.Add(mat, toggles);
        }

        EditorGUI.BeginChangeCheck(); {
            // Surface
            baseTabButtons.Add(() => { Toggles.CollapseFoldouts(mat, foldouts, 1); }, MGUI.collapseLabel);
            baseTabButtons.Add(() => { ResetSurface(); }, MGUI.resetLabel);
            Action surfaceTabAction = () => {
                MGUI.PropertyGroup(() => {
                    me.RenderQueueField();
                    me.ShaderProperty(_CullMode, "Culling Mode");
                    me.ShaderProperty(_ZWrite, "ZWrite");
                    me.ShaderProperty(_Opacity, "Opacity");
                    me.ShaderProperty(_DistortionStrength, "Distortion Strength");
                    MGUI.Space2();
                });
                MGUI.PropertyGroup(() => {
                    me.TexturePropertySingleLine(texLabel, _MainTex, _Color, _BaseColorStochasticToggle);
                    MGUI.TexPropLabel(Tips.stochasticLabel, 172);
                    MGUI.TextureSOScroll(me, _MainTex, _MainTexScroll);
                    me.ShaderProperty(_BaseColorOffset, Tips.parallaxOffsetLabel);
                    me.ShaderProperty(_BaseColorDistortionStrength, "Distortion Strength");
                });
                MGUI.DisplayInfo("   This shader requires a \"Depth Light\" prefab be present in the scene.\n   (Found in: Assets/Mochie/Unity/Prefabs)");
            };
            Foldouts.Foldout("BASE", foldouts, baseTabButtons, mat, me, surfaceTabAction);

            // Primary Normal
            norm0TabButtons.Add(() => { ResetPrimaryNormal(); }, MGUI.resetLabel);
            Action norm0TabAction = () => {
                MGUI.Space4();
                MGUI.PropertyGroup(() => {
                    me.TexturePropertySingleLine(Tips.waterNormalMap, _NormalMap0, _Normal0StochasticToggle);
                    MGUI.TexPropLabel(Tips.stochasticLabel, 172);
                    me.ShaderProperty(_NormalStr0, "Strength");
                    MGUI.Vector2Field(_NormalMapScale0, "Scale");
                    MGUI.Vector2Field(_NormalMapScroll0, "Scrolling");
                    me.ShaderProperty(_Rotation0, "Rotation");
                    me.ShaderProperty(_NormalMapOffset0, Tips.parallaxOffsetLabel);
                });
            };
            Foldouts.Foldout("PRIMARY NORMAL", foldouts, norm0TabButtons, mat, me, norm0TabAction);

            // Secondary Normal
            norm1TabButtons.Add(() => { ResetSecondaryNormal(); }, MGUI.resetLabel);
            Action norm1TabAction = () => {
                me.ShaderProperty(_Normal1Toggle, "Enable");
                MGUI.Space4();
                MGUI.PropertyGroup(() => {
                    MGUI.ToggleGroup(_Normal1Toggle.floatValue == 0);
                    me.TexturePropertySingleLine(Tips.waterNormalMap, _NormalMap1, _Normal1StochasticToggle);
                    MGUI.TexPropLabel(Tips.stochasticLabel, 172);
                    me.ShaderProperty(_NormalStr1, "Strength");
                    MGUI.Vector2Field(_NormalMapScale1, "Scale");
                    MGUI.Vector2Field(_NormalMapScroll1, "Scrolling");
                    me.ShaderProperty(_Rotation1, "Rotation");
                    me.ShaderProperty(_NormalMapOffset1, Tips.parallaxOffsetLabel);
                    MGUI.ToggleGroupEnd();
                });
            };
            Foldouts.Foldout("SECONDARY NORMAL", foldouts, norm1TabButtons, mat, me, norm1TabAction);

            // Reflections & Specular
            reflSpecTabButtons.Add(() => { ResetReflSpec(); }, MGUI.resetLabel);
            Action reflSpecTabAction = () => {
                MGUI.Space4();
                me.ShaderProperty(_Roughness, Tips.waterRoughness);
                me.ShaderProperty(_Metallic, Tips.waterMetallic);
                MGUI.Space8();
                me.ShaderProperty(_Reflections, "Reflections");
                MGUI.PropertyGroup(() => {
                    MGUI.ToggleGroup(_Reflections.floatValue == 0);
                    if (_Reflections.floatValue == 2)
                    {
                        me.TexturePropertySingleLine(cubeLabel, _ReflCube);
                        MGUI.Vector3Field(_ReflCubeRotation, "Rotation", false);
                    }
                    me.ShaderProperty(_ReflStrength, "Strength");

                    MGUI.ToggleFloat(me, "Screenspace Reflections", _SSR, _SSRStrength);
                    if (_SSR.floatValue > 0)
                    {
                        me.ShaderProperty(_EdgeFadeSSR, "Edge Fade");
                    }
                    me.ShaderProperty(_ReflTint, "Tint");
                    MGUI.ToggleGroupEnd();
                });
                MGUI.Space8();
                me.ShaderProperty(_Specular, "Specular");
                MGUI.PropertyGroup(() => {
                    MGUI.ToggleGroup(_Specular.floatValue == 0);
                    if (_Specular.floatValue == 2)
                    {
                        MGUI.Vector3Field(_LightDir, "Light Direction", false);
                    }
                    me.ShaderProperty(_SpecStrength, "Strength");
                    me.ShaderProperty(_SpecTint, "Tint");
                    MGUI.ToggleGroupEnd();
                });
            };
            Foldouts.Foldout("REFLECTIONS & SPECULAR", foldouts, reflSpecTabButtons, mat, me, reflSpecTabAction);

            // Flow Mapping
            flowTabButtons.Add(() => { ResetFlowMapping(); }, MGUI.resetLabel);
            Action flowTabAction = () => {
                me.ShaderProperty(_FlowToggle, "Enable");
                MGUI.Space4();
                MGUI.PropertyGroup(() => {
                    MGUI.ToggleGroup(_FlowToggle.floatValue == 0);
                    me.TexturePropertySingleLine(flowLabel, _FlowMap);
                    MGUI.Vector2Field(_FlowMapScale, "Scale");
                    me.ShaderProperty(_FlowSpeed, "Speed");
                    me.ShaderProperty(_FlowStrength, "Strength");
                    MGUI.ToggleGroupEnd();
                });
            };
            Foldouts.Foldout("FLOW MAPPING", foldouts, flowTabButtons, mat, me, flowTabAction);

            // Vertex Offset
            vertTabButtons.Add(() => { ResetVertOffset(); }, MGUI.resetLabel);
            Action vertTabAction = () => {
                me.ShaderProperty(_VertOffsetMode, "Mode");
                MGUI.Space4();
                MGUI.ToggleGroup(_VertOffsetMode.floatValue == 0);
                if (_VertOffsetMode.floatValue == 1)
                {
                    MGUI.PropertyGroup(() => {
                        me.TexturePropertySingleLine(noiseLabel, _NoiseTex);
                        me.ShaderProperty(_NoiseTexBlur, "Blur");
                        MGUI.Vector2Field(_NoiseTexScale, "Scale");
                        MGUI.Vector2Field(_NoiseTexScroll, "Scrolling");
                    });
                    MGUI.PropertyGroup(() => {
                        MGUI.Vector3Field(_Offset, "Strength", false);
                        me.ShaderProperty(_WaveHeight, "Strength Multiplier");
                        MGUI.SliderMinMax(_VertRemapMin, _VertRemapMax, -1f, 1f, "Remap", 1);
                    });
                }
                else if (_VertOffsetMode.floatValue == 2)
                {
                    MGUI.BoldLabel("Global");
                    MGUI.PropertyGroup(() => {
                        me.ShaderProperty(_WaveStrengthGlobal, "Strength");
                        me.ShaderProperty(_WaveScaleGlobal, "Scale");
                        me.ShaderProperty(_WaveSpeedGlobal, "Speed");
                    });
                    MGUI.BoldLabel("Wave 1");
                    MGUI.PropertyGroup(() => {
                        me.ShaderProperty(_WaveStrength0, "Strength");
                        me.ShaderProperty(_WaveScale0, "Scale");
                        me.ShaderProperty(_WaveSpeed0, "Speed");
                        me.ShaderProperty(_WaveDirection0, "Direction");
                    });
                    MGUI.BoldLabel("Wave 2");
                    MGUI.PropertyGroup(() => {
                        me.ShaderProperty(_WaveStrength1, "Strength");
                        me.ShaderProperty(_WaveScale1, "Scale");
                        me.ShaderProperty(_WaveSpeed1, "Speed");
                        me.ShaderProperty(_WaveDirection1, "Direction");
                    });
                    MGUI.BoldLabel("Wave 3");
                    MGUI.PropertyGroup(() => {
                        me.ShaderProperty(_WaveStrength2, "Strength");
                        me.ShaderProperty(_WaveScale2, "Scale");
                        me.ShaderProperty(_WaveSpeed2, "Speed");
                        me.ShaderProperty(_WaveDirection2, "Direction");
                    });
                    MGUI.BoldLabel("Turbulence");
                    MGUI.PropertyGroup(() => {
                        me.ShaderProperty(_Turbulence, Tips.turbulence);
                        me.ShaderProperty(_TurbulenceSpeed, "Speed");
                        me.ShaderProperty(_TurbulenceScale, "Scale");
                    });
                }
                MGUI.ToggleGroupEnd();
            };
            Foldouts.Foldout("VERTEX OFFSET", foldouts, vertTabButtons, mat, me, vertTabAction);

            // Caustics
            causticsTabButtons.Add(() => { ResetCaustics(); }, MGUI.resetLabel);
            Action causticsTabAction = () => {
                me.ShaderProperty(_CausticsToggle, "Enable");
                MGUI.ToggleGroup(_CausticsToggle.floatValue == 0);
                MGUI.Space4();
                MGUI.PropertyGroup(() => {
                    me.ShaderProperty(_CausticsOpacity, "Strength");
                    me.ShaderProperty(_CausticsDisp, "Phase");
                    me.ShaderProperty(_CausticsSpeed, "Speed");
                    me.ShaderProperty(_CausticsScale, "Scale");
                    me.ShaderProperty(_CausticsFade, Tips.causticsFade);
                    MGUI.Vector3Field(_CausticsRotation, "Rotation", false);
                });
                MGUI.PropertyGroup(() => {
                    me.ShaderProperty(_CausticsDistortion, "Distortion Strength");
                    me.ShaderProperty(_CausticsDistortionScale, "Distortion Scale");
                    MGUI.Vector2Field(_CausticsDistortionSpeed, "Distortion Speed");
                });
                MGUI.ToggleGroupEnd();
            };
            Foldouts.Foldout("CAUSTICS", foldouts, causticsTabButtons, mat, me, causticsTabAction);

            // Foam
            foamTabButtons.Add(() => { ResetFoam(); }, MGUI.resetLabel);
            Action foamTabAction = () => {
                me.ShaderProperty(_FoamToggle, "Enable");
                MGUI.Space4();
                MGUI.ToggleGroup(_FoamToggle.floatValue == 0);
                MGUI.PropertyGroup(() => {
                    me.TexturePropertySingleLine(foamLabel, _FoamTex, _FoamColor, _FoamStochasticToggle);
                    MGUI.TexPropLabel(Tips.stochasticLabel, 172);
                    MGUI.Space2();
                    MGUI.Vector2Field(_FoamTexScale, "Scale");
                    MGUI.Vector2Field(_FoamTexScroll, "Scrolling");
                    me.ShaderProperty(_FoamOffset, Tips.parallaxOffsetLabel);
                    me.ShaderProperty(_FoamDistortionStrength, "Distortion Strength");
                    MGUI.ToggleFloat(me, Tips.foamNormal, _FoamNormalToggle, _FoamNormalStrength);
                });
                MGUI.PropertyGroup(() => {
                    me.TexturePropertySingleLine(noiseLabel, _FoamNoiseTex);
                    MGUI.Vector2Field(_FoamNoiseTexScale, "Scale");
                    MGUI.Vector2Field(_FoamNoiseTexScroll, "Scrolling");
                    me.ShaderProperty(_FoamNoiseTexStrength, Tips.foamNoiseTexStrength);
                    me.ShaderProperty(_FoamNoiseTexCrestStrength, Tips.foamNoiseTexCrestStrength);
                });
                MGUI.PropertyGroup(() => {
                    me.ShaderProperty(_FoamRoughness, Tips.foamRoughness);
                    me.ShaderProperty(_FoamPower, Tips.foamPower);
                    me.ShaderProperty(_FoamOpacity, Tips.foamOpacity);
                    me.ShaderProperty(_FoamCrestStrength, Tips.foamCrestStrength);
                    me.ShaderProperty(_FoamCrestThreshold, Tips.foamCrestThreshold);
                });
                MGUI.ToggleGroupEnd();
            };
            Foldouts.Foldout("FOAM", foldouts, foamTabButtons, mat, me, foamTabAction);

            // Depth Fog
            fogTabButtons.Add(() => { ResetFog(); }, MGUI.resetLabel);
            Action fogTabAction = () => {
                me.ShaderProperty(_FogToggle, "Enable");
                MGUI.Space4();
                MGUI.PropertyGroup(() => {
                    MGUI.ToggleGroup(_FogToggle.floatValue == 0);
                    me.ShaderProperty(_FogTint, "Color");
                    me.ShaderProperty(_FogPower, "Power");
                    MGUI.ToggleGroupEnd();
                });
            };
            Foldouts.Foldout("DEPTH FOG", foldouts, fogTabButtons, mat, me, fogTabAction);

            // Edge Fade
            edgeFadeTabButtons.Add(() => { ResetEdgeFade(); }, MGUI.resetLabel);
            Action edgeFadeTabAction = () => {
                me.ShaderProperty(_EdgeFadeToggle, "Enable");
                MGUI.Space4();
                MGUI.PropertyGroup(() => {
                    MGUI.ToggleGroup(_EdgeFadeToggle.floatValue == 0);
                    me.ShaderProperty(_EdgeFadePower, "Power");
                    me.ShaderProperty(_EdgeFadeOffset, "Offset");
                    MGUI.ToggleGroupEnd();
                });
            };
            Foldouts.Foldout("EDGE FADE", foldouts, edgeFadeTabButtons, mat, me, edgeFadeTabAction);

            // Rain
            rainTabButtons.Add(() => { ResetRain(); }, MGUI.resetLabel);
            Action rainTabAction = () => {
                me.ShaderProperty(_RainToggle, "Enable");
                MGUI.Space4();
                MGUI.PropertyGroup(() => {
                    MGUI.ToggleGroup(_RainToggle.floatValue == 0);
                    me.ShaderProperty(_RippleStr, "Strength");
                    me.ShaderProperty(_RippleSpeed, "Speed");
                    me.ShaderProperty(_RippleScale, "Scale");
                    MGUI.ToggleGroupEnd();
                });
            };
            Foldouts.Foldout("RAIN", foldouts, rainTabButtons, mat, me, rainTabAction);
        }
        ApplyMaterialSettings(mat);

        GUILayout.Space(20);
        float buttonSize = 35f;
        Rect  footerRect = EditorGUILayout.GetControlRect();

        footerRect.x     += (MGUI.GetInspectorWidth() / 2f) - buttonSize - 5f;
        footerRect.width  = buttonSize;
        footerRect.height = buttonSize;
        if (GUI.Button(footerRect, MGUI.patIconTex))
        {
            Application.OpenURL("https://www.patreon.com/mochieshaders");
        }
        footerRect.x += buttonSize + 5f;
        footerRect.y += 17f;
        GUIStyle formatting = new GUIStyle();

        formatting.fontSize  = 15;
        formatting.fontStyle = FontStyle.Bold;
        if (EditorGUIUtility.isProSkin)
        {
            formatting.normal.textColor = new Color(0.8f, 0.8f, 0.8f, 1);
            formatting.hover.textColor  = new Color(0.8f, 0.8f, 0.8f, 1);
            GUI.Label(footerRect, versionLabel, formatting);
            footerRect.y     += 20f;
            footerRect.x     -= 35f;
            footerRect.width  = 70f;
            footerRect.height = 70f;
            GUI.Label(footerRect, MGUI.mochieLogoPro);
            GUILayout.Space(90);
        }
        else
        {
            GUI.Label(footerRect, versionLabel, formatting);
            footerRect.y     += 20f;
            footerRect.x     -= 35f;
            footerRect.width  = 70f;
            footerRect.height = 70f;
            GUI.Label(footerRect, MGUI.mochieLogo);
            GUILayout.Space(90);
        }
    }
예제 #16
0
    public override void OnGUI(MaterialEditor me, MaterialProperty[] props)
    {
        if (!me.isVisible)
        {
            return;
        }

        ClearDictionaries();

        foreach (var property in GetType().GetFields(bindingFlags))
        {
            if (property.FieldType == typeof(MaterialProperty))
            {
                property.SetValue(this, FindProperty(property.Name, props));
            }
        }
        if (_DstBlend.floatValue == 0)
        {
            _DstBlend.floatValue = 10;
        }
        Material mat = (Material)me.target;

        if (m_FirstTimeApply)
        {
            CacheRenderersUsingThisMaterial(mat);
            m_FirstTimeApply = false;
        }

        header = "ParticleHeader_Pro";
        if (!EditorGUIUtility.isProSkin)
        {
            header = "ParticleHeader";
        }

        Texture2D headerTex    = (Texture2D)Resources.Load(header, typeof(Texture2D));
        Texture2D collapseIcon = (Texture2D)Resources.Load("CollapseIcon", typeof(Texture2D));

        GUILayout.Label(headerTex);
        MGUI.Space4();

        List <ParticleSystemVertexStream> streams = new List <ParticleSystemVertexStream>();

        streams.Add(ParticleSystemVertexStream.Position);
        streams.Add(ParticleSystemVertexStream.UV);
        streams.Add(ParticleSystemVertexStream.AnimBlend);
        streams.Add(ParticleSystemVertexStream.Custom1X);
        streams.Add(ParticleSystemVertexStream.Center);
        streams.Add(ParticleSystemVertexStream.Color);

        string warnings = "";
        List <ParticleSystemVertexStream> rendererStreams = new List <ParticleSystemVertexStream>();

        foreach (ParticleSystemRenderer renderer in m_RenderersUsingThisMaterial)
        {
            if (renderer != null)
            {
                renderer.GetActiveVertexStreams(rendererStreams);
                bool streamsValid = rendererStreams.SequenceEqual(streams);
                if (!streamsValid)
                {
                    warnings += "  " + renderer.name + "\n";
                }
            }
        }

        EditorGUI.BeginChangeCheck(); {
            foreach (var obj in _BlendMode.targets)
            {
                ApplyMaterialSettings((Material)obj);
            }

            if (!foldouts.ContainsKey(mat))
            {
                foldouts.Add(mat, toggles);
            }

            // -----------------
            // Render Settings
            // -----------------
            baseTabButtons.Add(() => { Toggles.CollapseFoldouts(mat, foldouts, 1); }, MGUI.collapseLabel);
            baseTabButtons.Add(() => { ResetBase(); }, MGUI.resetLabel);
            Action baseTabAction = () => {
                if (warnings != "")
                {
                    EditorGUILayout.HelpBox("Incorrect or missing vertex streams detected:\n" + warnings, MessageType.Warning, true);
                    if (GUILayout.Button(applyStreamsText, EditorStyles.miniButton))
                    {
                        foreach (ParticleSystemRenderer renderer in m_RenderersUsingThisMaterial)
                        {
                            if (renderer != null)
                            {
                                if (renderer != null)
                                {
                                    renderer.SetActiveVertexStreams(streams);
                                }
                            }
                        }
                    }
                }

                // Blending mode dropdown
                MGUI.PropertyGroup(() => {
                    me.RenderQueueField();
                    me.ShaderProperty(_BlendMode, "Blending Mode");
                    me.ShaderProperty(_Culling, "Culling");
                    me.ShaderProperty(_ZTest, "ZTest");
                });
                MGUI.PropertyGroup(() => {
                    me.ShaderProperty(_Opacity, "Opacity");
                    MGUI.ToggleSlider(me, "Cutout", _IsCutout, _Cutoff);
                    MGUI.ToggleSlider(me, Tips.falloffMode, _Softening, _SoftenStr);
                    me.ShaderProperty(_FlipbookBlending, Tips.flipbookBlending);
                });
                MGUI.PropertyGroup(() => {
                    me.TexturePropertySingleLine(texLabel, _MainTex, _Color);
                    me.TexturePropertySingleLine(tex2Label, _SecondTex, _SecondColor, _SecondTex.textureValue ? _TexBlendMode : null);
                    if (_SecondTex.textureValue)
                    {
                        MGUI.TexPropLabel("Blending", 113);
                    }
                });
            };
            Foldouts.Foldout("BASE", foldouts, baseTabButtons, mat, me, baseTabAction);

            // Filtering
            filterTabButtons.Add(() => { ResetFiltering(); }, MGUI.resetLabel);
            Action filterTabAction = () => {
                me.ShaderProperty(_Filtering, "Enable");
                MGUI.Space4();
                MGUI.PropertyGroup(() => {
                    MGUI.ToggleGroup(_Filtering.floatValue == 0);
                    me.ShaderProperty(_AutoShift, Tips.autoShift);
                    if (_AutoShift.floatValue == 1)
                    {
                        me.ShaderProperty(_AutoShiftSpeed, "Speed");
                    }
                    else
                    {
                        me.ShaderProperty(_Hue, "Hue");
                    }
                    me.ShaderProperty(_Saturation, "Saturation");
                    me.ShaderProperty(_Brightness, "Brightness");
                    me.ShaderProperty(_Contrast, "Contrast");
                    me.ShaderProperty(_HDR, "HDR");
                    MGUI.ToggleGroupEnd();
                });
            };
            Foldouts.Foldout("FILTERING", foldouts, filterTabButtons, mat, me, filterTabAction);

            // Distortion
            distortTabButtons.Add(() => { ResetDistortion(); }, MGUI.resetLabel);
            Action distortTabAction = () => {
                me.ShaderProperty(_Distortion, "Enable");
                MGUI.Space4();
                MGUI.ToggleGroup(_Distortion.floatValue == 0);
                MGUI.PropertyGroup(() => {
                    me.TexturePropertySingleLine(normalLabel, _NormalMap, _DistortMainTex);
                    MGUI.TexPropLabel("Distort UVs", 124);
                    MGUI.Vector2Field(_NormalMapScale, "Scale");
                    MGUI.SpaceN3();
                    MGUI.Vector2Field(_DistortionSpeed, "Scrolling");
                    me.ShaderProperty(_DistortionStr, "Strength");
                    me.ShaderProperty(_DistortionBlend, "Blend");
                    MGUI.ToggleGroupEnd();
                });
            };
            Foldouts.Foldout("DISTORTION", foldouts, distortTabButtons, mat, me, distortTabAction);

            // Pulse
            pulseTabButtons.Add(() => { ResetPulse(); }, MGUI.resetLabel);
            Action pulseTabAction = () => {
                me.ShaderProperty(_Pulse, "Enable");
                MGUI.Space4();
                MGUI.PropertyGroup(() => {
                    MGUI.ToggleGroup(_Pulse.floatValue == 0);
                    me.ShaderProperty(_Waveform, "Waveform");
                    me.ShaderProperty(_PulseStr, "Strength");
                    me.ShaderProperty(_PulseSpeed, "Speed");
                    MGUI.ToggleGroupEnd();
                });
            };
            Foldouts.Foldout("PULSE", foldouts, pulseTabButtons, mat, me, pulseTabAction);

            // Falloff
            falloffTabButtons.Add(() => { ResetFalloff(); }, MGUI.resetLabel);
            Action falloffTabAction = () => {
                me.ShaderProperty(_Falloff, "Enable");
                MGUI.Space4();
                MGUI.PropertyGroup(() => {
                    MGUI.ToggleGroup(_Falloff.floatValue == 0);
                    me.ShaderProperty(_FalloffMode, Tips.falloffMode);
                    MGUI.Space4();
                    me.ShaderProperty(_MinRange, "Far Min Range");
                    me.ShaderProperty(_MaxRange, "Far Max Range");
                    MGUI.Space4();
                    me.ShaderProperty(_NearMinRange, "Near Min Range");
                    me.ShaderProperty(_NearMaxRange, "Near Max Range");
                    MGUI.ToggleGroupEnd();
                });
            };
            Foldouts.Foldout("FALLOFF", foldouts, falloffTabButtons, mat, me, falloffTabAction);
        }

        GUILayout.Space(20);
        float buttonSize = 35f;
        Rect  footerRect = EditorGUILayout.GetControlRect();

        footerRect.x     += (MGUI.GetInspectorWidth() / 2f) - buttonSize - 5f;
        footerRect.width  = buttonSize;
        footerRect.height = buttonSize;
        if (GUI.Button(footerRect, MGUI.patIconTex))
        {
            Application.OpenURL("https://www.patreon.com/mochieshaders");
        }
        footerRect.x += buttonSize + 5f;
        footerRect.y += 17f;
        GUIStyle formatting = new GUIStyle();

        formatting.fontSize  = 15;
        formatting.fontStyle = FontStyle.Bold;
        if (EditorGUIUtility.isProSkin)
        {
            formatting.normal.textColor = new Color(0.8f, 0.8f, 0.8f, 1);
            formatting.hover.textColor  = new Color(0.8f, 0.8f, 0.8f, 1);
            GUI.Label(footerRect, versionLabel, formatting);
            footerRect.y     += 20f;
            footerRect.x     -= 35f;
            footerRect.width  = 70f;
            footerRect.height = 70f;
            GUI.Label(footerRect, MGUI.mochieLogoPro);
            GUILayout.Space(90);
        }
        else
        {
            GUI.Label(footerRect, versionLabel, formatting);
            footerRect.y     += 20f;
            footerRect.x     -= 35f;
            footerRect.width  = 70f;
            footerRect.height = 70f;
            GUI.Label(footerRect, MGUI.mochieLogo);
            GUILayout.Space(90);
        }
    }
 void DoPrimaryArea(Material material)
 {
     MGUI.PropertyGroup(() => {
         me.TexturePropertySingleLine(Tips.albedoText, albedoMap, albedoColor);
         if (useAlphaMask.floatValue == 1 && blendMode.floatValue > 0)
         {
             me.TexturePropertySingleLine(Tips.alphaMaskText, alphaMask, alphaMaskOpacity, alphaMaskChannel);
         }
         GUIContent roughLabel    = Tips.roughnessText;
         GUIContent roughStrLabel = Tips.roughnessPackedText;
         if (useSmoothness.floatValue == 1)
         {
             roughLabel.text    = "Smoothness";
             roughStrLabel.text = "Smoothness Strength";
         }
         else
         {
             roughLabel.text    = "Roughness";
             roughStrLabel.text = "Roughness Strength";
         }
         if (workflow.floatValue == 1)
         {
             me.TexturePropertySingleLine(Tips.packedMapText, packedMap);
             MGUI.sRGBWarning(packedMap);
             if (packedMap.textureValue)
             {
                 MGUI.PropertyGroupLayer(() => {
                     MGUI.SpaceN3();
                     me.ShaderProperty(metallicChannel, "Metallic");
                     me.ShaderProperty(roughChannel, roughLabel.text);
                     me.ShaderProperty(occlusionChannel, "Occlusion");
                     if (useHeight.floatValue == 1 && samplingMode.floatValue < 3)
                     {
                         me.ShaderProperty(heightChannel, "Height");
                     }
                     MGUI.SpaceN3();
                 });
                 MGUI.PropertyGroupLayer(() => {
                     MGUI.SpaceN2();
                     MGUI.ToggleSlider(me, Tips.metallicPackedText, metalMult, metallic);
                     MGUI.ToggleSlider(me, roughStrLabel, roughMult, roughness);
                     MGUI.ToggleSlider(me, Tips.occlusionPackedText, occMult, occlusionStrength);
                     if (useHeight.floatValue == 1 && samplingMode.floatValue < 3)
                     {
                         MGUI.ToggleSlider(me, Tips.heightMapPackedText, heightMult, heightMapScale);
                         me.ShaderProperty(steps, Tips.stepsText);
                         me.ShaderProperty(parallaxOfs, Tips.parallaxOfsText);
                     }
                     MGUI.SpaceN2();
                 });
                 MGUI.Space8();
             }
             if (useHeight.floatValue == 1 && samplingMode.floatValue < 3)
             {
                 me.TexturePropertySingleLine(Tips.heightMaskText, parallaxMask);
             }
         }
         else
         {
             me.TexturePropertySingleLine(Tips.metallicMapText, metallicMap, metallic);
             MGUI.sRGBWarning(metallicMap);
             me.TexturePropertySingleLine(roughLabel, roughnessMap, roughness);
             MGUI.sRGBWarning(roughnessMap);
             me.TexturePropertySingleLine(Tips.occlusionText, occlusionMap, occlusionMap.textureValue ? occlusionStrength : null);
             MGUI.sRGBWarning(occlusionMap);
             if (samplingMode.floatValue < 3)
             {
                 me.TexturePropertySingleLine(Tips.heightMapText, heightMap, heightMap.textureValue ? heightMapScale : null);
                 MGUI.sRGBWarning(heightMap);
                 if (heightMap.textureValue)
                 {
                     me.TexturePropertySingleLine(Tips.heightMaskText, parallaxMask);
                     me.ShaderProperty(steps, Tips.stepsText, 2);
                     me.ShaderProperty(parallaxOfs, Tips.parallaxOfsText, 2);
                 }
             }
         }
         me.TexturePropertySingleLine(Tips.normalMapText, bumpMap, bumpMap.textureValue ? bumpScale : null);
         me.TexturePropertySingleLine(Tips.reflOverrideText, reflOverride);
         me.TexturePropertySingleLine(Tips.reflCubeText, reflCube, reflCube.textureValue ? cubeThreshold : null);
         me.TexturePropertySingleLine(Tips.detailMaskText, detailMask, detailMask.textureValue ? detailMaskChannel : null);
         DoEmissionArea(material);
     });
 }
예제 #18
0
    void ShowBottomMenu()
    {
        // Left button
        if (MGUI.HoveredButton(new Rect(MGUI.Margin * 3, Screen.height - (Screen.width / 6), Screen.width / 7, Screen.width / 7), MainMenuButton))
        {
            switch (gameManager.GetGameState())
            {
            case GameManager.GameState.Paused:
                StartCoroutine(LoadMainMenu(audioSource));
                break;

            case GameManager.GameState.Over:
                StartCoroutine(LoadMainMenu(audio));
                break;
            }
        }

        // Middle button
        if (MGUI.HoveredButton(new Rect(Screen.width - (Screen.width / 2 + Screen.width / 14), Screen.height - (Screen.width / 6), Screen.width / 7, Screen.width / 7), Restart))
        {
            gameManager.RestartGame();
        }

        // Right button
        if (
            (gameManager.GetGameState() == GameManager.GameState.Over) &&
            (gameManager.GetMedal() == GameManager.Medal.None)
            )
        {
            GUI.enabled = false;               // Resume button is grayed out on the loss screen
        }
        if (MGUI.HoveredButton(new Rect(Screen.width - (Screen.width / 3 - Screen.width / 7), Screen.height - (Screen.width / 6), Screen.width / 7, Screen.width / 7), PlayButton))
        {
            if (gameManager.GetGameState() == GameManager.GameState.Paused)
            {
                gameManager.UnpauseGame();
            }
            if ((gameManager.GetGameState() == GameManager.GameState.Over))
            {
                StartCoroutine(WaitAndLoadNext());
            }
        }
        GUI.enabled = true;

        if (gameManager.GetGameState() == GameManager.GameState.Paused)
        {
            if (isSounON == "true")
            {
                if (MGUI.HoveredButton(creditsRect, soundON))
                {
                    PlayerPrefs.SetString("sound", "false");
                    isSounON = "false";
                    EnableSound();
                }
            }
            else
            {
                if (MGUI.HoveredButton(creditsRect, soundOff))
                {
                    PlayerPrefs.SetString("sound", "true");
                    isSounON = "true";
                    EnableSound();
                }
            }
        }
    }
    void DoUVArea()
    {
        bool needsHeightMaskUV = (((workflow.floatValue > 0 && useHeight.floatValue == 1) || (workflow.floatValue == 0 && heightMap.textureValue)) && parallaxMask.textureValue) && samplingMode.floatValue < 3;
        bool needsEmissMaskUV  = emissionEnabled && emissionMask.textureValue;
        bool needsAlphaMaskUV  = blendMode.floatValue > 0 && useAlphaMask.floatValue > 0;

        MGUI.PropertyGroup(() => {
            MGUI.BoldLabel("Primary");
            EditorGUI.BeginChangeCheck();
            MGUI.PropertyGroupLayer(() => {
                MGUI.SpaceN2();
                if (samplingMode.floatValue < 3)
                {
                    me.ShaderProperty(uvPri, Tips.uvSetLabel.text);
                    MGUI.TextureSOScroll(me, albedoMap, uv0Scroll);
                }
                else
                {
                    MGUI.TextureSO(me, albedoMap);
                }
                if (EditorGUI.EndChangeCheck())
                {
                    emissionMap.textureScaleAndOffset = albedoMap.textureScaleAndOffset;
                }
                me.ShaderProperty(uv0Rot, "Rotation");
                MGUI.SpaceN2();
            });
            MGUI.Space4();
            MGUI.BoldLabel("Detail");
            MGUI.PropertyGroupLayer(() => {
                MGUI.SpaceN2();
                if (samplingMode.floatValue < 3)
                {
                    me.ShaderProperty(uvSetSecondary, Tips.uvSetLabel.text);
                    MGUI.TextureSOScroll(me, detailAlbedoMap, uv1Scroll);
                }
                else
                {
                    MGUI.TextureSO(me, detailAlbedoMap);
                }
                me.ShaderProperty(uv1Rot, "Rotation");
                me.ShaderProperty(detailSamplingMode, Tips.detailSamplingMode);
                MGUI.SpaceN4();
            });
            if (needsHeightMaskUV)
            {
                MGUI.Space4();
                MGUI.BoldLabel("Height Mask");
                MGUI.PropertyGroupLayer(() => {
                    MGUI.SpaceN2();
                    me.ShaderProperty(uvHeightMask, Tips.uvSetLabel.text);
                    MGUI.TextureSOScroll(me, parallaxMask, uv2Scroll);
                    MGUI.SpaceN2();
                });
            }
            if (needsEmissMaskUV)
            {
                MGUI.Space4();
                MGUI.BoldLabel("Emission Mask");
                MGUI.PropertyGroupLayer(() => {
                    MGUI.SpaceN2();
                    me.ShaderProperty(uvEmissMask, Tips.uvSetLabel.text);
                    MGUI.TextureSOScroll(me, emissionMask, uv3Scroll);
                    me.ShaderProperty(uv3Rot, "Rotation");
                    MGUI.SpaceN2();
                });
            }
            if (needsAlphaMaskUV)
            {
                MGUI.Space4();
                MGUI.BoldLabel("Alpha Mask");
                MGUI.PropertyGroupLayer(() => {
                    MGUI.SpaceN2();
                    me.ShaderProperty(uvAlphaMask, Tips.uvSetLabel.text);
                    MGUI.TextureSOScroll(me, alphaMask, uv4Scroll);
                    me.ShaderProperty(uv4Rot, "Rotation");
                    MGUI.SpaceN2();
                });
            }
        });
    }
예제 #20
0
    void OnGUI()
    {
        for (int i = 0; i < gamesNumber; i++)
        {
            if (MGUI.HoveredButton(gameSelectionRects[i], gameSelectionTextures[i]))
            {
                callOptions = false;
                SelectGame(i);
            }
        }

        if (selectedGame > -1 && callOptions == false)
        {
            GUI.DrawTexture(gamePreviewRect, previewTextures[selectedGame]);

            if (MGUI.HoveredButton(gamePreviewButtonRect, playButtonsTextures[selectedGame]))
            {
                Application.LoadLevel("TutorialScene");
            }
        }
        else if (callOptions == true)
        {
            GUI.DrawTexture(gamePreviewRect, previewTextures[1]);
            if (Sound == true)
            {
                if (MGUI.HoveredButton(soundButtonRect, soundON))
                {
                    PlayerPrefs.SetString("sound", "false");
                    Sound = false;
                    EnableSound();
                }
            }
            else
            {
                if (MGUI.HoveredButton(soundButtonRect, soundOff))
                {
                    PlayerPrefs.SetString("sound", "true");
                    Sound = true;
                    EnableSound();
                }
            }
            if (MGUI.HoveredButton(creditsButtonRect, credits))
            {
                Application.LoadLevel("CreditsScreen");
            }
        }
        else
        {
            GUI.DrawTexture(gameTitleRect, gameTitleTexture);
        }

        if (MGUI.HoveredButton(quitRect, gameExitTexture))
        {
            Application.Quit();
        }

        if (MGUI.HoveredButton(creditsRect, options))
        {
            callOptions = true;
        }
    }
    void DoRenderingArea(Material mat)
    {
        MGUI.PropertyGroup(() => {
            MGUI.PropertyGroupLayer(() => {
                MGUI.SpaceN2();
                if (samplingMode.floatValue != 4)
                {
                    me.ShaderProperty(culling, Tips.culling);
                }
                queueOffset.floatValue = (int)queueOffset.floatValue;
                me.ShaderProperty(queueOffset, Tips.queueOffset);
                MGUI.SpaceN1();
                MGUI.DummyProperty("Render Queue:", mat.renderQueue.ToString());
                MGUI.SpaceN4();
            });
            MGUI.Space1();
            MGUI.PropertyGroupLayer(() => {
                MGUI.SpaceN2();
                MGUI.ToggleFloat(me, Tips.useFresnel, useFresnel, fresnelStrength);
                MGUI.ToggleFloat(me, Tips.highlightsText, highlights, specularStrength);
                MGUI.ToggleFloat(me, Tips.reflectionsText, reflections, reflectionStrength);
                MGUI.ToggleFloat(me, Tips.ssrText, ssr, ssrStrength);
                if (ssr.floatValue == 1)
                {
                    me.ShaderProperty(edgeFade, Tips.edgeFadeText);
                }
                MGUI.ToggleFloat(me, Tips.reflVertexColor, reflVertexColor, reflVertexColorStrength);
                MGUI.ToggleFloat(me, Tips.reflShadows, reflShadows, reflShadowStrength);
                if (reflShadows.floatValue == 1)
                {
                    me.ShaderProperty(brightnessReflShad, "Brightness", 1);
                    me.ShaderProperty(contrastReflShad, "Contrast", 1);
                    me.ShaderProperty(hdrReflShad, "HDR", 1);
                }
                MGUI.ToggleFloat(me, Tips.gsaa, gsaa, gsaaStrength);
            });
            MGUI.Space1();
            MGUI.PropertyGroupLayer(() => {
                MGUI.SpaceN3();
                me.ShaderProperty(_BakeryMode, Tips.bakeryMode);
                me.ShaderProperty(_BAKERY_SHNONLINEAR, "Bakery Non-Linear SH");
                me.ShaderProperty(_BAKERY_LMSPEC, "Bakery Lightmap Specular");
                me.ShaderProperty(bicubicLightmap, Tips.bicubicLightmap);
                                #if LTCGI_INCLUDED
                me.ShaderProperty(ltcgi, "LTCGI");
                if (ltcgi.floatValue == 1)
                {
                    me.ShaderProperty(ltcgi_spec_off, "LTCGI Disable Specular");
                    me.ShaderProperty(ltcgi_diffuse_off, "LTCGI Disable Diffuse");
                }
                                #else
                ltcgi.floatValue = 0;
                mat.DisableKeyword("LTCGI");
                                #endif
                me.EnableInstancingField();
                MGUI.SpaceN2();
                me.DoubleSidedGIField();
                MGUI.SpaceN3();
            });

            if (ssr.floatValue == 1)
            {
                MGUI.DisplayInfo("\nScreenspace reflections in VRChat requires the \"Depth Light\" prefab found in: Assets/Mochie/Unity/Prefabs\n\nIt is also is VERY expensive, please use it sparingly!\n");
            }
            MGUI.Space1();
            // me.TexturePropertySingleLine(new GUIContent("RNM0"), _RNM0);
            // me.TexturePropertySingleLine(new GUIContent("RNM1"), _RNM1);
            // me.TexturePropertySingleLine(new GUIContent("RNM2"), _RNM2);
        });
    }
예제 #22
0
    public override void OnGUI(MaterialEditor me, MaterialProperty[] props)
    {
        Material material = (Material)me.target;

        isTransparent = material.shader.name.Contains("(Transparent)");
        foreach (var property in GetType().GetFields(bindingFlags))
        {
            if (property.FieldType == typeof(MaterialProperty))
            {
                property.SetValue(this, FindProperty(property.Name, props));
            }
        }

        EditorGUI.BeginChangeCheck(); {
            MGUI.BoldLabel("Image");
            MGUI.Space2();
            if (_FlipbookMode.floatValue == 0)
            {
                me.TexturePropertySingleLine(mainTex, _MainTex, _FlipbookMode);
                MGUI.TexPropLabel("Flipbook", 105);
                me.ShaderProperty(_Color, "Color");
                if (_MainTex.textureValue)
                {
                    MGUI.TextureSOScroll(me, _MainTex, _UVScroll);
                    MGUI.Space6();
                }
            }
            else
            {
                me.TexturePropertySingleLine(flipbookTex, _Flipbook, _FlipbookMode);
                MGUI.TexPropLabel("Flipbook", 105);
                if (_Flipbook.textureValue)
                {
                    MGUI.TextureSO(me, _MainTex);
                    MGUI.SpaceN2();
                    me.ShaderProperty(_FPS, "FPS");
                    MGUI.Space6();
                }
            }
            MGUI.SetKeyword(material, "_FLIPBOOK_MODE", material.GetInt("_FlipbookMode") == 1);
            me.TexturePropertySingleLine(smoothTex, _SpecGlossMap, _Glossiness);
            MGUI.TextureSO(me, _SpecGlossMap, _SpecGlossMap.textureValue);
            MGUI.SetKeyword(material, "_SPECGLOSSMAP", material.GetTexture("_SpecGlossMap"));
            MGUI.Space4();

            MGUI.SetKeyword(material, "_EMISSION", true);
            me.ShaderProperty(_EmissionIntensity, "Emission Strength");
            me.ShaderProperty(_LightmapEmissionScale, "Lightmap Emission Strength");
            me.ShaderProperty(_BoostAmount, "Boost Multiplier");
            me.ShaderProperty(_BoostThreshold, "Boost Threshold");
            material.globalIlluminationFlags = MaterialGlobalIlluminationFlags.RealtimeEmissive;
            MGUI.Space4();

            MGUI.BoldLabel("Panel");
            MGUI.Space2();
            me.TexturePropertySingleLine(RGBMatrixTex, _RGBSubPixelTex);
            MGUI.TextureSO(me, _RGBSubPixelTex, _RGBSubPixelTex.textureValue);
            me.ShaderProperty(_Backlight, "Backlit");
            MGUI.Space4();
            MGUI.BoldLabel("Render Settings");
            if (isTransparent)
            {
                me.ShaderProperty(_ZWrite, "ZWrite");
            }
            me.RenderQueueField();
            MGUI.Space8();
        }

        MGUI.Space20();
        float buttonSize = 35f;
        Rect  footerRect = EditorGUILayout.GetControlRect();

        footerRect.x     += (MGUI.GetInspectorWidth() / 2f) - buttonSize - 5f;
        footerRect.width  = buttonSize;
        footerRect.height = buttonSize;
        if (GUI.Button(footerRect, MGUI.patIconTex))
        {
            Application.OpenURL("https://www.patreon.com/mochieshaders");
        }
        footerRect.x += buttonSize + 5f;
        footerRect.y += 17f;
        GUIStyle formatting = new GUIStyle();

        formatting.fontSize  = 15;
        formatting.fontStyle = FontStyle.Bold;
        if (EditorGUIUtility.isProSkin)
        {
            formatting.normal.textColor = new Color(0.8f, 0.8f, 0.8f, 1);
            formatting.hover.textColor  = new Color(0.8f, 0.8f, 0.8f, 1);
            GUI.Label(footerRect, versionLabel, formatting);
            footerRect.y     += 20f;
            footerRect.x     -= 35f;
            footerRect.width  = 70f;
            footerRect.height = 70f;
            GUI.Label(footerRect, MGUI.mochieLogoPro);
            GUILayout.Space(90);
        }
        else
        {
            GUI.Label(footerRect, versionLabel, formatting);
            footerRect.y     += 20f;
            footerRect.x     -= 35f;
            footerRect.width  = 70f;
            footerRect.height = 70f;
            GUI.Label(footerRect, MGUI.mochieLogo);
            GUILayout.Space(90);
        }
    }
    public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props)
    {
        me = materialEditor;
        Material material = materialEditor.target as Material;

        FindProperties(props, material);

        // Make sure that needed setup (ie keywords/renderqueue) are set up if we're switching some existing
        // material to a standard shader.
        // Do this before any GUI code has been issued to prevent layout issues in subsequent GUILayout statements (case 780071)
        if (m_FirstTimeApply)
        {
            MaterialChanged(material);
            m_FirstTimeApply = false;
        }

        // Add mat to foldout dictionary if it isn't in there yet
        if (!foldouts.ContainsKey(material))
        {
            foldouts.Add(material, toggles);
        }

        // Use default labelWidth
        EditorGUIUtility.labelWidth = 0f;

        // Detect any changes to the material
        EditorGUI.BeginChangeCheck(); {
            // Core Shader Variant
            MGUI.BoldLabel("Shader Variant");
            DoVariantArea();
            MGUI.Space2();

            // Primary properties
            MGUI.BoldLabel("Primary Textures");
            DoPrimaryArea(material);
            MGUI.Space2();

            // Detail properties
            DoDetailArea();
            MGUI.Space4();

            // Emission
            // bool emissFoldout = Foldouts.DoSmallFoldoutBold(foldouts, material, me, "Emission");
            // if (emissFoldout){
            //  DoEmissionArea(material);
            // }

            // Rim
            bool rimFoldout = Foldouts.DoSmallFoldoutBold(foldouts, material, me, "Rim");
            if (rimFoldout)
            {
                DoRimArea();
            }

            // Subsurface
            bool subsurfaceArea = Foldouts.DoSmallFoldoutBold(foldouts, material, me, "Subsurface Scattering");
            if (subsurfaceArea)
            {
                DoSubsurfaceArea();
            }

            // Filtering
            bool filteringFoldout = Foldouts.DoSmallFoldoutBold(foldouts, material, me, "Filtering");
            if (filteringFoldout)
            {
                DoFilteringArea();
            }

            // UVs
            bool uvFoldout = Foldouts.DoSmallFoldoutBold(foldouts, material, me, "UVs");
            if (uvFoldout)
            {
                DoUVArea();
            }

            // Rendering options
            bool renderFoldout = Foldouts.DoSmallFoldoutBold(foldouts, material, me, "Render Settings");
            if (renderFoldout)
            {
                DoRenderingArea(material);
            }

            // Watermark and version display
            DoFooter();

            // Setup stuff for decal mode
            SetDecalRendering(material);
        }

        // Ensure settings are applied correctly if anything changed
        if (EditorGUI.EndChangeCheck())
        {
            foreach (var obj in blendMode.targets)
            {
                MaterialChanged((Material)obj);
            }
        }

        MGUI.Space8();
    }