std::shared_ptr<GroupLevelObj>
GroupLevelObj::from_prefab(const std::string& name)
{
  try 
  {
    PrefabFile prefab = PrefabFile::from_resource(name);

    std::shared_ptr<GroupLevelObj> group = std::make_shared<GroupLevelObj>();

    group->m_name = name;
    for(auto it = prefab.get_objects().begin(); it != prefab.get_objects().end(); ++it)
    {
      LevelObjPtr obj = LevelObjFactory::create(*it);
      if (obj)
      {
        group->add_child(obj);
      }
    }

    group->set_overrides(prefab.get_overrides());

    return group;
  }
  catch(const std::exception& err)
  {
    log_error(err.what());
    return std::shared_ptr<GroupLevelObj>();
  }
}