Wszędzie singletony, jakieś managery, po co są te klasy? Mogłoby ich nie być - program byłby krótszy i też by działał. Twoja gra używa jednej czcionki, ale masz font managera, jakby to był co najmniej Adobe PageMaker.
I ten singleton Settings - używasz globalnej tablicy asocjacyjnej string->string do przekazywania parametrów numerycznych z jednej części programu do drugiej?
Przekazujesz typy całkowitoliczbowe przez referencję, nawet bool, dlaczego? Tak się nie robi, to może zmniejszyć wydajność z powodu aliasingu.
Pragma once jest niestandardowa, nie wiadomo co robi i nie jest potrzebna bo klasyczne include guards wystarczają.
Random_int - klasa która ma tylko jedną funkcję i to statyczną. Dlaczego to jest klasa? Mogłaby być po prostu funkcja.