Beispiel #1
0
        public override void Construct()
        {
            Border         = "border-one";
            Text           = "Select Resources to Trade";
            Font           = "font16";
            InteriorMargin = new Margin(32, 5, 5, 5);
            var existingResources = Faction.ListResources();

            StayingResources = new List <ResourceAmount>();
            foreach (var resource in existingResources)
            {
                StayingResources.Add(resource.Value);
            }
            var TradeEntity = new ExpeditionTradeEntity()
            {
                Faction            = this.Faction,
                AvailableMoney     = this.Faction.Economy.CurrentMoney,
                AvailableResources = StayingResources,
                Space = 9999
            };
            var container = AddChild(new Widget()
            {
                Rect = GetDrawableInterior().Interior(new Margin(64, 64, 32, 32))
            });
            ResourceColumns columns = container.AddChild(new ResourceColumns()
            {
                AutoLayout        = AutoLayout.DockFill,
                TradeEntity       = TradeEntity,
                ValueSourceEntity = TradeEntity,
                LeftHeader        = "In Stockpiles",
                RightHeader       = "With Expedition",
                MoneyLabel        = "Trade Money"
            }) as ResourceColumns;

            columns.Reconstruct(StayingResources, new List <ResourceAmount>(), (int)Faction.Economy.CurrentMoney);

            AddChild(new Button()
            {
                Text       = "Cancel",
                Tooltip    = "Go back to the factions view.",
                AutoLayout = AutoLayout.FloatBottomLeft,
                OnClick    = (sender, args) =>
                {
                    if (OnCanceled != null)
                    {
                        OnCanceled.Invoke();
                    }
                    Close();
                }
            });
            AddChild(new Button()
            {
                Text       = "Send Expedition",
                Tooltip    = "The expedition will begin immediately!",
                AutoLayout = AutoLayout.FloatBottomRight,
                OnClick    = (sender, args) =>
                {
                    SelectedResources = columns.SelectedResources;
                    SelectedMoney     = columns.TradeMoney;
                    if (OnProceed != null)
                    {
                        OnProceed.Invoke(this);
                    }
                    Close();
                }
            });

            Layout();
            base.Construct();
        }
Beispiel #2
0
        public override void Construct()
        {
            Transaction = null;
            Result      = TradeDialogResult.Pending;

            Border = "border-fancy";

            if (!Envoy.TraderFaction.ParentFaction.IsCorporate)
            {
                Balance = AddChild(new Balance()
                {
                    AutoLayout  = AutoLayout.DockBottom,
                    MinimumSize = new Point(32 * 3, 64),
                }) as Balance;
            }

            var bottomRow = AddChild(new Widget
            {
                AutoLayout  = AutoLayout.DockBottom,
                MinimumSize = new Point(0, 32)
            });


            bottomRow.AddChild(new Gui.Widgets.Button
            {
                Font       = "font10",
                Border     = "border-button",
                TextColor  = new Vector4(0, 0, 0, 1),
                Text       = "Propose Trade",
                AutoLayout = AutoLayout.DockRight,
                OnClick    = (sender, args) =>
                {
                    if (EnvoyColumns.Valid && PlayerColumns.Valid)
                    {
                        var net         = ComputeNetValue();
                        var envoyOut    = Envoy.ComputeValue(EnvoyColumns.SelectedResources.SelectMany(i => i.Resources).ToList()) + EnvoyColumns.TradeMoney;
                        var tradeTarget = 1.0m;

                        if (EnvoyColumns.SelectedResources.Count != 0 && Player.AvailableSpace + PlayerColumns.SelectedResources.Count < EnvoyColumns.SelectedResources.Count)
                        {
                            Root.ShowModalMessage("We do not have enough stockpile space for that.");
                        }
                        else if (PlayerColumns.SelectedResources.Count == 0 && EnvoyColumns.SelectedResources.Count == 0 &&
                                 EnvoyColumns.TradeMoney == 0 && PlayerColumns.TradeMoney == 0)
                        {
                            Root.ShowModalMessage("You've selected nothing to trade.");
                        }
                        else if (net >= tradeTarget || Envoy.TraderFaction.ParentFaction.IsCorporate)
                        {
                            Result      = TradeDialogResult.Propose;
                            Transaction = new TradeTransaction
                            {
                                EnvoyEntity  = Envoy,
                                EnvoyItems   = EnvoyColumns.SelectedResources.SelectMany(i => i.Resources).ToList(),
                                EnvoyMoney   = EnvoyColumns.TradeMoney,
                                PlayerEntity = Player,
                                PlayerItems  = PlayerColumns.SelectedResources.SelectMany(i => i.Resources).ToList(),
                                PlayerMoney  = PlayerColumns.TradeMoney
                            };
                            Root.SafeCall(OnPlayerAction, this);
                        }
                        else
                        {
                            Result = TradeDialogResult.RejectProfit;
                            Root.SafeCall(OnPlayerAction, this);
                        }
                    }
                    else
                    {
                        Root.ShowTooltip(Root.MousePosition, "Trade is invalid");
                    }
                }
            });

            var autoButton = bottomRow.AddChild(new Gui.Widgets.Button
            {
                Font       = "font10",
                Border     = "border-button",
                TextColor  = new Vector4(0, 0, 0, 1),
                Text       = "Make this work",
                Tooltip    = "What will make this work?",
                AutoLayout = AutoLayout.DockRight,
                OnUpdate   = (sender, gameTime) =>
                {
                    DwarfBux net, tradeTarget;
                    CalculateTradeAmount(out net, out tradeTarget);
                    (sender as Gui.Widgets.Button).Enabled = net < tradeTarget;
                    sender.Invalidate();
                },
                OnClick = (sender, args) =>
                {
                    if ((sender as Gui.Widgets.Button).Enabled)
                    {
                        EqualizeColumns();
                    }
                }
            });

            Root.RegisterForUpdate(autoButton);

            bottomRow.AddChild(new Gui.Widgets.Button
            {
                Font       = "font10",
                Border     = "border-button",
                TextColor  = new Vector4(0, 0, 0, 1),
                Text       = "Clear",
                Tooltip    = "Clear trade",
                AutoLayout = AutoLayout.DockRight,
                OnClick    = (sender, args) =>
                {
                    EnvoyColumns.Reconstruct(Helper.AggregateResourcesIntoTradeableItems(Envoy.Resources), new List <TradeableItem>(), (int)Envoy.Money);
                    PlayerColumns.Reconstruct(Helper.AggregateResourcesIntoTradeableItems(Player.Resources), new List <TradeableItem>(), (int)Player.Money);
                    UpdateBottomDisplays();
                    Layout();
                }
            });

            bottomRow.AddChild(new Gui.Widgets.Button
            {
                Font       = "font10",
                Border     = "border-button",
                TextColor  = new Vector4(0, 0, 0, 1),
                Text       = "Stop",
                Tooltip    = "Stop trading.",
                AutoLayout = AutoLayout.DockRight,
                //OnLayout = (sender) => sender.Rect.X -= 16,
                OnClick = (sender, args) =>
                {
                    Result = TradeDialogResult.Cancel;
                    Root.SafeCall(OnPlayerAction, this);
                    //this.Close();
                }
            });

            if (Balance != null)
            {
                TotalDisplay = Balance.AddChild(new Widget
                {
                    MinimumSize         = new Point(128, 64),
                    AutoLayout          = AutoLayout.DockBottom,
                    Font                = "font10",
                    TextColor           = new Vector4(0, 0, 0, 1),
                    TextVerticalAlign   = VerticalAlign.Bottom,
                    TextHorizontalAlign = HorizontalAlign.Center
                });
            }

            SpaceDisplay = bottomRow.AddChild(new Widget
            {
                //MinimumSize = new Point(128, 0),
                AutoLayout        = AutoLayout.DockFill,
                Font              = "font10",
                TextColor         = new Vector4(0, 0, 0, 1),
                TextVerticalAlign = VerticalAlign.Center,
                MaximumSize       = new Point(256, 32),
                Tag = "trade_stocks"
            });

            var mainPanel = AddChild(new Columns
            {
                AutoLayout = AutoLayout.DockFill
            });


            PlayerColumns = mainPanel.AddChild(new ResourceColumns
            {
                TradeEntity            = Player,
                ValueSourceEntity      = Envoy,
                AutoLayout             = AutoLayout.DockFill,
                ReverseColumnOrder     = true,
                LeftHeader             = "Our Items",
                RightHeader            = "We Offer",
                MoneyLabel             = "Our money",
                OnTotalSelectedChanged = (s) => UpdateBottomDisplays(),
                Tag = "trade_money"
            }) as ResourceColumns;

            EnvoyColumns = mainPanel.AddChild(new ResourceColumns
            {
                TradeEntity            = Envoy,
                ValueSourceEntity      = Envoy,
                AutoLayout             = AutoLayout.DockFill,
                LeftHeader             = "Their Items",
                RightHeader            = "They Offer",
                MoneyLabel             = "Their money",
                OnTotalSelectedChanged = (s) => UpdateBottomDisplays()
            }) as ResourceColumns;

            Reset();
        }