From 3bd0aee272ca54ab1af6a4256bafa9ddc1a3175a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D1=8F=D1=80=20=D0=90=D0=B3=D0=BB?=
 =?UTF-8?q?=D0=B8=D1=83=D0=BB=D0=BB=D0=BE=D0=B2?= <danuar228@mail.ru>
Date: Wed, 19 Oct 2022 18:22:27 +0400
Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?=
 =?UTF-8?q?=D0=B0=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B0?=
 =?UTF-8?q?=20=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2=20=D1=81=D0=B0?=
 =?UTF-8?q?=D0=BC=D0=BE=D0=BB=D0=B5=D1=82=D0=BE=D0=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 AirBomber/AirBomber/DrawningAirBomber.cs  | 13 +++++++++++++
 AirBomber/AirBomber/DrawningAirplane.cs   | 12 ++++++++++++
 AirBomber/AirBomber/FormAirplaneConfig.cs | 11 +++++------
 3 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/AirBomber/AirBomber/DrawningAirBomber.cs b/AirBomber/AirBomber/DrawningAirBomber.cs
index 0705593..449b1ba 100644
--- a/AirBomber/AirBomber/DrawningAirBomber.cs
+++ b/AirBomber/AirBomber/DrawningAirBomber.cs
@@ -25,6 +25,19 @@ namespace AirBomber
             Airplane = new EntityAirBomber(speed, weight, bodyColor, dopColor, hasBombs, hasFuelTanks);
         }
 
+        /// <summary>
+        /// Получения копии текущего объекта. Для перемены свойств изменить необязательные аргументы нужным значением
+        /// </summary>
+        /// <param name="speed">The speed.</param>
+        /// <param name="weight">The weight.</param>
+        /// <param name="bodyColor">Color of the body.</param>
+        /// <returns>Копию или Измененную копию текущего объекта</returns>
+        public DrawningAirBomber Copy(int? speed = null, float? weight = null, Color? bodyColor = null, Color? dopColor = null, bool? hasBombs = null, bool? hasFuelTanks = null)
+        {
+            var e = (EntityAirBomber)Airplane;
+            return new DrawningAirBomber(speed ?? e.Speed, weight ?? e.Weight, bodyColor ?? e.BodyColor, dopColor ?? e.DopColor, hasBombs ?? e.HasBombs, hasFuelTanks ?? e.HasFuelTanks);
+        }
+
         public override void DrawTransport(Graphics g)
         {
             if (Airplane is not EntityAirBomber airBomber)
diff --git a/AirBomber/AirBomber/DrawningAirplane.cs b/AirBomber/AirBomber/DrawningAirplane.cs
index 08f7cce..e2e85b1 100644
--- a/AirBomber/AirBomber/DrawningAirplane.cs
+++ b/AirBomber/AirBomber/DrawningAirplane.cs
@@ -44,6 +44,18 @@
             Airplane = new EntityAirplane(speed, weight, bodyColor);
         }
 
+        /// <summary>
+        /// Получения копии текущего объекта. Для перемены свойств изменить необязательные аргументы нужным значением
+        /// </summary>
+        /// <param name="speed">The speed.</param>
+        /// <param name="weight">The weight.</param>
+        /// <param name="bodyColor">Color of the body.</param>
+        /// <returns>Копию или Измененную копию текущего объекта</returns>
+        public DrawningAirplane Copy(int? speed = null, float? weight = null, Color? bodyColor = null)
+        {
+            return new DrawningAirplane(speed ?? Airplane.Speed, weight ?? Airplane.Weight, bodyColor ?? Airplane.BodyColor);
+        }
+
         /// <summary>
         /// Инициализация свойств
         /// </summary>
diff --git a/AirBomber/AirBomber/FormAirplaneConfig.cs b/AirBomber/AirBomber/FormAirplaneConfig.cs
index 4a088ad..df8db6e 100644
--- a/AirBomber/AirBomber/FormAirplaneConfig.cs
+++ b/AirBomber/AirBomber/FormAirplaneConfig.cs
@@ -143,12 +143,11 @@
             var color = (Color)e.Data.GetData(typeof(Color));
             if (_airplane is DrawningAirBomber)
             {
-                var a = (EntityAirBomber)_airplane.Airplane;
-                _airplane = new DrawningAirBomber(a.Speed, a.Weight, color, a.DopColor, a.HasBombs, a.HasFuelTanks);
+                _airplane = ((DrawningAirBomber)_airplane).Copy(bodyColor: color);
             }
             else if (_airplane is DrawningAirplane)
             {
-                _airplane = new DrawningAirplane(_airplane.Airplane.Speed, _airplane.Airplane.Weight, color);
+                _airplane = _airplane.Copy(bodyColor: color);
             }
             DrawAirplane();
         }
@@ -160,10 +159,10 @@
         private void LabelDopColor_DragDrop(object sender, DragEventArgs e)
         {
             var color = (Color)e.Data.GetData(typeof(Color));
-            if (_airplane is DrawningAirBomber)
+            var airplane = _airplane as DrawningAirBomber;
+            if (airplane != null)
             {
-                var a = (EntityAirBomber)_airplane.Airplane;
-                _airplane = new DrawningAirBomber(a.Speed, a.Weight, a.BodyColor, color, a.HasBombs, a.HasFuelTanks);
+                _airplane = airplane.Copy(dopColor: color);
             }
             DrawAirplane();
         }