From 1f90797c6aa7aa196b9c256e04118d523be21296 Mon Sep 17 00:00:00 2001 From: Danil Kargin Date: Sun, 11 Dec 2022 18:12:21 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D1=80=D0=B0=D0=B2=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AirFighter/DrawningObjectAirFighter.cs | 48 +++++++++++++++++++ AirFighter/AirFighter/IDrawningObject.cs | 2 +- .../MapWithSetAirFightersGeneric.cs | 2 +- .../AirFighter/SetAirFightersGeneric.cs | 6 ++- 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/AirFighter/AirFighter/DrawningObjectAirFighter.cs b/AirFighter/AirFighter/DrawningObjectAirFighter.cs index 4b73d56..1df156f 100644 --- a/AirFighter/AirFighter/DrawningObjectAirFighter.cs +++ b/AirFighter/AirFighter/DrawningObjectAirFighter.cs @@ -38,5 +38,53 @@ namespace AirFighter public string GetInfo() => _airFighter?.GetDataForSave(); public static IDrawningObject Create(string data) => new DrawningObjectAirFighter(data.CreateDrawningCar()); + + public bool Equals(IDrawningObject? other) + { + if (other == null) + { + return false; + } + var otherAirFighter = other as DrawningObjectAirFighter; + if (otherAirFighter == null) + { + return false; + } + var airFighter = _airFighter.AirFighter; + var otherAirFighterAirFighter = otherAirFighter._airFighter.AirFighter; + if (airFighter.Speed != otherAirFighterAirFighter.Speed) + { + return false; + } + if (airFighter.Weight != otherAirFighterAirFighter.Weight) + { + return false; + } + if (airFighter.BodyColor != otherAirFighterAirFighter.BodyColor) + { + return false; + } + // TODO доделать проверки в случае продвинутого объекта + if(airFighter is EntityUpgradeAirFighter upgradeAirFighter && otherAirFighterAirFighter is EntityUpgradeAirFighter upgradeOtherAirFighter) + { + if(upgradeAirFighter.DopWing != upgradeOtherAirFighter.DopWing) + { + return false; + } + if(upgradeAirFighter.Rocket != upgradeAirFighter.Rocket) + { + return false; + } + if(upgradeAirFighter.DopColor != upgradeOtherAirFighter.DopColor) + { + return false; + } + }else if(airFighter is EntityUpgradeAirFighter || otherAirFighterAirFighter is EntityUpgradeAirFighter) + { + return false; + } + return true; + + } } } diff --git a/AirFighter/AirFighter/IDrawningObject.cs b/AirFighter/AirFighter/IDrawningObject.cs index 5f09481..5618dcd 100644 --- a/AirFighter/AirFighter/IDrawningObject.cs +++ b/AirFighter/AirFighter/IDrawningObject.cs @@ -9,7 +9,7 @@ namespace AirFighter /// /// Интерфейс для работы с объектом, прорисовываемым на форме /// - internal interface IDrawningObject + internal interface IDrawningObject : IEquatable { /// /// Шаг перемещения объекта diff --git a/AirFighter/AirFighter/MapWithSetAirFightersGeneric.cs b/AirFighter/AirFighter/MapWithSetAirFightersGeneric.cs index 47afcee..9453783 100644 --- a/AirFighter/AirFighter/MapWithSetAirFightersGeneric.cs +++ b/AirFighter/AirFighter/MapWithSetAirFightersGeneric.cs @@ -12,7 +12,7 @@ namespace AirFighter /// /// internal class MapWithSetAirFightersGeneric - where T : class, IDrawningObject + where T : class, IDrawningObject, IEquatable where U : AbstractMap { /// diff --git a/AirFighter/AirFighter/SetAirFightersGeneric.cs b/AirFighter/AirFighter/SetAirFightersGeneric.cs index fbc5f64..5a77f0b 100644 --- a/AirFighter/AirFighter/SetAirFightersGeneric.cs +++ b/AirFighter/AirFighter/SetAirFightersGeneric.cs @@ -12,7 +12,7 @@ namespace AirFighter /// /// internal class SetAirFightersGeneric - where T: class + where T: class, IEquatable { /// /// Список объектов, которые храним @@ -52,6 +52,10 @@ namespace AirFighter /// public int Insert(T airFighter, int position) { + if (_places.Contains(airFighter)) + { + throw new ArgumentException("Элемент с такими характеристиками существует в хранилище"); + } if (Count >= _maxCount) { throw new StorageOverflowException();