Реализован интерфейс итераторов для Airplane и AirBomber
This commit is contained in:
parent
8c6ce67917
commit
0f9caec5c3
@ -80,5 +80,23 @@ namespace AirBomber
|
||||
g.DrawLine(pen, baseTail, new PointF(r.Right, r.Top));
|
||||
g.DrawLine(pen, baseTail, new PointF(r.Right, r.Bottom));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает итератор со свойствами самолета в порядке:
|
||||
/// Скорость -> Вес -> Цвет корпуса -> Тип двигателя, либо null если их нет -> Количество двигателей -> Дополнительный цвет -> Наличие бомб -> Наличие топливных баков
|
||||
/// </summary>
|
||||
public override IEnumerator<object> GetEnumerator()
|
||||
{
|
||||
IEnumerator<object> enumBase = base.GetEnumerator();
|
||||
while (enumBase.MoveNext())
|
||||
{
|
||||
yield return enumBase.Current;
|
||||
}
|
||||
var entity = (EntityAirBomber)Airplane;
|
||||
yield return entity.DopColor;
|
||||
yield return entity.HasBombs;
|
||||
yield return entity.HasFuelTanks;
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,12 @@
|
||||
namespace AirBomber
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using System.Collections;
|
||||
|
||||
namespace AirBomber
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
|
||||
/// </summary>
|
||||
public class DrawningAirplane
|
||||
public class DrawningAirplane : IEnumerator<object>, IEnumerable<object>
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс-сущность
|
||||
@ -11,6 +14,11 @@
|
||||
public EntityAirplane Airplane { get; protected set; }
|
||||
|
||||
public IAirplaneEngines? DrawningEngines { get; protected set; }
|
||||
|
||||
private IEnumerator<object>? _machineStateEnum = null;
|
||||
|
||||
public object Current => _machineStateEnum?.Current;
|
||||
|
||||
/// <summary>
|
||||
/// Левая координата отрисовки самолета
|
||||
/// </summary>
|
||||
@ -97,7 +105,7 @@
|
||||
_pictureHeight = height;
|
||||
// Проверка на нахождение предмета полностью в границах окна
|
||||
if (width <= _airplaneWidth || height <= _airplaneHeight
|
||||
|| _startPosX < 0 || _startPosX + _airplaneWidth > width ||
|
||||
|| _startPosX < 0 || _startPosX + _airplaneWidth > width ||
|
||||
_startPosY < 0 || _startPosY + _airplaneHeight > height)
|
||||
{
|
||||
_pictureWidth = null;
|
||||
@ -170,7 +178,7 @@
|
||||
});
|
||||
// Тело самолета
|
||||
g.FillRectangle(BodyColorBrush, x + 15, y + h / 2 - 7, w - 35, 15);
|
||||
DrawWing(g, BodyColorBrush, new PointF(x + w / 2 - 20, y + h / 2 - 7), new PointF(x + w / 2, y + h / 2 - 7), true , h / 2 - 7);
|
||||
DrawWing(g, BodyColorBrush, new PointF(x + w / 2 - 20, y + h / 2 - 7), new PointF(x + w / 2, y + h / 2 - 7), true, h / 2 - 7);
|
||||
DrawWing(g, BodyColorBrush, new PointF(x + w / 2 - 20, y + h / 2 + 7), new PointF(x + w / 2, y + h / 2 + 7), false, h / 2 - 7);
|
||||
|
||||
// Линия примыкающая к хвосту слева
|
||||
@ -241,5 +249,34 @@
|
||||
{
|
||||
return new(_startPosX, _startPosY, _airplaneWidth, _airplaneHeight);
|
||||
}
|
||||
|
||||
public bool MoveNext()
|
||||
{
|
||||
if (_machineStateEnum == null)
|
||||
{
|
||||
_machineStateEnum = GetEnumerator();
|
||||
}
|
||||
return _machineStateEnum.MoveNext();
|
||||
}
|
||||
|
||||
public void Reset() => throw new NotSupportedException();
|
||||
|
||||
public void Dispose() => GC.SuppressFinalize(this);
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает итератор со свойствами самолета в порядке:
|
||||
/// Скорость -> Вес -> Цвет корпуса -> Тип двигателя, либо null если их нет -> Количество двигателей
|
||||
/// </summary>
|
||||
virtual public IEnumerator<object> GetEnumerator()
|
||||
{
|
||||
yield return Airplane.Speed;
|
||||
yield return Airplane.Weight;
|
||||
yield return Airplane.BodyColor;
|
||||
yield return DrawningEngines;
|
||||
yield return DrawningEngines?.CountEngines ?? 0;
|
||||
yield break;
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user