public static bool RequirementsMet(KModuleAnimate animate)
    {
        if(animate == null)
            return false;

        object[] objs = animate.GetType().UnderlyingSystemType.GetCustomAttributes(typeof(KRequiresModuleAttribute), true);

        if(objs.Length != 1)
            return false;

        KRequiresModuleAttribute[] attr =  objs as KRequiresModuleAttribute[];

        if(attr == null)
            return false;

        foreach(KRequiresModuleAttribute cAttr in attr)
        {
            bool check = false;

            foreach(PartModule current in animate.part.Modules)
            {
                if(current.GetType().UnderlyingSystemType != cAttr.RequiredType)
                    continue;

                check = true;
                break;
            }

            if(!check)
                return false;
        }

        return true;
    }
    public static bool RequirementsMet(KModuleAnimate animate)
    {
        if (animate == null)
        {
            return(false);
        }

        object[] objs = animate.GetType().UnderlyingSystemType.GetCustomAttributes(typeof(KRequiresModuleAttribute), true);

        if (objs.Length != 1)
        {
            return(false);
        }

        KRequiresModuleAttribute[] attr = objs as KRequiresModuleAttribute[];

        if (attr == null)
        {
            return(false);
        }

        foreach (KRequiresModuleAttribute cAttr in attr)
        {
            bool check = false;

            foreach (PartModule current in animate.part.Modules)
            {
                if (current.GetType().UnderlyingSystemType != cAttr.RequiredType)
                {
                    continue;
                }


                check = true;
                break;
            }

            if (!check)
            {
                return(false);
            }
        }

        return(true);
    }