# Panda (509) review
1. Для чего создавать виртуальный метод родительского класса FSModel HidePopupEvent, который в нем не используется. По сути, виртуальный метод должен давать гибкость переопределять логику родительского класса.
2. Неудачные названия методов HidePopupEvent/ShowPopupEvent, тут нужно или просто HidePopup/ShowPopup, или возвращать команду и GetHidePopupEvent/GetShowPopupEvent.
3. Может, тигра пока выпиляем и добавим всю логику уже с игрой


4. Это нужно подправить тогда и в BNModel

5. Для чего дублировать картинки, если можно было обойтись комбинацией 3х

6. Почему в консольном клиенте это закомментировано? может, тогда этот метод удалить?

7. Константы лучше прописывать uppercase для наглядности, как мы делаем везде

8. 
9. На мой взгляд, в целом довольно сложная логика взаимосвязи дополнительных моделей. Если следовать такому принципу и при этом количество логических связей и новых фич будет расти, то потом будет очень легко запутаться.
В некоторых случаях лучше использовать композицию и распределять по логике. Например, мешки и анимацию декора перенести в одну сущность по примеру как было в EasternJackpots. GameFeatures и NudgeAnimation, вроде, что-то тоже похожее.
10. SpineBonesManager + SpineBonesData - это просто скопипащенный класс с EasternJackpots, можно наследоваться и переопределять. Или сразу его добавь в фильтр SlotFeatures c соответствующим неймспейсом, как мы обсуждали раньше и просто повторно используй.
11. Запутанная логика. Если есть сущность, которая отвечает за декор, то почему она задает состояние игры? Неудачное решение, если мы создаем классы обзерверы, общаемся через события, инициируя определенную логику, а потом еще начинаем вызывать методы друг друга, то это все превращается в кашу.

12. Если не ошибаюсь, для этого есть параметр в cfg

13. Неудачные названия методов по аналогии с FSModel.

14. Зачем такое делать, просто в AppPlugin возвращай lucky_duck_features::ExitBonus. Нужно удалить лишние файлы.

15. На будущее, если создаешь классы, которые в перспективе могут быть повторно использованы, лучше конфигурацию выделять в виртуальный метод типа Init(), а не просто это выполнять в конструкторе класса.
16. Тут каждый раз при запуске надж анимаций будет парситься json. Нужно понимать, что json - это просто источник данных, гипотетически он может быть и другой. Сам конфиг должен быть в какой-то структуре класса (или поля класса, в зависимости от удобности и их количества), а сама структура инициализироваться в методе Init один раз распарсив данные из json.

17. 
18. Нужно ознакомиться с параметром панели autoscaleContent, он упрощает жизнь и избавляет от копипасты

19. Это можно было обойти перегрузкой оператора <<

20. SetEndHandler где не только Notify могут привести к крашу, их обычно обнуляют при релизе