Пример #1
0
 private Action <object, object> MakeFieldCloner(Meta.Item yi)
 {
     if (yi.SetValue != null)
     {
         var cloner = cl.GetCloner(yi.Type);
         if (yi.SerializeCond != null)
         {
             return (dst, src) => {
                        var v = yi.GetValue(src);
                        if (yi.SerializeCond(src, v))
                        {
                            yi.SetValue(dst, cloner(v));
                        }
             }
         }
         ;
         else
         {
             return((dst, src) => yi.SetValue(dst, cloner(yi.GetValue(src))));
         }
     }
     else
     {
         var merger = cl.GetMerger(yi.Type);
         if (yi.SerializeCond != null)
         {
             return (dst, src) => {
                        var v = yi.GetValue(src);
                        if (yi.SerializeCond(src, v))
                        {
                            merger(yi.GetValue(dst), v);
                        }
             }
         }
         ;
         else
         {
             return((dst, src) => merger(yi.GetValue(dst), yi.GetValue(src)));
         }
     }
 }
Пример #2
0
 private Action <object> MakeReadOrMergeFunc(Meta.Item yi)
 {
     if (yi.SetValue != null)
     {
         var rf = ReadValueFunc(yi.Type);
         return(obj => yi.SetValue(obj, rf()));
     }
     else
     {
         var mf = MergeValueFunc(yi.Type);
         return(obj => mf(yi.GetValue(obj)));
     }
 }
Пример #3
0
        private void CreateOverridesWidgets(CookingRulesCollection crc, string key, Target target, Meta.Item yi, CookingRules rules, Widget overridesWidget)
        {
            Widget innerContainer;
            var    sourceFilenameText = string.IsNullOrEmpty(rules.SourceFilename)
                                ? "Default"
                                : rules.SourceFilename.Substring(The.Workspace.AssetsDirectory.Length);
            var targetName = target == null ? "" : $" ({target.Name})";
            var container  = new Widget {
                Padding = new Thickness {
                    Right = 30
                },
                Nodes =
                {
                    (innerContainer    = new Widget {
                        Layout         = new HBoxLayout(),
                    }),
                    new ThemedSimpleText(sourceFilenameText + targetName)
                    {
                        FontHeight     = 16,
                        ForceUncutText = false,
                        OverflowMode   = TextOverflowMode.Ellipsis,
                        HAlignment     = HAlignment.Right,
                        VAlignment     = VAlignment.Center,
                        MinSize        = new Vector2(100, RowHeight),
                        MaxSize        = new Vector2(500, RowHeight)
                    },
                    (new ToolbarButton {
                        Texture        = IconPool.GetTexture("Filesystem.ArrowRight"),
                        Padding        = Thickness.Zero,
                        Size           = RowHeight * Vector2.One,
                        MinMaxSize     = RowHeight * Vector2.One,
                        Clicked        = () => navigateAndSelect(rules.SourceFilename),
                    })
                },
                Layout = new HBoxLayout(),
            };

            container.CompoundPostPresenter.Add(new DelegatePresenter <Widget>((w) => {
                var topmostOverride = crc[key];
                while (
                    topmostOverride.Parent != null &&
                    !(topmostOverride.CommonRules.FieldOverrides.Contains(yi) ||
                      RulesForActiveTarget(topmostOverride).FieldOverrides.Contains(yi))
                    )
                {
                    topmostOverride = topmostOverride.Parent;
                }
                w.PrepareRendererState();
                if (target != activeTarget || rules != topmostOverride)
                {
                    Renderer.DrawLine(10.0f - 30.0f, w.Height * 0.6f, w.Width - 10.0f, w.Height * 0.6f, Color4.Black.Transparentify(0.5f), 1.0f);
                }
                else
                {
                    Renderer.DrawRect(Vector2.Right * -20.0f, w.Size, Color4.Green.Lighten(0.5f).Transparentify(0.5f));
                }
            }));
            container.Components.Add(new PropertyOverrideComponent {
                Rules    = rules,
                YuzuItem = yi,
            });
            overridesWidget.Nodes.Add(container);
            var targetRuels  = RulesForTarget(rules, target);
            var editorParams = new PropertyEditorParams(innerContainer, targetRuels, yi.Name)
            {
                ShowLabel      = false,
                PropertySetter = (owner, name, value) => {
                    yi.SetValue(owner, value);
                    targetRuels.Override(name);
                    rules.DeduceEffectiveRules(target);
                    rules.Save();
                },
                NumericEditBoxFactory = () => {
                    var r = new ThemedNumericEditBox();
                    r.MinMaxHeight           = r.Height = RowHeight;
                    r.TextWidget.VAlignment  = VAlignment.Center;
                    r.TextWidget.Padding.Top = r.TextWidget.Padding.Bottom = 0.0f;
                    return(r);
                },
                DropDownListFactory = () => {
                    var r = new ThemedDropDownList();
                    r.MinMaxHeight = r.Height = RowHeight;
                    return(r);
                },
                EditBoxFactory = () => {
                    var r = new ThemedEditBox();
                    r.MinMaxHeight           = r.Height = RowHeight;
                    r.TextWidget.Padding.Top = r.TextWidget.Padding.Bottom = 0.0f;
                    return(r);
                },
            };

            CreatePropertyEditorForType(yi, editorParams);
        }