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