PIbd-22_Shabunov_O.A._AirBo.../AirBomber/MovementStrategy/AbstractStrategy.cs

77 lines
2.0 KiB
C#

namespace AirBomber.MovementStrategy
{
public abstract class AbstractStrategy
{
private IMovableObject? _movableObject;
private Status _state = Status.NotInit;
protected int FieldWidth { get; private set; }
protected int FieldHeight { get; private set; }
public Status GetStatus() { return _state; }
public void SetData(IMovableObject MovableObject, int Width, int Height)
{
if (MovableObject is null)
{
_state = Status.NotInit;
return;
}
_state = Status.InProgress;
_movableObject = MovableObject;
FieldWidth = Width;
FieldHeight = Height;
}
public void MakeStep()
{
if (_state != Status.InProgress)
return;
if (IsTargetDestination())
{
_state = Status.Finish;
return;
}
MoveToTarget();
}
protected bool MoveLeft() => MoveTo(DirectionType.Left);
protected bool MoveRight() => MoveTo(DirectionType.Right);
protected bool MoveUp() => MoveTo(DirectionType.Up);
protected bool MoveDown() => MoveTo(DirectionType.Down);
protected ObjectParameters? ObjectParameters => _movableObject?.ObjectPosition;
protected int? GetStep()
{
if (_state != Status.InProgress)
return null;
return _movableObject?.Step;
}
protected abstract void MoveToTarget();
protected abstract bool IsTargetDestination();
private bool MoveTo(DirectionType DirectionType)
{
if (_state != Status.InProgress)
return false;
if (_movableObject?.CanMove(DirectionType) ?? false)
{
_movableObject.MoveObject(DirectionType);
return true;
}
return false;
}
}
}