gameobject/component system refactor