сравнение объектов
This commit is contained in:
parent
e0e57dbd59
commit
cd4cf22b7e
@ -40,5 +40,59 @@ namespace ProjectMachine
|
|||||||
public string GetInfo() => _machine?.GetDataForSave();
|
public string GetInfo() => _machine?.GetDataForSave();
|
||||||
|
|
||||||
public static IDrawningObject Create(string data) => new DrawningObject(data.CreateDrawningMachine());
|
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,8 +9,8 @@ namespace ProjectMachine
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Интерфейс для работы с объектом, прорисовываемым на форме
|
/// Интерфейс для работы с объектом, прорисовываемым на форме
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal interface IDrawningObject
|
internal interface IDrawningObject : IEquatable<IDrawningObject>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Шаг перемещения объекта
|
/// Шаг перемещения объекта
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -12,7 +12,7 @@ namespace ProjectMachine
|
|||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
/// <typeparam name="U"></typeparam>
|
/// <typeparam name="U"></typeparam>
|
||||||
internal class MapWithSetTankGeneric<T, U>
|
internal class MapWithSetTankGeneric<T, U>
|
||||||
where T : class, IDrawningObject
|
where T : class, IDrawningObject, IEquatable<T>
|
||||||
where U : AbstractMap
|
where U : AbstractMap
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -11,7 +11,7 @@ namespace ProjectMachine
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
internal class SetTankGeneric<T>
|
internal class SetTankGeneric<T>
|
||||||
where T : class
|
where T : class, IEquatable<T>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Список объектов, которые храним
|
/// Список объектов, которые храним
|
||||||
@ -50,6 +50,8 @@ namespace ProjectMachine
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public int Insert(T tank, int position)
|
public int Insert(T tank, int position)
|
||||||
{
|
{
|
||||||
|
if (_places.Contains(tank))
|
||||||
|
throw new ArgumentException($"Объект {tank} уже есть");
|
||||||
if (Count >= _maxCount)
|
if (Count >= _maxCount)
|
||||||
throw new StorageOverflowException(Count);
|
throw new StorageOverflowException(Count);
|
||||||
if (position < 0 || position >= _maxCount)
|
if (position < 0 || position >= _maxCount)
|
||||||
|
Loading…
Reference in New Issue
Block a user