Skip to content

simple-ned/skill-system-brickworks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Skill Graph System

Система навыков с графовой структурой для Unity, реализующая механику изучения и забывания навыков.

Описание

Система навыков, где каждый навык может быть изучен только при наличии изученных предшествующих навыков. Графовая структура с базовой вершиной, которая по дефолту изучена и не может быть забыта.

Сторонние библиотеки и фреймворки

  • VContainer (DI Framework)

Архитектура

Clean Architecture с разделением на слои:

  • Data Layer (данные): ScriptableObject конфигурации, PlayerProgressionData

  • Domain Layer (бизнес логика): SkillGraph, SkillService, Skill

  • Presentation Layer (логика интерфейса): SkillScreenPresenter (MVP)

  • View Layer (логика отображения): SkillsScreenView, SkillNodeView

  • Расположенные .asmdef файлы наглядно определяют область видимости слоёв и снижают вероятность нарушения области видимости (напр, чтобы в View слой случайно не привнести зависимость от типа в Data слое)

    • Data не видит никого
    • Domain видит только Data
    • Presentation видит Domain и View
    • View не видит никого

Паттерны

  • Dependency Injection: VContainer
  • MVP: разделение ответственности
  • Observer Pattern: события для UI

Ключевые классы

  • SkillGraph: состяние графа, алгоритмы проверки на возможность изучить и забыть навык
  • SkillService: управление навыками и события обновления состояния модели
  • SkillScreenPresenter: связь UI и модели, логика интерфейса
  • SkillScreenView: логика отображения

Особенности

  • Граф описывается в ScriptableObject (SkillGraphSO)
    • Предоставляет возможность провалидировать описанный граф в Editor (проверка на отсутствие дублей, проверка двусторонней связи между нодами, отсутствие изолированных нод)
  • Зависимость Presentation от интерфейсов, а не от конкретных реализаций
    • test-friendly
  • MonoBehavior компоненты есть только в View слое

Возможные пути улучшения

  • Убрать/Инкапсулировать прямые вызовы Debug.Log/Warning/Error из классов с логикой в отдельные Loggers
    • В качестве упрощения и экономия времени не стал делать в рамках тестового
  • Инкапсулировать получение данных из конфига в каком-нибудь DataProvider в Data-слое
    • Будет проще изменить источник получения конфига (Сейчас конфиг хранится в SO и прокидывается как SO)
  • SkillScreenView в дальнейшем может быть разбить на 2 более специализированных модуля
    • SkillGraphView будет ответственнен за отрисовку графа
    • SkillControlPanelView за панель справа с кнопками и описанием скилла
    • В свою очередь можно будет избавиться от SkillScreenView или превратить его в Facade
  • Добавление сохранения состояния между сессиями
    • В Data слое можно создать PersistenseStorageService, который будет предоставлять интерфейс для сохранения и загрузки данных
      • Способ сохранения (детали реализации) инкапсулируется в этом слое
    • Сохранять можно количество SkillPoints (PlayerProgressionData) и состояние графа (SkillGraph)
  • Если понадобится, можно подумать о нового слоя Infrastructure для более инфраструктурного кода
    • Работа с файловой системой
    • Работа с локальной БД
    • Отправка веб-запросов API
    • Обёртки над SDK (напр. получение Remote Config через Firebase)
  • Добавить Unit тесты

About

Тестовое задание для Brickworks Games

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published