public EmhCompose(ExpressionsMenuHierarchyCompiler compiler) { _mainAssetContainer = compiler.generatedMenu; _defaultIconOptional = compiler.defaultIcon; _mainMenu = compiler.mainMenu; _generatedMenu = compiler.generatedMenu; _expressionParametersOptional = compiler.expressionParameters; _discardTags = !string.IsNullOrEmpty(compiler.discardTags) ? compiler.discardTags.Split(',') : new string[0]; _compilerDiscardType = compiler.discardType == Emh.EmhDiscardType.Default ? Emh.EmhDiscardType.GrayOut : compiler.discardType; _discardGrayOut = compiler.discardGrayOut == null ? new Material(Shader.Find("Hai/ExpressionsMenuHierarchyEditorGrayOut")) : compiler.discardGrayOut; // Last operation (depends on the previous lines) _discardApplicable = compiler.autoDiscard && (_expressionParametersOptional != null || _discardTags.Length != 0); }
private void CreateDiscardMenuItem(ExpressionsMenuHierarchyItem item, VRCExpressionsMenu destination, Emh.EmhDiscardType currentDiscard) { switch (currentDiscard) { case Emh.EmhDiscardType.BlankOut: destination.controls.Add(new VRCExpressionsMenu.Control { type = VRCExpressionsMenu.Control.ControlType.Button, name = "", icon = BlankIcon(), value = 1, parameter = new VRCExpressionsMenu.Control.Parameter { name = "" }, subMenu = null, subParameters = new VRCExpressionsMenu.Control.Parameter[0], labels = new VRCExpressionsMenu.Control.Label[0], }); break; case Emh.EmhDiscardType.GrayOut: var iconNullable = item.icon != null ? item.icon : _defaultIconOptional; var finalIconNullable = iconNullable != null && item.shader != null?CreateOrGetIcon(iconNullable, item.shader) : iconNullable; var grayedOutIcon = finalIconNullable != null?CreateOrGetIcon(finalIconNullable, _discardGrayOut) : null; destination.controls.Add(new VRCExpressionsMenu.Control { type = VRCExpressionsMenu.Control.ControlType.Button, name = item.ResolveName(), icon = grayedOutIcon, value = 1, parameter = new VRCExpressionsMenu.Control.Parameter { name = "" }, subMenu = null, subParameters = new VRCExpressionsMenu.Control.Parameter[0], labels = new VRCExpressionsMenu.Control.Label[0], }); break; case Emh.EmhDiscardType.Remove: case Emh.EmhDiscardType.Default: default: throw new ArgumentOutOfRangeException(); } }