Example #1
0
    protected override bool OnSetOption(int newOption, AlloyFieldDrawerArgs args)
    {
        base.OnSetOption(newOption, args);
        SpeedTreeGeometryType newMode = (SpeedTreeGeometryType)newOption;
        bool setVal = true;

        if (!string.IsNullOrEmpty(RenderQueueOrderField))
        {
            SerializedProperty custom = args.Editor.GetProperty(MaterialProperty.PropType.Float, RenderQueueOrderField);

            if (custom.floatValue > 0.5f)
            {
                setVal = false;
            }
        }

        for (int i = 0; i < args.Materials.Length; i++)
        {
            var material = args.Materials[i];

            for (int j = 0; j < s_speedTreeKeywordSettings.Length; j++)
            {
                SpeedTreeKeywordSetting setting = s_speedTreeKeywordSettings[j];
                string keyword = setting.Keyword;

                if (newMode != setting.GeometryType)
                {
                    material.DisableKeyword(keyword);
                }
                else
                {
                    material.EnableKeyword(keyword);

                    if (setVal)
                    {
                        material.renderQueue = setting.RenderQueue;
                    }
                }
            }

            material.SetInt("_GeometryType", (int)newMode);
            EditorUtility.SetDirty(material);
        }

        Undo.RecordObjects(args.Materials, "Set geometry type");
        return(true);
    }
Example #2
0
    public AlloySpeedTreeGeometryTypeDrawer(AlloyInspectorBase editor, MaterialProperty property) : base(editor, property)
    {
        // The original SpeedTree shader seemed to pick the dropdown value from
        // whichever keyword is already set on the material after import.

        // Note: Multi edit will override the _GeometryValue on other materials with whatever keywords the first material has set
        string[] keywords = editor.Target.shaderKeywords;
        property.floatValue = 0.0f;

        for (int i = 0; i < s_speedTreeKeywordSettings.Length; i++)
        {
            SpeedTreeKeywordSetting setting = s_speedTreeKeywordSettings[i];

            if (!keywords.Contains(setting.Keyword))
            {
                continue;
            }

            property.floatValue = (int)setting.GeometryType;
            break;
        }
    }