agrobot_base/AgroBase/OperationControl/Mapas/Creation/MapaEstadoCriacao.cs

63 lines
2.2 KiB
C#

using static AgroBase.Models.Enums;
namespace OperationControl.Mapas.Creation
{
/// <summary>
/// Estado transitório da criação de mapa.
/// Não altera o Workspace até o operador explicitamente concluir.
/// </summary>
public sealed class MapaEstadoCriacao
{
private readonly List<MapaRuaCriacao> _ruas = new();
public bool EmCriacao { get; internal set; }
public string Nome { get; internal set; } = string.Empty;
public TipoMapaOperacao Tipo { get; internal set; } = TipoMapaOperacao.Indefinido;
public MapaModoCapturaCriacao ModoCaptura { get; internal set; } = MapaModoCapturaCriacao.Manual;
public bool GravacaoAutomaticaAtiva { get; internal set; }
public double DistanciaMinimaCapturaAutomaticaMetros { get; internal set; } = 0.50;
public int IndiceRuaAtual { get; internal set; }
public IReadOnlyList<MapaRuaCriacao> Ruas => _ruas;
internal List<MapaRuaCriacao> RuasMutaveis => _ruas;
public int QuantidadeRuas => _ruas.Count;
public int QuantidadeRuasValidas => _ruas.Count(x => x != null && x.Valida);
public int QuantidadePontosTotal => _ruas.Sum(x => x?.QuantidadePontos ?? 0);
public MapaRuaCriacao? RuaAtual
{
get
{
if (IndiceRuaAtual < 0 || IndiceRuaAtual >= _ruas.Count)
return null;
return _ruas[IndiceRuaAtual];
}
}
public bool PodeCriarNovaRua =>
EmCriacao &&
!GravacaoAutomaticaAtiva &&
RuaAtual?.Valida == true;
public bool PodeSalvar =>
EmCriacao &&
!GravacaoAutomaticaAtiva &&
_ruas.Count > 0 &&
_ruas.All(x => x != null && x.Valida);
internal void Limpar()
{
_ruas.Clear();
EmCriacao = false;
Nome = string.Empty;
Tipo = TipoMapaOperacao.Indefinido;
ModoCaptura = MapaModoCapturaCriacao.Manual;
GravacaoAutomaticaAtiva = false;
DistanciaMinimaCapturaAutomaticaMetros = 0.50;
IndiceRuaAtual = 0;
}
}
}