AI uses unique_ptr<Listener> instead of Listener*
Worked on virtual functions (Listeners) and loggers.