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)