using System;
using System.Collections.Generic;
namespace AGVNavigationCore.PathFinding
{
///
/// 경로 계산 결과
///
public class PathResult
{
///
/// 경로 찾기 성공 여부
///
public bool Success { get; set; }
///
/// 경로 노드 ID 목록 (시작 → 목적지 순서)
///
public List Path { get; set; }
///
/// 총 거리
///
public float TotalDistance { get; set; }
///
/// 계산 소요 시간 (밀리초)
///
public long CalculationTimeMs { get; set; }
///
/// 탐색한 노드 수
///
public int ExploredNodeCount { get; set; }
///
/// 오류 메시지 (실패시)
///
public string ErrorMessage { get; set; }
///
/// 기본 생성자
///
public PathResult()
{
Success = false;
Path = new List();
TotalDistance = 0;
CalculationTimeMs = 0;
ExploredNodeCount = 0;
ErrorMessage = string.Empty;
}
///
/// 성공 결과 생성
///
/// 경로
/// 총 거리
/// 계산 시간
/// 탐색 노드 수
/// 성공 결과
public static PathResult CreateSuccess(List path, float totalDistance, long calculationTimeMs, int exploredNodeCount)
{
return new PathResult
{
Success = true,
Path = new List(path),
TotalDistance = totalDistance,
CalculationTimeMs = calculationTimeMs,
ExploredNodeCount = exploredNodeCount
};
}
///
/// 실패 결과 생성
///
/// 오류 메시지
/// 계산 시간
/// 탐색 노드 수
/// 실패 결과
public static PathResult CreateFailure(string errorMessage, long calculationTimeMs, int exploredNodeCount)
{
return new PathResult
{
Success = false,
ErrorMessage = errorMessage,
CalculationTimeMs = calculationTimeMs,
ExploredNodeCount = exploredNodeCount
};
}
///
/// 문자열 표현
///
public override string ToString()
{
if (Success)
{
return $"Success: {Path.Count} nodes, {TotalDistance:F1}px, {CalculationTimeMs}ms";
}
else
{
return $"Failed: {ErrorMessage}, {CalculationTimeMs}ms";
}
}
}
}