Проект является решением тестового задания В проекте использован паттерн MVP, использован DI фреймворк Reflex, ассет UI Extensions, и небольшой ассет для сериализации интерфейсов в эдиторе. Начало работы происходит в скриптах ProjectInstaller и SceneInstaller (папка DI) Для работы с графом используется класс Graph<TKey, TValue> (папка Core.Collections), работает на основе словаря, а для проверки достижимости элементов графа используется поиск в ширину.
Что можно было бы сделать ещё лучше:
- Убрать игровую логику в отдельный слой, сейчас она смешана с презентером, а модель используется для доступа к данным. В таком малом проекте это бы породило ещё большее число классов, поэтому было упущено.
- Добавить валидацию и подгрузку различных конфигов и различных вью. Сейчас это сделано без каких либо проверок.
- Добавить классы типа ThrowHelper, Assertions и т.д., тесты чтобы улучшить тестируемость и качество поддержки проекта.
- Проверить производительность и аллокацию памяти, многие классы кэшируют нужные им объекты, но например для поиска используют делегаты и они тоже аллоцируют память при создании, а также медленнее работают.
- Сделать вёрстку, которая бы подходила под различные разрешения экрана и выглядела бы хорошо.
- Расширить функции View и улучшить UX, (добавить цветовую индикацию доступных, полученных и недоступных скилов)
- Хорошо подумать над неймингами классов. Сейчас они слишком сильно приявязаны к конкретной реализации и конкретной выполняемой задаче, хотя могут быть использованы в более широком смысле.