Danro-Jump/Assets/Scripts/Runtime/Settings/Core/ServiceSettingsActions.cs
Danil Iarosh 1f6884c5ac Build gameplay systems and service settings
Подробные изменения:
- Добавлены и доработаны модальные окна главного меню, сервисные настройки, шаблоны UI Toolkit и единый scene-flow сервис для переходов между сценами.
- Расширена gameplay-архитектура: сессия забега, HUD, спавн контента платформ, collectible-предметы, оборудование, хрупкие и движущиеся платформы.
- Добавлена база противников: типы спавна, патрулирование, процедурный спавнер, правила размещения через ScriptableObject-сложности и убийство врагов прыжком сверху.
- Исправлены смерть и respawn игрока, финальный GameOver, отскоки от врагов, пружин и boost-предметов, а также проход сквозь врагов при усиленном подъеме.
- Проведен рефакторинг взаимодействия систем: общий landing context, единые правила player-contact, NonLazy gameplay session, fail-fast installer и централизованный выбор точек спавна.
- Обновлены сцены, prefab-ассеты, difficulty stages, ресурсы главного меню, настройки проекта, roadmap и аппаратная COM-интеграция.
- Добавлены ассеты летучей мыши, врагов, collectibles, TextMesh Pro, ProjectContext и gameplay UI.

Проверки:
- dotnet build .\\Assembly-CSharp.csproj --no-restore
- Unity validation ключевых gameplay/UI/scene-flow скриптов
- Unity Console после force refresh без ошибок
2026-05-27 16:34:51 +03:00

136 lines
4.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using Zenject;
using DanroJump.SceneFlow;
namespace DanroJump.Settings
{
/// <summary>
/// MonoBehaviour-фасад для вызова действий сервиса настроек из UI/Unity Events.
/// </summary>
public sealed class ServiceSettingsActions : MonoBehaviour
{
private IServiceSettingsService settings;
private ISceneFlowService sceneFlow;
private bool ownsSceneFlow;
/// <summary>
/// Получает сервис настроек через Extenject.
/// </summary>
[Inject]
public void Construct(
IServiceSettingsService injectedSettings,
[InjectOptional] ISceneFlowService injectedSceneFlow = null)
{
settings = injectedSettings;
sceneFlow = injectedSceneFlow;
}
/// <summary>
/// Вручную назначает сервис настроек, если объект используется вне DI.
/// </summary>
public void Configure(IServiceSettingsService service)
{
settings = service;
}
/// <summary>
/// Сохраняет настройки.
/// </summary>
public void Save()
{
settings?.Save();
}
/// <summary>
/// Перечитывает настройки, разрешенные для изменения через внешний JSON.
/// </summary>
public void ReloadExternalChanges()
{
settings?.ReloadExternalChanges();
}
/// <summary>
/// Повторно применяет текущие значения настроек.
/// </summary>
public void ApplyAll()
{
settings?.ApplyAll();
}
/// <summary>
/// Сбрасывает все настройки к значениям по умолчанию.
/// </summary>
public void ResetAllToDefaults()
{
settings?.ResetAllToDefaults();
}
/// <summary>
/// Сбрасывает одну группу настроек к значениям по умолчанию.
/// </summary>
public void ResetGroupToDefaults(string groupName)
{
settings?.ResetGroupToDefaults(groupName);
}
/// <summary>
/// Открывает папку persistentDataPath с внешним JSON настроек.
/// </summary>
public void OpenPersistentDataFolder()
{
Application.OpenURL($"file://{Application.persistentDataPath}");
}
/// <summary>
/// Загружает сцену по имени.
/// </summary>
public void LoadScene(string sceneName)
{
if (!string.IsNullOrWhiteSpace(sceneName))
{
GetSceneFlow().LoadScene(sceneName);
}
}
/// <summary>
/// Возвращает приложение в главное меню.
/// </summary>
public void LoadMainMenu()
{
GetSceneFlow().OpenMainMenu();
}
private ISceneFlowService GetSceneFlow()
{
if (sceneFlow != null)
{
return sceneFlow;
}
sceneFlow = new SceneFlowService();
ownsSceneFlow = true;
return sceneFlow;
}
private void OnDestroy()
{
if (ownsSceneFlow && sceneFlow is System.IDisposable disposable)
{
disposable.Dispose();
}
}
/// <summary>
/// Завершает приложение или останавливает Play Mode в редакторе.
/// </summary>
public void QuitApplication()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
}
}