Подробные изменения: - Добавлены и доработаны модальные окна главного меню, сервисные настройки, шаблоны 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 без ошибок
98 lines
3.3 KiB
C#
98 lines
3.3 KiB
C#
using UnityEngine;
|
|
|
|
namespace DanroJump.Settings
|
|
{
|
|
/// <summary>
|
|
/// Автономный bootstrap-компонент сервисных настроек для сцен без ProjectContext installer.
|
|
/// </summary>
|
|
[DefaultExecutionOrder(-900)]
|
|
public sealed class ServiceSettingsBehaviour : MonoBehaviour
|
|
{
|
|
[SerializeField] private string databaseAddress = ServiceSettingsAddressKeys.Database;
|
|
[SerializeField] private ServiceSettingsDatabase fallbackDatabase;
|
|
[SerializeField] private string fileName = "service-settings.json";
|
|
[SerializeField] private bool loadOnAwake = true;
|
|
[SerializeField] private bool dontDestroyOnLoad = true;
|
|
[SerializeField] private bool saveOnApplicationQuit = true;
|
|
|
|
private static ServiceSettingsBehaviour instance;
|
|
private IServiceSettingsDatabaseProvider databaseProvider;
|
|
/// <summary>
|
|
/// Созданный runtime-сервис настроек.
|
|
/// </summary>
|
|
public IServiceSettingsService Service { get; private set; }
|
|
|
|
/// <summary>
|
|
/// Создает сервис настроек и при необходимости загружает сохраненные значения.
|
|
/// </summary>
|
|
private void Awake()
|
|
{
|
|
if (dontDestroyOnLoad)
|
|
{
|
|
if (instance != null && instance != this)
|
|
{
|
|
Debug.LogWarning(
|
|
$"[{nameof(ServiceSettingsBehaviour)}] Another persistent instance already exists. Destroying duplicate.",
|
|
this);
|
|
Destroy(gameObject);
|
|
return;
|
|
}
|
|
|
|
instance = this;
|
|
DontDestroyOnLoad(gameObject);
|
|
}
|
|
|
|
Service = CreateService();
|
|
|
|
if (loadOnAwake)
|
|
{
|
|
Service?.Load();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Сохраняет настройки при выходе из приложения.
|
|
/// </summary>
|
|
private void OnApplicationQuit()
|
|
{
|
|
if (saveOnApplicationQuit)
|
|
{
|
|
Service?.Save();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Освобождает provider базы настроек.
|
|
/// </summary>
|
|
private void OnDestroy()
|
|
{
|
|
if (instance == this)
|
|
{
|
|
instance = null;
|
|
}
|
|
|
|
databaseProvider?.Dispose();
|
|
databaseProvider = null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Создает сервис настроек из Addressables-базы и JSON-репозитория.
|
|
/// </summary>
|
|
public IServiceSettingsService CreateService()
|
|
{
|
|
databaseProvider = new AddressableServiceSettingsDatabaseProvider(databaseAddress, fallbackDatabase);
|
|
var database = databaseProvider.Load();
|
|
|
|
if (database == null)
|
|
{
|
|
Debug.LogError($"[{nameof(ServiceSettingsBehaviour)}] Service settings database was not loaded.", this);
|
|
return null;
|
|
}
|
|
|
|
return new ServiceSettingsService(
|
|
database,
|
|
new JsonServiceSettingsRepository(fileName));
|
|
}
|
|
}
|
|
}
|