public ScreenForm(Game game) { MPainter = new MapPainter(game.Maze, this); Game = game; StatPanel = new FlowLayoutPanel { Padding = Padding.Empty, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Location = new System.Drawing.Point(ClientSize.Width - (256 + 16), ClientSize.Height - (32 + 16)), Anchor = (AnchorStyles.Right | AnchorStyles.Bottom), Size = new Size(256, 32), BackColor = Color.OrangeRed, FlowDirection = FlowDirection.BottomUp, }; ControlPanel = new FlowLayoutPanel { Padding = Padding.Empty, AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Bounds = new Rectangle(ClientSize.Width - 272, levelPanelSize + 16, 256, 0), BackColor = Color.MidnightBlue, FlowDirection = FlowDirection.TopDown, }; PerksPanel = new FlowLayoutPanel() { Location = new System.Drawing.Point(ClientSize.Width - (256 + perksPanelSide), ClientSize.Height - (perksPanelSide + 24)), Anchor = (AnchorStyles.Right | AnchorStyles.Bottom), Size = new Size(0, perksPanelPadding * 2 + perksPanelSide), AutoSize = true, FlowDirection = FlowDirection.RightToLeft, BackColor = Color.OrangeRed, }; var topPanel = new TableLayoutPanel { Dock = DockStyle.Top, Height = levelPanelSize, BackColor = Color.Black, }; for (int i = 0; i < Game.Players.Count; i++) { topPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100f / Game.Players.Count)); } PlayerPanels = CreatePlayerPanels(topPanel, Game.Players); View = new MapView(MPainter) { Dock = DockStyle.Fill }; HeroPanel = new CurrentHeroPanel(Game.CurrentHero, this) { Size = new Size(128, 128), Anchor = AnchorStyles.Bottom | AnchorStyles.Left, Location = new System.Drawing.Point(32, ClientSize.Height - 160) }; Controls.Add(HeroPanel); Controls.Add(ControlPanel); Controls.Add(StatPanel); Controls.Add(PerksPanel); Controls.Add(View); Controls.Add(topPanel); CenterOnPoint(Game.Maze.UnitPositions[Game.CurrentHero]); PlayerPanelUpdate(); ControlPanelUpdate(); StatPanelUpdate(); SkillPanel = new HeroSkillPanel(Game, Game.CurrentHero, this, ControlPanel.Width); ShopPanel = new ShopPanel(Game.CurrentHero, this, new Rectangle(ClientSize.Width / 4, ClientSize.Height / 4, ClientSize.Width / 2, ClientSize.Height / 2)); SizeChanged += (sender, args) => { Controls.Remove(ShopPanel); Controls.Remove(SkillPanel); //StatPanel.Bounds = new Rectangle(ClientSize.Width - 272, ClientSize.Height - 528, 256, 512); MPainter.ResizeMap(Size); ResizePlayerPanels(PlayerPanels); SkillPanel = new HeroSkillPanel(Game, Game.CurrentHero, this, ControlPanel.Width); ShopPanel = new ShopPanel(Game.CurrentHero, this, //new Rectangle(ClientSize.Width / 4, ClientSize.Height / 4, ClientSize.Width / 2, ClientSize.Height / 2)); new Rectangle(ClientSize.Width / 2 - 480, ClientSize.Height / 2 - 300, 960, 600)); }; }
public void StatPanelUpdate() { StatPanel.Controls.Clear(); PerksPanel.Controls.Clear(); PerksPanel.Size = new Size(0, perksPanelPadding * 2 + perksPanelSide); PerksPanel.Location = new System.Drawing.Point(ClientSize.Width - (256 + perksPanelSide), ClientSize.Height - (perksPanelSide + 24)); var button = new Button() { Width = 256, Height = 64, Text = "END TURN", Font = new Font(FontFamily.GenericSerif, 32), ForeColor = Color.White, BackColor = Colors.PlayerDarkColors [Game.Players.IndexOf(Game.CurrentPlayer) % Colors.count] }; if (Game.Winner == null) { button.Click += (sender, args) => { EveryUpdate(); Controls.Remove(ShopPanel); Game.EndTurn(); PlayerPanelUpdate(); StatPanelUpdate(); Controls.Remove(HeroPanel); HeroPanel = new CurrentHeroPanel(Game.CurrentHero, this) { Size = new Size(128, 128), Anchor = AnchorStyles.Bottom | AnchorStyles.Left, Location = new System.Drawing.Point(32, ClientSize.Height - 160) }; Controls.Add(HeroPanel); HeroPanel.BringToFront(); ShopPanel = new ShopPanel(Game.CurrentHero, this, new Rectangle(ClientSize.Width / 2 - 480, ClientSize.Height / 2 - 300, 960, 600)); SkillPanel = new HeroSkillPanel(Game, Game.CurrentHero, this, ControlPanel.Width); CenterOnPoint(Game.Maze.UnitPositions[Game.CurrentHero]); ControlPanelUpdate(); MapUpdate(); } } ; else { button.Text = "END GAME"; button.Click += (sender, args) => this.Close(); } StatPanel.Controls.Add(button); if (Game.ChosenHero != null) { var h = new HeroInfo(Game.ChosenHero) { Width = StatPanel.Width - 6, }; StatPanel.Controls.Add(h); StatPanel.Controls.Add(new Label { BackColor = Color.Black, ForeColor = Colors.PlayerLightColors [Game.Players.IndexOf(Game.ChosenHero.P) % Colors.count], Text = Game.ChosenHero.Name, Font = new Font(FontFamily.GenericSansSerif, 16), Width = StatPanel.Width - 6, Height = 32, TextAlign = ContentAlignment.MiddleCenter }); foreach (var perk in Game.ChosenHero.Perks.Where(p => p.Name != "Perk")) { PerksPanel.Controls.Add(new Label { AutoSize = true, BackColor = Color.Black, Text = double.IsNaN(perk.Number(Game.ChosenHero)) ? perk.Name : perk.Name + "\n" + perk.Number(Game.ChosenHero), MinimumSize = new Size(perksPanelSide, perksPanelSide), MaximumSize = new Size(1000, perksPanelSide), Font = new Font(FontFamily.GenericSansSerif, 16), ForeColor = Color.Aqua, TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding(perksPanelPadding) }); } } StatPanel.Refresh(); PerksPanel.Refresh(); }