/
Landilf
/
2413_Ryumin_CourseWork
Обзор
Документация
Войти
/
Landilf
/
2413_Ryumin_CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
CourseWork/GUI/ViewModels/PauseMenuViewModel.cs
132 строки
3 KB
Landilf
add project
27 янв 2026, 13:57
27 янв 2026, 13:57
753b3e7
Код
Авторство
О чём код?
using System.Collections.ObjectModel; using ReactiveUI; using GameCore.Resources; namespace GUI.ViewModels; /// <summary> /// Модель представления меню паузы. /// </summary> public class PauseMenuViewModel : ViewModelBase { #region Поля /// <summary> /// Ссылка на главную модель. /// </summary> private readonly MainViewModel _mainViewModel; /// <summary> /// Индекс выбранного пункта. /// </summary> private int _selectedIndex; #endregion #region Свойства /// <summary> /// Элементы меню. /// </summary> public ObservableCollection<MenuItemVm> MenuItems { get; } /// <summary> /// Индекс выбранного пункта. /// </summary> public int SelectedIndex { get => _selectedIndex; set { this.RaiseAndSetIfChanged(ref _selectedIndex, value); UpdateSelection(); } } #endregion #region Конструкторы /// <summary> /// Конструктор. /// </summary> /// <param name="parMainViewModel">Главная модель.</param> public PauseMenuViewModel(MainViewModel parMainViewModel) { _mainViewModel = parMainViewModel; MenuItems = [ new() { Title = Strings.PauseMenuResume }, new() { Title = Strings.PauseMenuRestart }, new() { Title = Strings.PauseMenuToMenu } ]; SelectedIndex = 0; UpdateSelection(); } #endregion #region Методы /// <summary> /// Обновляет выделение. /// </summary> private void UpdateSelection() { for (int i = 0; i < MenuItems.Count; i++) { MenuItems[i].IsSelected = i == SelectedIndex; } } /// <summary> /// Перемещение вверх. /// </summary> public void MoveUp() { SelectedIndex = (SelectedIndex - 1 + MenuItems.Count) % MenuItems.Count; } /// <summary> /// Перемещение вниз. /// </summary> public void MoveDown() { SelectedIndex = (SelectedIndex + 1) % MenuItems.Count; } /// <summary> /// Сброс выделения в начало. /// </summary> public void Reset() { SelectedIndex = 0; } /// <summary> /// Выбор пункта. /// </summary> public void Select() { switch (SelectedIndex) { case 0: _mainViewModel.ResumeGame(); break; case 1: _mainViewModel.ShowConfirmation( Strings.PromptRestartGame, () => _mainViewModel.GoToGame() ); break; case 2: _mainViewModel.ShowConfirmation( Strings.PromptExitToMenu, () => _mainViewModel.GoToMenu() ); break; } } #endregion }