SettingsSystem (Core)

Namespace: Vortex.Core.SettingsSystem.Bus, Vortex.Core.SettingsSystem.Model Сборка: ru.vortex.settings Платформа: .NET Standard 2.1+


Назначение

Шина доступа к общим настройкам проекта. Предоставляет единую точку чтения SettingsModel — агрегированной модели, собираемой из нескольких источников через драйвер. Модель расширяется через partial class — каждая система добавляет свои свойства.

Возможности:

  • Статический доступ к настройкам: Settings.Data()
  • SettingsModel — расширяемая partial-модель
  • Драйверная архитектура (IDriver) для платформозависимой загрузки

Вне ответственности:

  • Хранение настроек (ScriptableObject-пресеты) — Unity-слой
  • Автосоздание ассетов, Editor-меню — Unity-слой
  • UI-отображение настроек

Зависимости

Зависимость Назначение
Vortex.Core.System SystemController<T, TD>, SystemModel

Использование

Добавление настроек для новой системы

  1. Создать partial-расширение SettingsModel:
namespace Vortex.Core.SettingsSystem.Model
{
    public partial class SettingsModel
    {
        public float MusicVolume { get; private set; }
        public float SfxVolume { get; private set; }
    }
}
  1. Создать SettingsPreset-наследник (Unity-слой):
public class AudioSettings : SettingsPreset
{
    [SerializeField, Range(0f, 1f)] private float musicVolume = 0.8f;
    [SerializeField, Range(0f, 1f)] private float sfxVolume = 1f;

    public float MusicVolume => musicVolume;
    public float SfxVolume => sfxVolume;
}
  1. Ассет создастся автоматически в Resources/Settings/ при загрузке Editor.

Чтение настроек

var startScene = Settings.Data().StartScene;
var debugMode = Settings.Data().DebugMode;

Архитектура

Settings : SystemController<Settings, IDriver>
  └── Data() → SettingsModel                 ← Driver.GetData()

IDriver : ISystemDriver
  └── GetData() → SettingsModel

SettingsModel : SystemModel  (partial)
  └── расширяется partial-классами в других системах

Partial-расширение SettingsModel

SettingsModel — пустой partial-класс в Core. Каждая система, нуждающаяся в конфигурационных параметрах, добавляет свои свойства:

Состав таблицы примерный — конкретный набор расширений зависит от подключённых пакетов:

Расширение Свойства Система
SettingsModelExtUnity StartScene Unity SettingsSystem
SettingsModelExtDebug DebugMode Core DebugSystem
SettingsModelExtDebug (UIProvider) UiDebugMode Core UIProviderSystem (Debug/Model/)
SettingsModelExtDatabase Параметры Database Unity DatabaseSystem
SettingsModelExtAsyncTweener Параметры TweenerSystem Unity TweenerSystem
SettingsModelExtInput Параметры InputBus Unity InputBusSystem
Другие По мере необходимости Прикладные системы

Свойства задаются как { get; private set; } — установка через CopyFrom() (reflection-based копирование из SettingsPreset).

Механизм заполнения

Драйвер загружает набор SettingsPreset → для каждого вызывает Model.CopyFrom(preset) → ObjectExtCopy через Reflection копирует значения read-only свойств из пресета в одноимённые свойства модели.


Контракт

Вход

  • Драйвер (IDriver) подключается через Settings.SetDriver()
  • Драйвер заполняет SettingsModel из платформозависимых источников

Выход

  • Settings.Data() — возвращает SettingsModel с агрегированными настройками
  • null если драйвер не подключён

API

Метод Описание
Settings.Data() Агрегированная модель настроек

Ограничения

Ограничение Причина
Data() → null без драйвера SystemController возвращает null для Driver
Свойства SettingsModel — private set Заполняются только через CopyFrom (Reflection)
Имя свойства в модели = имя свойства в пресете ObjectExtCopy сопоставляет по имени
Порядок загрузки пресетов не гарантирован При конфликте побеждает последний загруженный

Граничные случаи

Ситуация Поведение
Драйвер не подключён Settings.Data() → null
CopyFrom не нашёл совпадающее свойство Свойство остаётся default
Несколько пресетов с одинаковым свойством Последний загруженный перезапишет значение
Свойство в пресете без пары в модели Игнорируется
CopyFrom завершился ошибкой LogError, возврат false, загрузка прерывается