diff --git a/AirBomber/AirBomber/AirPlaneDelegate.cs b/AirBomber/AirBomber/AirPlaneDelegate.cs
new file mode 100644
index 0000000..e912336
--- /dev/null
+++ b/AirBomber/AirBomber/AirPlaneDelegate.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AirBomber
+{
+ public delegate void AirPlaneDelegate(DrawningAirPlane plane);
+}
diff --git a/AirBomber/AirBomber/DrawningAirBomber.cs b/AirBomber/AirBomber/DrawningAirBomber.cs
index 05612cf..003679d 100644
--- a/AirBomber/AirBomber/DrawningAirBomber.cs
+++ b/AirBomber/AirBomber/DrawningAirBomber.cs
@@ -39,18 +39,24 @@ namespace AirBomber
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(airBomber.AdditionalColor);
base.DrawPlane(g);
- // обвесы
- g.FillEllipse(additionalBrush, _startPosX + 90, _startPosY + 20, 15, 29);
- g.DrawEllipse(pen, _startPosX + 90, _startPosY + 20, 15, 29);
- g.FillEllipse(additionalBrush, _startPosX + 90, _startPosY + 70, 15, 29);
- g.DrawEllipse(pen, _startPosX + 90, _startPosY + 70, 15, 29);
- g.FillEllipse(additionalBrush, _startPosX + 140, _startPosY + 50, 15, 15);
- g.DrawEllipse(pen, _startPosX + 140, _startPosY + 50, 15, 15);
+ // bombs
+ if(airBomber.Bombs)
+ {
+ g.FillEllipse(additionalBrush, _startPosX + 90, _startPosY + 20, 15, 29);
+ g.DrawEllipse(pen, _startPosX + 90, _startPosY + 20, 15, 29);
+ g.FillEllipse(additionalBrush, _startPosX + 90, _startPosY + 70, 15, 29);
+ g.DrawEllipse(pen, _startPosX + 90, _startPosY + 70, 15, 29);
+ g.FillEllipse(additionalBrush, _startPosX + 140, _startPosY + 50, 15, 15);
+ g.DrawEllipse(pen, _startPosX + 140, _startPosY + 50, 15, 15);
+ }
// fueltanks
- g.FillRectangle(additionalBrush, _startPosX + 63, _startPosY + 34, 20, 15);
- g.DrawRectangle(pen, _startPosX + 63, _startPosY + 34, 20, 15);
- g.FillRectangle(additionalBrush, _startPosX + 63, _startPosY + 70, 20, 15);
- g.DrawRectangle(pen, _startPosX + 63, _startPosY + 70, 20, 15);
+ if (airBomber.FuelTanks)
+ {
+ g.FillRectangle(additionalBrush, _startPosX + 63, _startPosY + 34, 20, 15);
+ g.DrawRectangle(pen, _startPosX + 63, _startPosY + 34, 20, 15);
+ g.FillRectangle(additionalBrush, _startPosX + 63, _startPosY + 70, 20, 15);
+ g.DrawRectangle(pen, _startPosX + 63, _startPosY + 70, 20, 15);
+ }
}
}
}
diff --git a/AirBomber/AirBomber/DrawningAirPlane.cs b/AirBomber/AirBomber/DrawningAirPlane.cs
index 4308f24..56a60f7 100644
--- a/AirBomber/AirBomber/DrawningAirPlane.cs
+++ b/AirBomber/AirBomber/DrawningAirPlane.cs
@@ -16,11 +16,11 @@ namespace AirBomber
///
/// Ширина окна
///
- private int _pictureWidth;
+ public int _pictureWidth;
///
/// Высота окна
///
- private int _pictureHeight;
+ public int _pictureHeight;
///
/// Левая координата прорисовки самолета
///
@@ -272,7 +272,6 @@ namespace AirBomber
///
/// Получение объекта IMoveableObject из объекта DrawningAirPlane
///
- public IMoveableObject GetMoveableObject => new
- DrawningObjectAirPlane(this);
+ public IMoveableObject GetMoveableObject => new DrawningObjectAirPlane(this);
}
}
diff --git a/AirBomber/AirBomber/EntityAirBomber.cs b/AirBomber/AirBomber/EntityAirBomber.cs
index 2197b86..f8b76af 100644
--- a/AirBomber/AirBomber/EntityAirBomber.cs
+++ b/AirBomber/AirBomber/EntityAirBomber.cs
@@ -13,12 +13,15 @@ namespace AirBomber
public bool Bombs { get; private set; }
public Color BombsColor { get; private set; }
public bool FuelTanks { get; private set; }
- public EntityAirBomber(int speed, double weight, Color bodyColor, Color
- additionalColor, bool bombs, bool fuelTanks) : base(speed, weight, bodyColor)
+ public EntityAirBomber(int speed, double weight, Color bodyColor, Color additionalColor, bool bombs, bool fuelTanks) : base(speed, weight, bodyColor)
{
AdditionalColor = additionalColor;
Bombs = bombs;
FuelTanks = fuelTanks;
}
+ public void SetAdditionalColor(Color color)
+ {
+ AdditionalColor = color;
+ }
}
}
diff --git a/AirBomber/AirBomber/EntityAirPlane.cs b/AirBomber/AirBomber/EntityAirPlane.cs
index a8341c9..418142f 100644
--- a/AirBomber/AirBomber/EntityAirPlane.cs
+++ b/AirBomber/AirBomber/EntityAirPlane.cs
@@ -37,5 +37,9 @@ namespace AirBomber
Weight = weight;
BodyColor = bodyColor;
}
+ public void SetBodyColor(Color color)
+ {
+ BodyColor = color;
+ }
}
}
diff --git a/AirBomber/AirBomber/FormPlaneCollection.cs b/AirBomber/AirBomber/FormPlaneCollection.cs
index 49ce1c9..2d5b92a 100644
--- a/AirBomber/AirBomber/FormPlaneCollection.cs
+++ b/AirBomber/AirBomber/FormPlaneCollection.cs
@@ -58,28 +58,10 @@ namespace AirBomber
///
private void buttonAddPlane_Click(object sender, EventArgs e)
{
- if (listBoxStorages.SelectedIndex == -1)
- {
- return;
- }
- var obj = _storage[listBoxStorages.SelectedItem.ToString()?? string.Empty];
- if (obj == null)
- {
- return;
- }
- FormAirBomber form = new();
- if (form.ShowDialog() == DialogResult.OK)
- {
- if (obj + form.SelectedPlane > -1)
- {
- MessageBox.Show("Объект добавлен");
- pictureBoxCollection.Image = obj.ShowPlanes();
- }
- else
- {
- MessageBox.Show("Не удалось добавить объект");
- }
- }
+ var formPlaneConfig = new FormPlaneConfig();
+ // TODO DONE
+ formPlaneConfig.AddEvent(AddPlane);
+ formPlaneConfig.Show();
}
///
/// Удаление объекта из набора
@@ -158,5 +140,27 @@ namespace AirBomber
ReloadObjects();
}
}
+ private void AddPlane(DrawningAirPlane plane)
+ {
+ plane._pictureWidth = pictureBoxCollection.Width;
+ plane._pictureHeight = pictureBoxCollection.Height;
+
+ if (listBoxStorages.SelectedIndex == -1) return;
+
+ var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
+ if (obj == null)
+ {
+ return;
+ }
+ if (obj + plane > -1)
+ {
+ MessageBox.Show("Объект добавлен");
+ pictureBoxCollection.Image = obj.ShowPlanes();
+ }
+ else
+ {
+ MessageBox.Show("Не удалось добавить объект");
+ }
+ }
}
}
diff --git a/AirBomber/AirBomber/FormPlaneConfig.Designer.cs b/AirBomber/AirBomber/FormPlaneConfig.Designer.cs
index 6b6522b..70e2b0c 100644
--- a/AirBomber/AirBomber/FormPlaneConfig.Designer.cs
+++ b/AirBomber/AirBomber/FormPlaneConfig.Designer.cs
@@ -34,7 +34,7 @@
groupBoxColors = new GroupBox();
panelPurple = new Panel();
panelBlack = new Panel();
- panelGrey = new Panel();
+ panelGray = new Panel();
panelWhite = new Panel();
panelYellow = new Panel();
panelBlue = new Panel();
@@ -48,8 +48,8 @@
labelSpeed = new Label();
pictureBoxObject = new PictureBox();
panelObject = new Panel();
- labelColor = new Label();
labelAddColor = new Label();
+ labelColor = new Label();
buttonOk = new Button();
buttonCancel = new Button();
groupBoxParameters.SuspendLayout();
@@ -87,6 +87,7 @@
labelModifiedObject.TabIndex = 8;
labelModifiedObject.Text = "Продвинутый";
labelModifiedObject.TextAlign = ContentAlignment.MiddleCenter;
+ labelModifiedObject.MouseDown += labelObject_MouseDown;
//
// labelSimpleObject
//
@@ -97,13 +98,13 @@
labelSimpleObject.TabIndex = 7;
labelSimpleObject.Text = "Простой";
labelSimpleObject.TextAlign = ContentAlignment.MiddleCenter;
- labelSimpleObject.MouseDown += labelSimpleObject_MouseDown;
+ labelSimpleObject.MouseDown += labelObject_MouseDown;
//
// groupBoxColors
//
groupBoxColors.Controls.Add(panelPurple);
groupBoxColors.Controls.Add(panelBlack);
- groupBoxColors.Controls.Add(panelGrey);
+ groupBoxColors.Controls.Add(panelGray);
groupBoxColors.Controls.Add(panelWhite);
groupBoxColors.Controls.Add(panelYellow);
groupBoxColors.Controls.Add(panelBlue);
@@ -115,6 +116,8 @@
groupBoxColors.TabIndex = 6;
groupBoxColors.TabStop = false;
groupBoxColors.Text = "Цвета";
+ groupBoxColors.DragDrop += PanelObject_DragDrop;
+ groupBoxColors.DragEnter += PanelObject_DragEnter;
//
// panelPurple
//
@@ -123,6 +126,9 @@
panelPurple.Name = "panelPurple";
panelPurple.Size = new Size(54, 54);
panelPurple.TabIndex = 1;
+ panelPurple.DragDrop += PanelObject_DragDrop;
+ panelPurple.DragEnter += PanelObject_DragEnter;
+ panelPurple.MouseDown += panelColor_MouseDown;
//
// panelBlack
//
@@ -131,14 +137,20 @@
panelBlack.Name = "panelBlack";
panelBlack.Size = new Size(54, 54);
panelBlack.TabIndex = 1;
+ panelBlack.DragDrop += PanelObject_DragDrop;
+ panelBlack.DragEnter += PanelObject_DragEnter;
+ panelBlack.MouseDown += panelColor_MouseDown;
//
- // panelGrey
+ // panelGray
//
- panelGrey.BackColor = Color.Gray;
- panelGrey.Location = new Point(96, 113);
- panelGrey.Name = "panelGrey";
- panelGrey.Size = new Size(54, 54);
- panelGrey.TabIndex = 1;
+ panelGray.BackColor = Color.Gray;
+ panelGray.Location = new Point(96, 113);
+ panelGray.Name = "panelGray";
+ panelGray.Size = new Size(54, 54);
+ panelGray.TabIndex = 1;
+ panelGray.DragDrop += PanelObject_DragDrop;
+ panelGray.DragEnter += PanelObject_DragEnter;
+ panelGray.MouseDown += panelColor_MouseDown;
//
// panelWhite
//
@@ -147,6 +159,9 @@
panelWhite.Name = "panelWhite";
panelWhite.Size = new Size(54, 54);
panelWhite.TabIndex = 1;
+ panelWhite.DragDrop += PanelObject_DragDrop;
+ panelWhite.DragEnter += PanelObject_DragEnter;
+ panelWhite.MouseDown += panelColor_MouseDown;
//
// panelYellow
//
@@ -155,6 +170,9 @@
panelYellow.Name = "panelYellow";
panelYellow.Size = new Size(54, 54);
panelYellow.TabIndex = 1;
+ panelYellow.DragDrop += PanelObject_DragDrop;
+ panelYellow.DragEnter += PanelObject_DragEnter;
+ panelYellow.MouseDown += panelColor_MouseDown;
//
// panelBlue
//
@@ -163,6 +181,9 @@
panelBlue.Name = "panelBlue";
panelBlue.Size = new Size(54, 54);
panelBlue.TabIndex = 1;
+ panelBlue.DragDrop += PanelObject_DragDrop;
+ panelBlue.DragEnter += PanelObject_DragEnter;
+ panelBlue.MouseDown += panelColor_MouseDown;
//
// panelGreen
//
@@ -171,6 +192,9 @@
panelGreen.Name = "panelGreen";
panelGreen.Size = new Size(54, 54);
panelGreen.TabIndex = 1;
+ panelGreen.DragDrop += PanelObject_DragDrop;
+ panelGreen.DragEnter += PanelObject_DragEnter;
+ panelGreen.MouseDown += panelColor_MouseDown;
//
// panelRed
//
@@ -179,6 +203,9 @@
panelRed.Name = "panelRed";
panelRed.Size = new Size(54, 54);
panelRed.TabIndex = 0;
+ panelRed.DragDrop += PanelObject_DragDrop;
+ panelRed.DragEnter += PanelObject_DragEnter;
+ panelRed.MouseDown += panelColor_MouseDown;
//
// checkBoxFuelTanks
//
@@ -256,19 +283,12 @@
panelObject.Name = "panelObject";
panelObject.Size = new Size(418, 253);
panelObject.TabIndex = 2;
- //
- // labelColor
- //
- labelColor.BorderStyle = BorderStyle.FixedSingle;
- labelColor.Location = new Point(32, 9);
- labelColor.Name = "labelColor";
- labelColor.Size = new Size(165, 49);
- labelColor.TabIndex = 2;
- labelColor.Text = "Цвет";
- labelColor.TextAlign = ContentAlignment.MiddleCenter;
+ panelObject.DragDrop += PanelObject_DragDrop;
+ panelObject.DragEnter += PanelObject_DragEnter;
//
// labelAddColor
//
+ labelAddColor.AllowDrop = true;
labelAddColor.BorderStyle = BorderStyle.FixedSingle;
labelAddColor.Location = new Point(225, 9);
labelAddColor.Name = "labelAddColor";
@@ -276,6 +296,21 @@
labelAddColor.TabIndex = 3;
labelAddColor.Text = "Доп. цвет";
labelAddColor.TextAlign = ContentAlignment.MiddleCenter;
+ labelAddColor.DragDrop += labelColor_dragDrop;
+ labelAddColor.DragEnter += labelColor_dragEnter;
+ //
+ // labelColor
+ //
+ labelColor.AllowDrop = true;
+ labelColor.BorderStyle = BorderStyle.FixedSingle;
+ labelColor.Location = new Point(32, 9);
+ labelColor.Name = "labelColor";
+ labelColor.Size = new Size(165, 49);
+ labelColor.TabIndex = 2;
+ labelColor.Text = "Цвет";
+ labelColor.TextAlign = ContentAlignment.MiddleCenter;
+ labelColor.DragDrop += labelColor_dragDrop;
+ labelColor.DragEnter += labelColor_dragEnter;
//
// buttonOk
//
@@ -285,6 +320,7 @@
buttonOk.TabIndex = 3;
buttonOk.Text = "Добавить";
buttonOk.UseVisualStyleBackColor = true;
+ buttonOk.Click += buttonOk_Click;
//
// buttonCancel
//
@@ -319,7 +355,6 @@
#endregion
private GroupBox groupBoxParameters;
- private CheckBox checkBox3;
private CheckBox checkBoxFuelTanks;
private CheckBox checkBoxBombs;
private NumericUpDown numericUpDownWeight;
@@ -331,7 +366,7 @@
private GroupBox groupBoxColors;
private Panel panelPurple;
private Panel panelBlack;
- private Panel panelGrey;
+ private Panel panelGray;
private Panel panelWhite;
private Panel panelYellow;
private Panel panelBlue;
diff --git a/AirBomber/AirBomber/FormPlaneConfig.cs b/AirBomber/AirBomber/FormPlaneConfig.cs
index dcdda34..b00e861 100644
--- a/AirBomber/AirBomber/FormPlaneConfig.cs
+++ b/AirBomber/AirBomber/FormPlaneConfig.cs
@@ -12,14 +12,144 @@ namespace AirBomber
{
public partial class FormPlaneConfig : Form
{
+ ///
+ /// Переменная-выбранная машина
+ ///
+ DrawningAirPlane? _plane = null;
+ ///
+ /// Делегат для передачи объекта-автомобиля
+ ///
+ ///
+ private event AirPlaneDelegate? EventAddPlane;
+ ///
+ /// Конструктор
+ ///
+ ///
+ /// Конструктор
+ ///
public FormPlaneConfig()
{
InitializeComponent();
+ panelBlack.MouseDown += panelColor_MouseDown;
+ panelPurple.MouseDown += panelColor_MouseDown;
+ panelGray.MouseDown += panelColor_MouseDown;
+ panelGreen.MouseDown += panelColor_MouseDown;
+ panelRed.MouseDown += panelColor_MouseDown;
+ panelWhite.MouseDown += panelColor_MouseDown;
+ panelYellow.MouseDown += panelColor_MouseDown;
+ panelBlue.MouseDown += panelColor_MouseDown;
+ // TODO buttonCancel.Click with lambda DONE
+ buttonCancel.Click += (s, e) => Close();
+ }
+ private void DrawPlane()
+ {
+ Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height);
+ Graphics gr = Graphics.FromImage(bmp);
+ _plane?.SetPosition(5, 5);
+ _plane?.DrawPlane(gr);
+ pictureBoxObject.Image = bmp;
+ }
+ ///
+ /// Добавление события
+ ///
+ /// Привязанный метод
+ public void AddEvent(AirPlaneDelegate ev)
+ {
+ if (EventAddPlane == null)
+ {
+ EventAddPlane = ev;
+ }
+ else
+ {
+ EventAddPlane += ev;
+ }
+ }
+ ///
+ /// Передаем информацию при нажатии на Label
+ ///
+ ///
+ ///
+ private void labelObject_MouseDown(object sender, MouseEventArgs e)
+ {
+ (sender as Label)?.DoDragDrop((sender as Label)?.Name, DragDropEffects.Move | DragDropEffects.Copy);
}
- private void labelSimpleObject_MouseDown(object sender, MouseEventArgs e)
+ ///
+ /// Проверка получаемой информации (ее типа на соответствие требуемому)
+ ///
+ ///
+ ///
+ 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 "labelSimpleObject":
+ _plane = new DrawningAirPlane((int)numericUpDownSpeed.Value, (int)numericUpDownWeight.Value, Color.White, pictureBoxObject.Width, pictureBoxObject.Height);
+ break;
+ case "labelModifiedObject":
+ _plane = new DrawningAirBomber((int)numericUpDownSpeed.Value, (int)numericUpDownWeight.Value, Color.White, Color.Black, checkBoxBombs.Checked, checkBoxFuelTanks.Checked, pictureBoxObject.Width, pictureBoxObject.Height);
+ break;
+ }
+ DrawPlane();
+ }
+ // TODO Реализовать логику смены цветов DONE
+ public void panelColor_MouseDown(object sender, MouseEventArgs e)
+ {
+ (sender as Panel)?.DoDragDrop((sender as Panel)?.BackColor, DragDropEffects.Move | DragDropEffects.Copy);
+ }
+ private void labelColor_dragEnter(object sender, DragEventArgs e)
+ {
+ if (e.Data?.GetDataPresent(typeof(Color)) ?? false)
+ {
+ e.Effect = DragDropEffects.Copy;
+ }
+ else
+ {
+ e.Effect = DragDropEffects.None;
+ }
+ }
+ private void labelColor_dragDrop(object sender, DragEventArgs e)
+ {
+ if (_plane == null)
+ return;
+ switch (((Label)sender).Name)
+ {
+ case "labelColor":
+ _plane?.EntityAirPlane?.SetBodyColor((Color)e.Data.GetData(typeof(Color)));
+ break;
+ case "labelAddColor":
+ if (!(_plane is DrawningAirBomber))
+ return;
+ (_plane.EntityAirPlane as EntityAirBomber)?.SetAdditionalColor(color: (Color)e.Data.GetData(typeof(Color)));
+ break;
+ }
+ DrawPlane();
+ }
+ ///
+ /// Добавление самолета
+ ///
+ ///
+ ///
+ private void buttonOk_Click(object sender, EventArgs e)
+ {
+ EventAddPlane?.Invoke(_plane);
+ Close();
}
}
}