public static void Destroy <T>(string tag) where T : DozeObject
        {
            var obj = GetObjectByTag <T>(tag);

            obj.Destroy();
            GlobalObjectsList.Remove(obj);
        }
        public static T Create <T>() where T : DozeObject, new()
        {
            T obj = new T();

            GlobalObjectsList.Add(obj);

            return(obj);
        }
        public static T Create <T>(string tag = "") where T : DozeObject
        {
            var constructors = typeof(T).GetConstructors();

            foreach (var construct in constructors)
            {
                var parameters = construct.GetParameters();
                if (parameters.Length == 1)
                {
                    if (parameters[0].Name.ToLower() == "tag")
                    {
                        T obj = (T)construct.Invoke(new object[] { tag });
                        if (obj != null)
                        {
                            GlobalObjectsList.Add(obj);
                            return(obj);
                        }
                    }
                }
            }

            throw new InvalidOperationException($"{typeof(T).FullName} not contains constructor with tag!");
        }
 public static T GetObjectByType <T>() where T : DozeObject
 => (T)GlobalObjectsList.FirstOrDefault((x) => x.GetType() == typeof(T));
 public static T GetObjectByTag <T>(string tag) where T : DozeObject
 => (T)GlobalObjectsList.FirstOrDefault((x) => x.GetTag().ToLower() == tag.ToLower() & x.GetType() == typeof(T));