refactors: added GameObjectFactory, rewrote gameobject and its children for clearity