/// <summary> /// Стандартный конструктор без параметров /// </summary> public AppModel() { //загружаем основные настройки AppSettingsPath = AppInfoConsts.GameplaySettingsPath; bool settingsLoadingResult = AppSerializationManager.LoadDataFromFileSafe <GameplaySettingsData>(AppSettingsPath, out _appGameplaySettingsData); if (!settingsLoadingResult) { _appGameplaySettingsData = GameplaySettingsData.GetDefaultSettings(); } //настройки (даже свежезагруженные) нужно сохранить, чтобы убедится, что новые добавленные разработчиком //пункты также были отражены в файле AppSerializationManager.SaveDataToFile <GameplaySettingsData>(_appGameplaySettingsData, AppSettingsPath); //загружаем рекорды игроков bool recordsLoadingResult = AppSerializationManager.LoadDataFromFileSafe(AppRecordsPath, out _appRecordsData); if (!recordsLoadingResult) { _appRecordsData = RecordsData.GetStandardRecords(); } _appRecordsData.CheckAndApplyConstraints(); //рекорды (даже свежезагруженные) нужно сохранить, чтобы убедится, что новые добавленные разработчиком //дополнительные поля также были отражены в файле AppSerializationManager.SaveDataToFile(_appRecordsData, AppRecordsPath); }
/// <summary> /// Действия для очистки таблицы рекордов /// </summary> private void RecordsClear() { ParentGameObject.LinkedAppModel.GetRecordsData().SetDefaultValues(); AppSerializationManager.SaveDataToFile(ParentGameObject.LinkedAppModel.GetRecordsData(), ParentGameObject.LinkedAppModel.GetRecordsDataPath()); ViewUpdateSignal(0.0); }
/// <summary> /// Действия по вызову смены настройки стартовой заставки /// </summary> private void ChangeIntroCutsceneMode() { bool newValue = !ParentGameObject.LinkedAppModel.GetGameplaySettingsData().IsIntroDisabled; ParentGameObject.LinkedAppModel.GetGameplaySettingsData().IsIntroDisabled = newValue; AppSerializationManager.SaveDataToFile(ParentGameObject.LinkedAppModel.GetGameplaySettingsData(), ParentGameObject.LinkedAppModel.GetAppSettingsPath()); ViewUpdateSignal(0.0); }
/// <summary> /// Создает файл со стандартными настройками отображения /// </summary> public override void CreateDefaultGraphicalSettings() { GraphicsSettingsDataOpenTk graphicsSettingsDataOpenTk = new GraphicsSettingsDataOpenTk(); Console.WriteLine(graphicsSettingsDataOpenTk.SettingScreenResolution.Width); CurrentGraphicsSettings = graphicsSettingsDataOpenTk; //сразу же сериализуем их AppSerializationManager.SaveDataToFile <GraphicsSettingsDataOpenTk>(graphicsSettingsDataOpenTk, GraphicalSettingsPath); }
/// <summary> /// Действия при изменении режима отображения /// </summary> private void OnScreenModeChanged() { var graphicsSettings = (GraphicsSettingsDataOpenTk)LinkedViewEventsHandler.LinkedView.CurrentGraphicsSettings; bool isFullscreenEnabledNewValue = !graphicsSettings.IsFullscreen; graphicsSettings.IsFullscreen = isFullscreenEnabledNewValue; AppSerializationManager.SaveDataToFile(graphicsSettings, LinkedViewEventsHandler.LinkedView.GraphicalSettingsPath); }
/// <summary> /// Осуществляет загрузку настроек отображения /// </summary> public override void LoadSettings() { if (!File.Exists(GraphicalSettingsPath)) { CreateDefaultGraphicalSettings(); } var loaded = AppSerializationManager.LoadDataFromFile <GraphicsSettingsDataOpenTk>(GraphicalSettingsPath); CurrentGraphicsSettings = loaded; AppSerializationManager.SaveDataToFile(CurrentGraphicsSettings, GraphicalSettingsPath); }
/// <summary> /// Действия по вызову смены настройки музыки /// </summary> private void ChangeMusicMode() { bool newValue = !ParentGameObject.LinkedAppModel.GetGameplaySettingsData().IsMusicEnabled; ParentGameObject.LinkedAppModel.GetGameplaySettingsData().IsMusicEnabled = newValue; AppSerializationManager.SaveDataToFile(ParentGameObject.LinkedAppModel.GetGameplaySettingsData(), ParentGameObject.LinkedAppModel.GetAppSettingsPath()); if (!newValue) { ParentGameObject.LinkedAppModel.GetSoundManager().StopMusic(); } else { ParentGameObject.LinkedAppModel.GetSoundManager().PlayBgMusic(EAppMusicAssets.MainMenu, true); } ViewUpdateSignal(0.0); }
/// <summary> /// Сигнал фиксированного обновления модели (используется преимущественно для обработки физики и ввода) /// </summary> /// <param name="parFixedDeltaTime">Время шага фиксированного обновления в секундах</param> public override void FixedUpdate(double parFixedDeltaTime) { switch (CurrentStage) { case EResultsScreenStage.ChooseNextAction: { if (_playersManager.IsActionButtonPressed(_mainPlayer)) { if (IsBankAndExitActionSelected) { //check if can get into the records if (ParentGameObject.LinkedAppModel.GetRecordsData().PlayerRecordsInfo.Last().PointsEarned < PlayerActualData.Score) { //can be added to the records _playersManager.ClearLastPressedKeyboardKey(); CurrentStage = EResultsScreenStage.ChooseNameForTheRecords; } else { ScreenClose(EResultsScreenFinalChoice.BankAndExit); } } else { ScreenClose(EResultsScreenFinalChoice.ContinuePlaying); } } else { if (_playersManager.IsButtonPressed(_mainPlayer, EGameActionButton.Dpad_Menu_Up) || _playersManager.IsButtonPressed(_mainPlayer, EGameActionButton.Dpad_Menu_Down)) { IsBankAndExitActionSelected = !IsBankAndExitActionSelected; } } break; } case EResultsScreenStage.ChooseNameForTheRecords: { if (_playersManager.IsButtonPressed(_mainPlayer, EGameActionButton.Button_Start)) { //confirm name and place to the records ParentGameObject.LinkedAppModel.GetRecordsData() .TryAddRecord(new RecordPlayerInfo(PlayerActualData.Score, CurrentPlayerName)); AppSerializationManager.SaveDataToFile(ParentGameObject.LinkedAppModel.GetRecordsData(), ParentGameObject.LinkedAppModel.GetRecordsDataPath()); ScreenClose(EResultsScreenFinalChoice.BankAndExit); } else { if (_playersManager.LastPressedKeyboardKey != "") { if (_playersManager.LastPressedKeyboardKey == MPlayersManager.SPECIAL_BACKSPACE_SIGNATURE) { if (CurrentPlayerName.Length > 0) { CurrentPlayerName = CurrentPlayerName.Remove(CurrentPlayerName.Length - 1, 1); } } else { if (CurrentPlayerName.Length < RecordPlayerInfo.MAX_CHARS_IN_NAME) { CurrentPlayerName = CurrentPlayerName + _playersManager.LastPressedKeyboardKey; } } _playersManager.ClearLastPressedKeyboardKey(); } } break; } default: throw new ArgumentOutOfRangeException(); } }