diff --git a/ProjectMachine/ProjectMachine/DrawningObject.cs b/ProjectMachine/ProjectMachine/DrawningObject.cs index 6ebde9b..0e7e774 100644 --- a/ProjectMachine/ProjectMachine/DrawningObject.cs +++ b/ProjectMachine/ProjectMachine/DrawningObject.cs @@ -40,5 +40,59 @@ namespace ProjectMachine public string GetInfo() => _machine?.GetDataForSave(); public static IDrawningObject Create(string data) => new DrawningObject(data.CreateDrawningMachine()); + + public bool Equals(IDrawningObject? other) + { + if (other == null) + { + return false; + } + var otherMachine = other as DrawningObject; + if (otherMachine == null) + { + return false; + } + var machine = _machine.Machine; + var otherMachineMachine = otherMachine._machine.Machine; + if (machine.Speed != otherMachineMachine.Speed) + { + return false; + } + if (machine.Weight != otherMachineMachine.Weight) + { + return false; + } + if (machine.BodyColor != otherMachineMachine.BodyColor) + { + return false; + } + //проверка на то, что являются ли оба объекта продвинутыми + if (machine is EntityTank && otherMachineMachine is not EntityTank) + { + return false; + } + if (machine is not EntityTank && otherMachineMachine is EntityTank) + { + return false; + } + //если оба объекта являются продвинутыми, сравниваем дополнительные характеристики + if (machine is EntityTank tank && otherMachineMachine is EntityTank otherTank) + { + if (tank.DopColor != otherTank.DopColor) + { + return false; + } + if (tank.Gun != otherTank.Gun) + { + return false; + } + if (tank.Turret != otherTank.Turret) + { + return false; + } + } + return true; + } + } } diff --git a/ProjectMachine/ProjectMachine/IDrawningObject.cs b/ProjectMachine/ProjectMachine/IDrawningObject.cs index ceaf61f..4d1b112 100644 --- a/ProjectMachine/ProjectMachine/IDrawningObject.cs +++ b/ProjectMachine/ProjectMachine/IDrawningObject.cs @@ -9,8 +9,8 @@ namespace ProjectMachine /// /// Интерфейс для работы с объектом, прорисовываемым на форме /// - internal interface IDrawningObject - { + internal interface IDrawningObject : IEquatable + { /// /// Шаг перемещения объекта /// diff --git a/ProjectMachine/ProjectMachine/MapWithSetTankGeneric.cs b/ProjectMachine/ProjectMachine/MapWithSetTankGeneric.cs index 1e9a657..38c6253 100644 --- a/ProjectMachine/ProjectMachine/MapWithSetTankGeneric.cs +++ b/ProjectMachine/ProjectMachine/MapWithSetTankGeneric.cs @@ -12,7 +12,7 @@ namespace ProjectMachine /// /// internal class MapWithSetTankGeneric - where T : class, IDrawningObject + where T : class, IDrawningObject, IEquatable where U : AbstractMap { /// diff --git a/ProjectMachine/ProjectMachine/SetTankGeneric.cs b/ProjectMachine/ProjectMachine/SetTankGeneric.cs index 2cb1432..9d3a8d7 100644 --- a/ProjectMachine/ProjectMachine/SetTankGeneric.cs +++ b/ProjectMachine/ProjectMachine/SetTankGeneric.cs @@ -11,7 +11,7 @@ namespace ProjectMachine /// /// internal class SetTankGeneric - where T : class + where T : class, IEquatable { /// /// Список объектов, которые храним @@ -50,6 +50,8 @@ namespace ProjectMachine /// public int Insert(T tank, int position) { + if (_places.Contains(tank)) + throw new ArgumentException($"Объект {tank} уже есть"); if (Count >= _maxCount) throw new StorageOverflowException(Count); if (position < 0 || position >= _maxCount)