using AirBomber.DrawningObjects; using AirBomber.Entities; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace AirBomber { public partial class FormBomberConfig : Form { private event Action? EventAddBomber; DrawningBomber? _bomber = null; public FormBomberConfig() { InitializeComponent(); redPanel.MouseDown += PanelColor_MouseDown; greenPanel.MouseDown += PanelColor_MouseDown; bluePanel.MouseDown += PanelColor_MouseDown; yellowPanel.MouseDown += PanelColor_MouseDown; whitePanel.MouseDown += PanelColor_MouseDown; greyPanel.MouseDown += PanelColor_MouseDown; blackPanel.MouseDown += PanelColor_MouseDown; purplePanel.MouseDown += PanelColor_MouseDown; buttonStop.Click += (sender, e) => Close(); } private void DrawBomber() { Bitmap bmp = new(pictureBoxConfig.Width, pictureBoxConfig.Height); Graphics gr = Graphics.FromImage(bmp); _bomber?.SetPosition(5, 5); _bomber?.DrawBomber(gr); pictureBoxConfig.Image = bmp; } public void AddEvent(Action ev) { if (EventAddBomber == null) { EventAddBomber = new Action(ev); } else { EventAddBomber += ev; } } private void LableObject_MouseDown(object sender, MouseEventArgs e) { (sender as Label)?.DoDragDrop((sender as Label)?.Name, DragDropEffects.Move | DragDropEffects.Copy); } private void PanelObject_DragEnter(object sender, DragEventArgs e) { if (e.Data?.GetDataPresent(DataFormats.Text) ?? false) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void PanelObject_DragDrop(object sender, DragEventArgs e) { switch (e.Data?.GetData(DataFormats.Text).ToString()) { case "easyLabel": _bomber = new DrawningBomber((int)SpeedNumericUpDown.Value, (int)WeightNumericUpDown.Value, Color.White, pictureBoxConfig.Width, pictureBoxConfig.Height); break; case "hardLabel": _bomber = new DrawningAirBomber((int)SpeedNumericUpDown.Value, (int)WeightNumericUpDown.Value, Color.Red, Color.Black, rocketCheckBox.Checked, bakCheckBox.Checked, pictureBoxConfig.Width, pictureBoxConfig.Height); break; } DrawBomber(); } private void PanelColor_MouseDown(object sender, MouseEventArgs e) { (sender as Panel)?.DoDragDrop((sender as Panel)?.BackColor, DragDropEffects.Move | DragDropEffects.Copy); } private void AddButton_Click(object sender, EventArgs e) { EventAddBomber?.Invoke(_bomber); Close(); } private void LabelBaseColor_DragDrop(object sender, DragEventArgs e) { if (_bomber != null) { if (e.Data.GetDataPresent(typeof(Color))) { _bomber.EntityBomber.BodyColor = (Color)e.Data.GetData(typeof(Color)); } DrawBomber(); } } private void LabelColor_DragEnter(object sender, DragEventArgs e) { if (_bomber != null && _bomber.EntityBomber is EntityAirBomber entityAirBomber) { labelDopColor.AllowDrop = true; } else labelDopColor.AllowDrop = false; if (e.Data.GetDataPresent(typeof(Color))) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void labelAddBoxColor_DragDrop(object sender, DragEventArgs e) { if (_bomber != null && _bomber.EntityBomber is EntityAirBomber entityAirBomber) { if (e.Data.GetDataPresent(typeof(Color))) { entityAirBomber.DopColor = (Color)e.Data.GetData(typeof(Color)); } DrawBomber(); } } } }