Код самого проекта находится в папке https://github.com/derhab/RunnerTest/tree/master/Assets/Runner
Для внедрения зависимостей в архитектуре игры использован Zenject.
Для большей гибкости используются Addressables для загрузки сцен, что позволяет при необходимости быстро настроить загрузку удаленной сцены.
Из сторонних программных ассетов используется DOTween и еще пара ассетов для удобной сериализации словаря и интерфейсов в инпекторе.
Структура проекта в юнити представляет собой 3 сцены
- загрузочная сцена
- стартовая сцена (предполагается что там могут быть какие-то настройки, но в текущей версии не реализовано) с кнопкой play дял входа в игровую сцену
- собственно игровая сцена (из нее можно вернуться в стартовую сцену).
Точка входа в приложение - GameManager, который инициализирует стейт машину игры.
Инициализация игрового уровня в LevelInitializer.
Сама суть задания - поведения/эффекты, которые можно применять, реализованы в виде сущностей, которые могут быть добавлены или удалены на персонажа
или на любую сущность реализующую ICharacter, динамически.
Сам персонаж при этом ничего не знает об эффекте который на него наложен, кроме того что у него имеется список объектов реализующих IBuffObject
Само действие эффектов реализовано в конкретных объектах, расширяющих BuffObject и реализующих IBuffObject
Каждый тип эффекта имеет конфиг, который настраивается в инспекторе (ScriptableObject). Конфиг передается в конструктор эффекта при его создании.
Управление наложением/удалением эффектов осуществляется в BuffsManager.
Согласно условию задания в текущей реализации имеем 3 типа эффектов, которые накладываеются последовательно по наступлению соотв. условий и этот процесс зациклен.