Подробные изменения: - Добавлены и доработаны модальные окна главного меню, сервисные настройки, шаблоны 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 без ошибок
60 lines
2.6 KiB
C#
60 lines
2.6 KiB
C#
using UnityEngine;
|
||
using Zenject;
|
||
using DanroJump.SceneFlow;
|
||
|
||
namespace DanroJump.Settings
|
||
{
|
||
/// <summary>
|
||
/// ProjectContext/SceneContext installer сервисных настроек.
|
||
/// </summary>
|
||
public sealed class ServiceSettingsInstaller : MonoInstaller
|
||
{
|
||
[SerializeField] private string databaseAddress = ServiceSettingsAddressKeys.Database;
|
||
[SerializeField] private ServiceSettingsDatabase fallbackDatabase;
|
||
[SerializeField] private string fileName = "service-settings.json";
|
||
[SerializeField] private bool loadImmediately = true;
|
||
[SerializeField] private bool bindActionsInScene = true;
|
||
|
||
/// <summary>
|
||
/// Загружает базу настроек, создает сервис и регистрирует его в DI-контейнере.
|
||
/// </summary>
|
||
public override void InstallBindings()
|
||
{
|
||
var databaseProvider = new AddressableServiceSettingsDatabaseProvider(databaseAddress, fallbackDatabase);
|
||
var database = databaseProvider.Load();
|
||
|
||
if (database == null)
|
||
{
|
||
Debug.LogError($"{nameof(ServiceSettingsInstaller)} could not load {nameof(ServiceSettingsDatabase)}.", this);
|
||
databaseProvider.Dispose();
|
||
return;
|
||
}
|
||
|
||
var repository = new JsonServiceSettingsRepository(fileName);
|
||
var service = new ServiceSettingsService(database, repository);
|
||
|
||
if (loadImmediately)
|
||
{
|
||
service.Load();
|
||
}
|
||
|
||
Container.BindInstance(database).AsSingle();
|
||
Container.Bind<IServiceSettingsDatabaseProvider>().FromInstance(databaseProvider).AsSingle();
|
||
Container.Bind<System.IDisposable>().FromInstance(databaseProvider).AsSingle();
|
||
Container.Bind<IServiceSettingsRepository>().FromInstance(repository).AsSingle();
|
||
Container.Bind<IReadOnlyServiceSettings>().FromInstance(service).AsSingle();
|
||
Container.Bind<IServiceSettingsService>().FromInstance(service).AsSingle();
|
||
Container.BindInterfacesAndSelfTo<SceneFlowService>().AsSingle();
|
||
|
||
if (bindActionsInScene)
|
||
{
|
||
// ServiceSettingsActions может жить в сцене и получать injection после создания сервиса.
|
||
foreach (var actions in FindObjectsByType<ServiceSettingsActions>(FindObjectsInactive.Include, FindObjectsSortMode.None))
|
||
{
|
||
Container.QueueForInject(actions);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|