diff --git a/DoubleDeckerBus/DoubleDeckerBus/DrawningObjectBus.cs b/DoubleDeckerBus/DoubleDeckerBus/DrawningObjectBus.cs index 3fc5f97..e45f1f3 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/DrawningObjectBus.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/DrawningObjectBus.cs @@ -36,5 +36,61 @@ namespace DoubleDeckerBus { return 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().Name != otherBusBus.GetType().Name) + { + 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 EntityDoubleDeckerBus DoubleDeckerBus && otherBusBus is EntityDoubleDeckerBus otherDoubleDeckerBus) + { + + if (DoubleDeckerBus.Stair != otherDoubleDeckerBus.Stair) + { + return false; + } + + if (DoubleDeckerBus.SecondFloor != otherDoubleDeckerBus.SecondFloor) + { + return false; + } + if (DoubleDeckerBus.BodyKit != otherDoubleDeckerBus.BodyKit) + { + return false; + } + if (DoubleDeckerBus.DopColor != otherDoubleDeckerBus.DopColor) + { + return false; + } + + } + + return true; + } } } diff --git a/DoubleDeckerBus/DoubleDeckerBus/IDrawningObject.cs b/DoubleDeckerBus/DoubleDeckerBus/IDrawningObject.cs index 48520e0..0a5b174 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/IDrawningObject.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/IDrawningObject.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace DoubleDeckerBus { - internal interface IDrawningObject + internal interface IDrawningObject : IEquatable { /// /// Шаг перемещения объекта diff --git a/DoubleDeckerBus/DoubleDeckerBus/MapWithSetBusesGeneric.cs b/DoubleDeckerBus/DoubleDeckerBus/MapWithSetBusesGeneric.cs index 77aa5f1..e4e83b2 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/MapWithSetBusesGeneric.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/MapWithSetBusesGeneric.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace DoubleDeckerBus { internal class MapWithSetBusesGeneric - where T : class, IDrawningObject + where T : class, IDrawningObject, IEquatable where U : AbstractMap { /// diff --git a/DoubleDeckerBus/DoubleDeckerBus/SetBusesGeneric.cs b/DoubleDeckerBus/DoubleDeckerBus/SetBusesGeneric.cs index d27f58d..9831230 100644 --- a/DoubleDeckerBus/DoubleDeckerBus/SetBusesGeneric.cs +++ b/DoubleDeckerBus/DoubleDeckerBus/SetBusesGeneric.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace DoubleDeckerBus { internal class SetBusesGeneric - where T : class + where T : class, IEquatable { /// /// Список объектов, которые храним @@ -45,11 +45,17 @@ namespace DoubleDeckerBus /// public int Insert(T bus, int position) { + if (_places.Contains(bus)) + { + throw new ArgumentException("Такой автобус уже существует"); + } + if (position < 0 || position >= _maxCount) { throw new BusNotFoundException("Место указано неверно"); } + BusyPlaces++; _places.Insert(position, bus); return position;