diff --git a/AccordionBus/AccordionBus/DrawningObjectBus.cs b/AccordionBus/AccordionBus/DrawningObjectBus.cs
index 82be0ff..5c56ef6 100644
--- a/AccordionBus/AccordionBus/DrawningObjectBus.cs
+++ b/AccordionBus/AccordionBus/DrawningObjectBus.cs
@@ -39,5 +39,57 @@ namespace AccordionBus
public string GetInfo() => _bus?.GetDataForSave();
public static IDrawningObject Create(string data) => new DrawningObjectBus(data.CreateDrawningBus());
+
+ public bool Equals(IDrawningObject? other)
+ {
+ if (other == null)
+ {
+ return false;
+ }
+ var otherBus = other as DrawningObjectBus;
+ if (otherBus == null)
+ {
+ return false;
+ }
+ var bus = _bus.Bus;
+ var otherBusBus = otherBus._bus.Bus;
+ if (bus.GetType() != otherBusBus.GetType())
+ {
+ return false;
+ }
+ if (bus.Speed != otherBusBus.Speed)
+ {
+ return false;
+ }
+ if (bus.Weight != otherBusBus.Weight)
+ {
+ return false;
+ }
+ if (bus.BodyColor != otherBusBus.BodyColor)
+ {
+ return false;
+ }
+ // проверка в случае продвинутого объекта
+ if (bus is EntityAccordionBus entityAccordionBus && otherBusBus is EntityAccordionBus otherEntityAccordionBus)
+ {
+ if (entityAccordionBus.DopColor != otherEntityAccordionBus.DopColor)
+ {
+ return false;
+ }
+ if (entityAccordionBus.Compartment != otherEntityAccordionBus.Compartment)
+ {
+ return false;
+ }
+ if (entityAccordionBus.RearviewMirror != otherEntityAccordionBus.RearviewMirror)
+ {
+ return false;
+ }
+ if (entityAccordionBus.BusNumber != otherEntityAccordionBus.BusNumber)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
}
}
diff --git a/AccordionBus/AccordionBus/IDrawningObject.cs b/AccordionBus/AccordionBus/IDrawningObject.cs
index d5a475e..8857f2b 100644
--- a/AccordionBus/AccordionBus/IDrawningObject.cs
+++ b/AccordionBus/AccordionBus/IDrawningObject.cs
@@ -10,7 +10,7 @@ namespace AccordionBus
///
/// Интерфейс для работы с объектом, прорисовываемым на форме
///
- internal interface IDrawningObject
+ internal interface IDrawningObject : IEquatable
{
///
/// Шаг перемещения объекта
diff --git a/AccordionBus/AccordionBus/MapWithSetBusesGeneric.cs b/AccordionBus/AccordionBus/MapWithSetBusesGeneric.cs
index 9f71cf2..d3f8e5a 100644
--- a/AccordionBus/AccordionBus/MapWithSetBusesGeneric.cs
+++ b/AccordionBus/AccordionBus/MapWithSetBusesGeneric.cs
@@ -13,7 +13,7 @@ namespace AccordionBus
///
///
internal class MapWithSetBusesGeneric
- where T : class, IDrawningObject
+ where T : class, IDrawningObject, IEquatable
where U : AbstractMap
{
///
diff --git a/AccordionBus/AccordionBus/SetBusesGeneric.cs b/AccordionBus/AccordionBus/SetBusesGeneric.cs
index ac8ebe7..83ef24a 100644
--- a/AccordionBus/AccordionBus/SetBusesGeneric.cs
+++ b/AccordionBus/AccordionBus/SetBusesGeneric.cs
@@ -11,7 +11,7 @@ namespace AccordionBus
///
///
internal class SetBusesGeneric
- where T : class
+ where T : class, IEquatable
{
///
/// Список объектов, которые храним
@@ -49,6 +49,11 @@ namespace AccordionBus
/// Возвращает позицию вставленного объекта, либо -1 если его не удалось вставить
public int Insert(T bus, int position)
{
+ // Проверка на уникальность
+ if (_places.Contains(bus))
+ {
+ return -1;
+ }
//проверка позиции
if (Count == _maxCount)
{