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 } }