сравнение объектов
This commit is contained in:
parent
e0e57dbd59
commit
cd4cf22b7e
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ namespace ProjectMachine
|
||||
/// <summary>
|
||||
/// Интерфейс для работы с объектом, прорисовываемым на форме
|
||||
/// </summary>
|
||||
internal interface IDrawningObject
|
||||
internal interface IDrawningObject : IEquatable<IDrawningObject>
|
||||
{
|
||||
/// <summary>
|
||||
/// Шаг перемещения объекта
|
||||
|
@ -12,7 +12,7 @@ namespace ProjectMachine
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <typeparam name="U"></typeparam>
|
||||
internal class MapWithSetTankGeneric<T, U>
|
||||
where T : class, IDrawningObject
|
||||
where T : class, IDrawningObject, IEquatable<T>
|
||||
where U : AbstractMap
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -11,7 +11,7 @@ namespace ProjectMachine
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
internal class SetTankGeneric<T>
|
||||
where T : class
|
||||
where T : class, IEquatable<T>
|
||||
{
|
||||
/// <summary>
|
||||
/// Список объектов, которые храним
|
||||
@ -50,6 +50,8 @@ namespace ProjectMachine
|
||||
/// <returns></returns>
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user