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); }
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; } }