/
Landilf
/
2413_Ryumin_CourseWork
Обзор
Документация
Войти
/
Landilf
/
2413_Ryumin_CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
project
CourseWork/GameCore/GameSession.cs
126 строк
3 KB
Landilf
add project
27 янв 2026, 13:57
27 янв 2026, 13:57
753b3e7
Код
Авторство
О чём код?
namespace GameCore; /// <summary> /// Управляет хронологией и состоянием текущей игровой сессии (время, отсчеты). /// </summary> public class GameSession { #region Поля /// <summary> /// Время фактического начала игры. /// </summary> private DateTime _startTime; /// <summary> /// Время начала текущей паузы. /// </summary> private DateTime? _pauseStartTime; /// <summary> /// Время фиксации окончания игры (победа/поражение). /// </summary> private DateTime? _endTime; /// <summary> /// Количество тиков обратного отсчета. /// </summary> private int _countdownTicks; #endregion #region Свойства /// <summary>Текущее значение обратного отсчета (сек).</summary> public int CountdownValue => (_countdownTicks + GameConfig.TICKS_PER_COUNTDOWN_NUMBER - 1) / GameConfig.TICKS_PER_COUNTDOWN_NUMBER; /// <summary>Активен ли сейчас обратный отсчет.</summary> public bool IsCountdownActive => _countdownTicks > 0; #endregion #region Методы /// <summary> /// Инициализирует новую сессию. /// </summary> public void Start() { _startTime = DateTime.Now; _pauseStartTime = null; _endTime = null; _countdownTicks = 0; } /// <summary> /// Останавливает сессию, фиксируя финальное время. /// </summary> public void Stop() { if (_endTime == null) { _endTime = DateTime.Now; } } /// <summary> /// Фиксирует начало паузы. /// </summary> public void Pause() { if (_pauseStartTime == null && _endTime == null) { _pauseStartTime = DateTime.Now; } } /// <summary> /// Запускает процесс возобновления с обратным отсчетом. /// </summary> public void Resume() { if (_endTime != null) { return; } if (_pauseStartTime.HasValue) { var pauseDuration = DateTime.Now - _pauseStartTime.Value; _startTime = _startTime.Add(pauseDuration); _pauseStartTime = null; } _countdownTicks = GameConfig.RESUME_COUNTDOWN_TICKS; } /// <summary> /// Обновляет состояние сессии (уменьшает отсчет). /// </summary> /// <returns>True, если отсчет активен и был уменьшен.</returns> public bool UpdateCountdown() { if (_countdownTicks > 0) { _countdownTicks--; return true; } return false; } /// <summary> /// Возвращает текущую чистую длительность игры. /// </summary> public TimeSpan GetDuration() { var end = _endTime ?? DateTime.Now; var baseDuration = end - _startTime; if (_pauseStartTime.HasValue && _endTime == null) { baseDuration -= (DateTime.Now - _pauseStartTime.Value); } return baseDuration; } #endregion }