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) {