using System;
namespace AGVSimulator.Models
{
///
/// 시뮬레이션 상태 관리 클래스
///
public class SimulationState
{
#region Properties
///
/// 시뮬레이션 실행 중 여부
///
public bool IsRunning { get; set; }
///
/// 시뮬레이션 시작 시간
///
public DateTime? StartTime { get; set; }
///
/// 시뮬레이션 경과 시간
///
public TimeSpan ElapsedTime => StartTime.HasValue ? DateTime.Now - StartTime.Value : TimeSpan.Zero;
///
/// 시뮬레이션 속도 배율 (1.0 = 실시간, 2.0 = 2배속)
///
public float SpeedMultiplier { get; set; } = 1.0f;
///
/// 총 처리된 이벤트 수
///
public int TotalEvents { get; set; }
///
/// 총 이동 거리 (모든 AGV 합계)
///
public float TotalDistance { get; set; }
///
/// 발생한 오류 수
///
public int ErrorCount { get; set; }
#endregion
#region Constructor
///
/// 기본 생성자
///
public SimulationState()
{
Reset();
}
#endregion
#region Public Methods
///
/// 시뮬레이션 시작
///
public void Start()
{
if (!IsRunning)
{
IsRunning = true;
StartTime = DateTime.Now;
}
}
///
/// 시뮬레이션 정지
///
public void Stop()
{
IsRunning = false;
}
///
/// 시뮬레이션 상태 초기화
///
public void Reset()
{
IsRunning = false;
StartTime = null;
SpeedMultiplier = 1.0f;
TotalEvents = 0;
TotalDistance = 0;
ErrorCount = 0;
}
///
/// 이벤트 발생 시 호출
///
public void RecordEvent()
{
TotalEvents++;
}
///
/// 이동 거리 추가
///
/// 이동한 거리
public void AddDistance(float distance)
{
TotalDistance += distance;
}
///
/// 오류 발생 시 호출
///
public void RecordError()
{
ErrorCount++;
}
///
/// 통계 정보 조회
///
/// 통계 정보 문자열
public string GetStatistics()
{
return $"실행시간: {ElapsedTime:hh\\:mm\\:ss}, " +
$"이벤트: {TotalEvents}, " +
$"총거리: {TotalDistance:F1}, " +
$"오류: {ErrorCount}";
}
#endregion
}
}