Пример #1
0
        public override void Construct()
        {
            Border    = "border-one";
            Font      = "font10";
            TextColor = new Vector4(0, 0, 0, 1);
            OnShown  += (sender) =>
            {
                Clear();
                ResourceCombos.Clear();
                //Parent.OnClick = null;
                var titleBar = AddChild(new Gui.Widget()
                {
                    AutoLayout  = Gui.AutoLayout.DockTop,
                    MinimumSize = new Point(0, 34),
                });
                int k = 0;
                foreach (var ingredient in Data.RequiredResources)
                {
                    var resource = ResourceLibrary.GetAverageWithTag(ingredient.ResourceType);
                    titleBar.AddChild(new Gui.Widget
                    {
                        MinimumSize         = new Point(32, 32),
                        MaximumSize         = new Point(32, 32),
                        Background          = resource.GuiLayers[0],
                        AutoLayout          = AutoLayout.DockLeft,
                        Text                = ingredient.NumResources.ToString(),
                        TextHorizontalAlign = HorizontalAlign.Right,
                        TextVerticalAlign   = VerticalAlign.Bottom,
                        Font                = "font10-outline-numsonly",
                        TextColor           = Color.White.ToVector4(),
                        Tooltip             = ingredient.ResourceType.ToString()
                    });
                    if (k < Data.RequiredResources.Count - 1)
                    {
                        titleBar.AddChild(new Gui.Widget
                        {
                            MinimumSize         = new Point(16, 32),
                            MaximumSize         = new Point(16, 32),
                            AutoLayout          = AutoLayout.DockLeft,
                            Text                = "+",
                            TextHorizontalAlign = HorizontalAlign.Center,
                            TextVerticalAlign   = VerticalAlign.Bottom,
                            Font                = "font10"
                        });
                    }
                    else
                    {
                        titleBar.AddChild(new Gui.Widget
                        {
                            MinimumSize         = new Point(16, 32),
                            MaximumSize         = new Point(16, 32),
                            AutoLayout          = AutoLayout.DockLeft,
                            Text                = ">>",
                            TextHorizontalAlign = HorizontalAlign.Center,
                            TextVerticalAlign   = VerticalAlign.Bottom,
                            Font                = "font10"
                        });
                    }
                    k++;
                }

                titleBar.AddChild(new Gui.Widget
                {
                    MinimumSize         = new Point(32, 32),
                    MaximumSize         = new Point(32, 32),
                    Background          = Data.Icon,
                    AutoLayout          = Gui.AutoLayout.DockLeft,
                    Text                = Data.CraftedResultsCount.ToString(),
                    Font                = "font10-outline-numsonly",
                    TextHorizontalAlign = HorizontalAlign.Right,
                    TextVerticalAlign   = VerticalAlign.Bottom,
                    TextColor           = Color.White.ToVector4()
                });
                titleBar.AddChild(new Gui.Widget
                {
                    Text              = " " + Data.Name,
                    Font              = "font16",
                    AutoLayout        = Gui.AutoLayout.DockLeft,
                    TextVerticalAlign = VerticalAlign.Center,
                    MinimumSize       = new Point(0, 34),
                    Padding           = new Margin(0, 0, 16, 0)
                });

                AddChild(new Gui.Widget
                {
                    Text                   = Data.Description + "\n",
                    AutoLayout             = Gui.AutoLayout.DockTop,
                    AutoResizeToTextHeight = true
                });

                var minion = World.PlayerFaction.Minions.FirstOrDefault(m => Data.IsMagical ? m.Stats.IsTaskAllowed(Task.TaskCategory.Research) : m.Stats.IsTaskAllowed(Task.TaskCategory.BuildObject));

                var nearestBuildLocation = World.PlayerFaction.FindNearestItemWithTags(Data.CraftLocation, Vector3.Zero, false, null);
                if (minion == null)
                {
                    AddChild(new Gui.Widget
                    {
                        Text       = String.Format("Needs {0} to {1}!", Data.IsMagical ? "Wizard" : "CraftsDwarf", Data.Verb),
                        TextColor  = new Vector4(1, 0, 0, 1),
                        AutoLayout = Gui.AutoLayout.DockBottom
                    });
                }
                else if (!String.IsNullOrEmpty(Data.CraftLocation) && Data.Type == CraftItem.CraftType.Resource && nearestBuildLocation == null)
                {
                    AddChild(new Gui.Widget
                    {
                        Text       = String.Format("Needs {0} to {1}!", Data.CraftLocation, Data.Verb),
                        TextColor  = new Vector4(1, 0, 0, 1),
                        AutoLayout = Gui.AutoLayout.DockBottom
                    });
                }
                else
                {
                    foreach (var resourceAmount in Data.RequiredResources)
                    {
                        var child = AddChild(new Widget()
                        {
                            AutoLayout  = AutoLayout.DockTop,
                            MinimumSize = new Point(200, 18)
                        });

                        child.AddChild(new Gui.Widget()
                        {
                            Font       = "font8",
                            Text       = String.Format("{0} {1}: ", resourceAmount.NumResources, resourceAmount.ResourceType),
                            AutoLayout = AutoLayout.DockLeft
                        });
                        child.Layout();

                        var resourceSelector = child.AddChild(new Gui.Widgets.ComboBox
                        {
                            Font        = "font8",
                            Items       = Master.Faction.ListResourcesWithTag(resourceAmount.ResourceType).Where(r => r.NumResources >= resourceAmount.NumResources).Select(r => r.ResourceType.ToString()).OrderBy(p => p).ToList(),
                            AutoLayout  = AutoLayout.DockLeft,
                            MinimumSize = new Point(200, 18),
                            Tooltip     = String.Format("Type of {0} to use.", resourceAmount.ResourceType)
                        }) as Gui.Widgets.ComboBox;

                        if (AllowWildcard)
                        {
                            resourceSelector.Items.Insert(0, "Any");
                        }

                        if (resourceSelector.Items.Count == 0)
                        {
                            resourceSelector.Items.Add("<Not enough!>");
                        }

                        resourceSelector.SelectedIndex = 0;

                        ResourceCombos.Add(resourceSelector);
                    }


                    if (Data.Type == CraftItem.CraftType.Resource)
                    {
                        var child2 = AddChild(new Widget()
                        {
                            AutoLayout  = AutoLayout.DockTop,
                            MinimumSize = new Point(100, 18)
                        });

                        child2.AddChild(new Gui.Widget()
                        {
                            Font       = "font8",
                            Text       = "Repeat ",
                            AutoLayout = AutoLayout.DockLeft
                        });
                        NumCombo = child2.AddChild(new Gui.Widgets.ComboBox
                        {
                            Font  = "font8",
                            Items = new List <string>()
                            {
                                "1x",
                                "5x",
                                "10x",
                                "100x"
                            },
                            AutoLayout  = AutoLayout.DockLeft,
                            MinimumSize = new Point(64, 18),
                            MaximumSize = new Point(64, 18),
                            Tooltip     = "Craft this many objects."
                        }) as Gui.Widgets.ComboBox;
                        NumCombo.SelectedIndex = 0;
                    }

                    var bottomBar = AddChild(new Widget()
                    {
                        AutoLayout  = AutoLayout.DockTop,
                        MinimumSize = new Point(256, 32)
                    });

                    bool hasExisting = false;
                    if (BuildAction != null)
                    {
                        if (Data.Type == CraftItem.CraftType.Object && PlaceAction != null)
                        {
                            hasExisting = true;
                            var resources = Master.Faction.ListResources();
                            if (resources.Any(resource => ResourceLibrary.GetResourceByName(resource.Key).CraftInfo.CraftItemType == Data.Name))
                            {
                                bottomBar.AddChild(new Button()
                                {
                                    Text    = "Place Existing",
                                    OnClick = (widget, args) =>
                                    {
                                        PlaceAction(this, args);
                                    },
                                    AutoLayout  = AutoLayout.DockLeftCentered,
                                    MinimumSize = new Point(64, 28),
                                    Tooltip     = String.Format("Place an existing {0} from our stockpiles.", Data.Name)
                                });
                            }
                        }

                        var buildButton = bottomBar.AddChild(new Button()
                        {
                            Text    = hasExisting ? String.Format("{0} New", Data.Verb): Data.Verb,
                            OnClick = (widget, args) =>
                            {
                                BuildAction(this, args);
                                //sender.Hidden = true;
                                //sender.Invalidate();
                            },
                            AutoLayout  = AutoLayout.DockLeftCentered,
                            MinimumSize = new Point(64, 28),
                            Tooltip     = String.Format("{1} a new {0} using the selected resources.", Data.Name, Data.Verb)
                        });

                        //Parent.OnClick = (parent, args) => buildButton.OnClick(buildButton, args);
                    }
                }

                Layout();
            };
        }