diff --git a/ArmoredCar/ArmoredCar/DrawningObjectArmCar.cs b/ArmoredCar/ArmoredCar/DrawningObjectArmCar.cs index 22effca..87f94bf 100644 --- a/ArmoredCar/ArmoredCar/DrawningObjectArmCar.cs +++ b/ArmoredCar/ArmoredCar/DrawningObjectArmCar.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.DirectoryServices.ActiveDirectory; using System.Drawing; using System.Linq; using System.Text; @@ -34,7 +35,54 @@ namespace ArmoredCar _armCar.DrawTransport(g); } public string GetInfo() => _armCar?.GetDataForSave(); - public static IDrawningObject Create(string data) => new - DrawningObjectArmCar(data.CreateDrawningArmoredCar()); + public static IDrawningObject Create(string data) => new DrawningObjectArmCar(data.CreateDrawningArmoredCar()); + + public bool Equals(IDrawningObject? other) + { + if (other == null) + { + return false; + } + var otherCar = other as DrawningObjectArmCar; + if (otherCar == null) + { + return false; + } + var car = _armCar.ArmoredCar; + var otherCarCar = otherCar._armCar.ArmoredCar; + + if (car.GetType() != otherCarCar.GetType()) + return false; + + if (car.Speed != otherCarCar.Speed) + { + return false; + } + if (car.Weight != otherCarCar.Weight) + { + return false; + } + if (car.BodyColor != otherCarCar.BodyColor) + { + return false; + } + if (car is EntityTank tank && otherCarCar is EntityTank otherTank) + { + if (tank.DopColor != otherTank.DopColor) + { + return false; + } + if (tank.TowerWeapon != otherTank.TowerWeapon) + { + return false; + } + if (tank.AMachineGun != otherTank.AMachineGun) + { + return false; + } + } + return true; + } + } } diff --git a/ArmoredCar/ArmoredCar/IDrawningObject.cs b/ArmoredCar/ArmoredCar/IDrawningObject.cs index 4e97bfa..d7ae519 100644 --- a/ArmoredCar/ArmoredCar/IDrawningObject.cs +++ b/ArmoredCar/ArmoredCar/IDrawningObject.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace ArmoredCar { - internal interface IDrawningObject + internal interface IDrawningObject : IEquatable { /// /// Шаг перемещения объекта diff --git a/ArmoredCar/ArmoredCar/MapWithSetArmoredCarsGeneric.cs b/ArmoredCar/ArmoredCar/MapWithSetArmoredCarsGeneric.cs index e4a7e64..db64685 100644 --- a/ArmoredCar/ArmoredCar/MapWithSetArmoredCarsGeneric.cs +++ b/ArmoredCar/ArmoredCar/MapWithSetArmoredCarsGeneric.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace ArmoredCar { internal class MapWithSetArmoredCarsGeneric - where T : class, IDrawningObject + where T : class, IDrawningObject, IEquatable where U : AbstractMap { /// diff --git a/ArmoredCar/ArmoredCar/SetArmoredCarsGeneric.cs b/ArmoredCar/ArmoredCar/SetArmoredCarsGeneric.cs index 6d63325..1aef614 100644 --- a/ArmoredCar/ArmoredCar/SetArmoredCarsGeneric.cs +++ b/ArmoredCar/ArmoredCar/SetArmoredCarsGeneric.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace ArmoredCar { internal class SetArmoredCarsGeneric - where T : class + where T : class, IEquatable { /// /// Список объектов, которые храним @@ -43,13 +43,19 @@ namespace ArmoredCar /// Позиция /// public int Insert(T armoredCar, int position) - { + { if (Count >= _maxCount) throw new StorageOverflowException(Count); if (position < 0 || position >= _maxCount) return -1; + // проверка на уникальность + if (_places.Contains(armoredCar)) + { + return -1; + } + _places.Insert(position, armoredCar); return position; }