Get rid of dynamic_cast in game and improve component roles