Реализован интерфейс итераторов для 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.Top));
|
||||||
g.DrawLine(pen, baseTail, new PointF(r.Right, r.Bottom));
|
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>
|
||||||
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
|
/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class DrawningAirplane
|
public class DrawningAirplane : IEnumerator<object>, IEnumerable<object>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Класс-сущность
|
/// Класс-сущность
|
||||||
@ -11,6 +14,11 @@
|
|||||||
public EntityAirplane Airplane { get; protected set; }
|
public EntityAirplane Airplane { get; protected set; }
|
||||||
|
|
||||||
public IAirplaneEngines? DrawningEngines { get; protected set; }
|
public IAirplaneEngines? DrawningEngines { get; protected set; }
|
||||||
|
|
||||||
|
private IEnumerator<object>? _machineStateEnum = null;
|
||||||
|
|
||||||
|
public object Current => _machineStateEnum?.Current;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Левая координата отрисовки самолета
|
/// Левая координата отрисовки самолета
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -97,7 +105,7 @@
|
|||||||
_pictureHeight = height;
|
_pictureHeight = height;
|
||||||
// Проверка на нахождение предмета полностью в границах окна
|
// Проверка на нахождение предмета полностью в границах окна
|
||||||
if (width <= _airplaneWidth || height <= _airplaneHeight
|
if (width <= _airplaneWidth || height <= _airplaneHeight
|
||||||
|| _startPosX < 0 || _startPosX + _airplaneWidth > width ||
|
|| _startPosX < 0 || _startPosX + _airplaneWidth > width ||
|
||||||
_startPosY < 0 || _startPosY + _airplaneHeight > height)
|
_startPosY < 0 || _startPosY + _airplaneHeight > height)
|
||||||
{
|
{
|
||||||
_pictureWidth = null;
|
_pictureWidth = null;
|
||||||
@ -170,7 +178,7 @@
|
|||||||
});
|
});
|
||||||
// Тело самолета
|
// Тело самолета
|
||||||
g.FillRectangle(BodyColorBrush, x + 15, y + h / 2 - 7, w - 35, 15);
|
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);
|
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);
|
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