Пример #1
0
    private bool ValidateMatchType(AddressableImportRule rule, string filter)
    {
        var matchTypeName = matchTypeNames[(int)rule.matchType];
        var result        = matchTypeName.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0;

        return(result);
    }
        public void ParseGroupReplacementTest()
        {
            AddressableImportRule rule = new AddressableImportRule();

            // Test empty path
            rule.matchType = AddressableImportRuleMatchType.Wildcard;
            rule.path      = "";
            rule.groupName = "somegroup";
            Assert.IsNull(rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            rule.path      = " ";
            rule.groupName = "somegroup";
            Assert.IsNull(rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            // Test empy groupName
            rule.matchType = AddressableImportRuleMatchType.Wildcard;
            rule.path      = @"Assets/Sprites/*/*.png";
            rule.groupName = "";
            Assert.IsNull(rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            rule.path      = "Assets/Sprites/*/*.png";
            rule.groupName = " ";
            Assert.IsNull(rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            // Test static groupName
            rule.matchType = AddressableImportRuleMatchType.Wildcard;
            rule.path      = "Assets/Sprites/*/*.png";
            rule.groupName = "group-a";
            Assert.AreEqual("group-a", rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            // Test wildcard + path elements
            rule.matchType = AddressableImportRuleMatchType.Wildcard;
            rule.path      = "Assets/Sprites/*/*.png";
            rule.groupName = "${PATH[0]}";
            Assert.AreEqual("Assets", rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            rule.groupName = "${PATH[1]}";
            Assert.AreEqual("Sprites", rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            rule.groupName = "${PATH[-1]}";
            Assert.AreEqual("cat", rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            rule.groupName = "${PATH[0]}:${PATH[-1]}-group";
            Assert.AreEqual("Assets:cat-group", rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            // Test regex + path elements
            rule.matchType = AddressableImportRuleMatchType.Regex;
            rule.path      = @"Assets/Sprites/(.*)/(.*)\.png";
            rule.groupName = "${PATH[0]}";
            Assert.AreEqual("Assets", rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            rule.groupName = "${PATH[1]}";
            Assert.AreEqual("Sprites", rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            rule.groupName = "${PATH[-1]}";
            Assert.AreEqual("cat", rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            rule.groupName = "${PATH[0]}:${PATH[-1]}-group";
            Assert.AreEqual("Assets:cat-group", rule.ParseGroupReplacement("Assets/Sprites/cat/cat.png"));
            // Test regex + unnamed groups
            rule.matchType = AddressableImportRuleMatchType.Regex;
            rule.path      = @"Assets/Sprites/(.*)/(.*)\.png";
            rule.groupName = "${PATH[0]}:$1-$2";
            Assert.AreEqual("Assets:cat-foo", rule.ParseGroupReplacement("Assets/Sprites/cat/foo.png"));
            // Test regex + named groups
            rule.matchType = AddressableImportRuleMatchType.Regex;
            rule.path      = @"Assets/Sprites/(?<category>.*)/(?<asset>.*)\.png";
            rule.groupName = "${PATH[0]}:${category}-${asset}";
            Assert.AreEqual("Assets:cat-foo", rule.ParseGroupReplacement("Assets/Sprites/cat/foo.png"));
        }
Пример #3
0
    static AddressableAssetEntry CreateOrUpdateAddressableAssetEntry(
        AddressableAssetSettings settings,
        AddressableImportSettings importSettings,
        AddressableImportRule rule,
        string assetPath)
    {
        // Set group
        AddressableAssetGroup group;
        var  groupName = rule.ParseGroupReplacement(assetPath);
        bool newGroup  = false;

        if (!TryGetGroup(settings, groupName, out group))
        {
            if (importSettings.allowGroupCreation)
            {
                //TODO Specify on editor which type to create.
                group    = CreateAssetGroup <BundledAssetGroupSchema>(settings, groupName);
                newGroup = true;
            }
            else
            {
                Debug.LogErrorFormat("[AddressableImporter] Failed to find group {0} when importing {1}. Please check if the group exists, then reimport the asset.", rule.groupName, assetPath);
                return(null);
            }
        }

        // Set group settings from template if necessary
        if (rule.groupTemplate != null && (newGroup || rule.groupTemplateApplicationMode == GroupTemplateApplicationMode.AlwaysOverwriteGroupSettings))
        {
            rule.groupTemplate.ApplyToAddressableAssetGroup(group);
        }

        var guid  = AssetDatabase.AssetPathToGUID(assetPath);
        var entry = settings.CreateOrMoveEntry(guid, group);

        if (entry != null)
        {
            // Apply address replacement if address is empty or path.
            if (string.IsNullOrEmpty(entry.address) ||
                entry.address.StartsWith("Assets/") ||
                rule.simplified ||
                !string.IsNullOrWhiteSpace(rule.addressReplacement))
            {
                entry.address = rule.ParseAddressReplacement(assetPath);
            }

            // Add labels
            if (rule.LabelMode == LabelWriteMode.Replace)
            {
                entry.labels.Clear();
            }
            foreach (var label in rule.labels)
            {
                entry.labels.Add(label);
            }
        }
        return(entry);
    }
        public void MatchRegexTest()
        {
            AddressableImportRule rule = new AddressableImportRule();

            rule.matchType = AddressableImportRuleMatchType.Regex;
            rule.path      = @"Assets/Sprites/.*/.*\.png";
            Assert.IsTrue(rule.Match("Assets/Sprites/cat/cat.png"));
            Assert.IsFalse(rule.Match("Assets/Sprites/cat/cat.jpg"));
        }
Пример #5
0
    private bool ValidateLabelsPath(AddressableImportRule rule, string filter)
    {
        var labels = rule.labelRefs
                     .Select(x => x.labelString)
                     .Concat(rule.dynamicLabels);

        var result = labels.Any(x => x.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0);

        return(result);
    }
Пример #6
0
    private bool ValidateGroupTemplate(AddressableImportRule rule, string filter)
    {
        var template = rule.groupTemplate;

        if (!template)
        {
            return(string.IsNullOrEmpty(filter));
        }
        var result = template.Name.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0 ||
                     template.Description.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0;

        return(result);
    }
Пример #7
0
    public bool IsMatch(AddressableImportRule rule, string filter)
    {
        for (var i = 0; i < _filters.Count; i++)
        {
            var filterRule = _filters[i];
            var result     = filterRule(rule, filter);
            if (result)
            {
                return(true);
            }
        }

        return(false);
    }
Пример #8
0
    static AddressableAssetEntry CreateOrUpdateAddressableAssetEntry(
        AddressableAssetSettings settings,
        string path,
        AddressableImportRule rule,
        AddressableImportSettings importSettings)
    {
        AddressableAssetGroup group;
        string groupName = importSettings.ParseGroupName(rule, path);

        if (TryGetGroup(settings, groupName, out group) == GroupSearchResult.NotFound)
        {
            if (importSettings.allowGroupCreation)
            {
                group = CreateAssetGroup <BundledAssetGroupSchema>(settings, groupName);
            }
            else
            {
                Debug.LogErrorFormat("[AddressableImporter] Failed to find group {0} when importing {1}. Please check the group exists, then reimport the asset.", groupName, path);
                return(null);
            }
        }



        var assetEntry = CreateAddressableAsset(settings, path, group);

        if (rule.Simplify && (string.IsNullOrEmpty(assetEntry.address) || assetEntry.address.StartsWith("Assets/")))
        {
            SimplifyAddresByPath(assetEntry, path);
        }

        // Remove Labels
        assetEntry.labels.Clear();

        // Add labels
        foreach (var label in rule.Labels)
        {
            if (!assetEntry.labels.Contains(label))
            {
                assetEntry.labels.Add(label);
            }
        }

        return(assetEntry);
    }
Пример #9
0
    static bool TryGetMatchedRule(
        string assetPath,
        AddressableImportSettings importSettings,
        out AddressableImportRule rule)
    {
        foreach (var r in importSettings.rules)
        {
            if (!r.Match(assetPath))
            {
                continue;
            }
            rule = r;
            return(true);
        }

        rule = null;
        return(false);
    }
        public void AddressSimplifyTest()
        {
            AddressableImportRule rule = new AddressableImportRule();

            // Test wildcard + simplify
            rule.matchType  = AddressableImportRuleMatchType.Wildcard;
            rule.path       = "Assets/Sprites/*/*.png";
            rule.simplified = true;
            Assert.AreEqual("cat", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
            // Test regex + simplify
            rule.matchType  = AddressableImportRuleMatchType.Regex;
            rule.path       = @"Assets/Sprites/(.*)/(.*)\.png";
            rule.simplified = true;
            Assert.AreEqual("cat", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
            // Test simplify + non empty address replacement
            rule.matchType          = AddressableImportRuleMatchType.Regex;
            rule.addressReplacement = "somevalue";
            rule.path       = @"Assets/Sprites/(.*)/(.*)\.png";
            rule.simplified = true;
            Assert.AreEqual("cat", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
        }
        public void ParseAddressReplacementTest()
        {
            AddressableImportRule rule = new AddressableImportRule();

            // Test empty path
            rule.matchType = AddressableImportRuleMatchType.Regex;
            rule.path      = "";
            Assert.AreEqual("Assets/Sprites/cat/cat.png", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
            rule.path = " ";
            Assert.AreEqual("Assets/Sprites/cat/cat.png", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
            // Test empty address replacement
            rule.matchType          = AddressableImportRuleMatchType.Regex;
            rule.path               = @"Assets/Sprites/(.*)/(.*)\.png";
            rule.addressReplacement = "";
            Assert.AreEqual("Assets/Sprites/cat/cat.png", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
            rule.addressReplacement = " ";
            Assert.AreEqual("Assets/Sprites/cat/cat.png", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
            // Test regex + path elements
            rule.matchType          = AddressableImportRuleMatchType.Regex;
            rule.path               = @"Assets/Sprites/(.*)/(.*)\.png";
            rule.addressReplacement = "${PATH[0]}";
            Assert.AreEqual("Assets", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
            rule.addressReplacement = "${PATH[1]}";
            Assert.AreEqual("Sprites", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
            rule.addressReplacement = "${PATH[-1]}";
            Assert.AreEqual("cat", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
            rule.addressReplacement = "${PATH[0]}:${PATH[-1]}-element";
            Assert.AreEqual("Assets:cat-element", rule.ParseAddressReplacement("Assets/Sprites/cat/cat.png"));
            // Test regex + unnamed groups
            rule.matchType          = AddressableImportRuleMatchType.Regex;
            rule.path               = @"Assets/Sprites/(.*)/(.*)\.png";
            rule.addressReplacement = "${PATH[0]}:$1-$2";
            Assert.AreEqual("Assets:cat-foo", rule.ParseAddressReplacement("Assets/Sprites/cat/foo.png"));
            // Test regex + named groups
            rule.matchType          = AddressableImportRuleMatchType.Regex;
            rule.path               = @"Assets/Sprites/(?<category>.*)/(?<asset>.*)\.png";
            rule.addressReplacement = "${PATH[0]}:${category}-${asset}";
            Assert.AreEqual("Assets:cat-foo", rule.ParseAddressReplacement("Assets/Sprites/cat/foo.png"));
        }
        public void MatchWildcardTest()
        {
            AddressableImportRule rule = new AddressableImportRule();

            rule.matchType = AddressableImportRuleMatchType.Wildcard;
            // Raw path
            rule.path = "Assets/Sprites/";
            Assert.IsTrue(rule.Match("Assets/Sprites/cat/cat.png"));
            Assert.IsFalse(rule.Match("Assets/Fbx/cat/cat.fbx"));
            // '*' wildcard
            rule.path = "Assets/Sprites/*/*.png";
            Assert.IsTrue(rule.Match("Assets/Sprites/cat/cat.png"));
            Assert.IsFalse(rule.Match("Assets/Sprites/cat/cat.jpg"));
            // '?' wildcard
            rule.path = "Assets/Sprites/*/???.png";
            Assert.IsTrue(rule.Match("Assets/Sprites/cat/cat.png"));
            Assert.IsFalse(rule.Match("Assets/Sprites/cat/bird.png"));
            // rule.groupName = "";
            // rule.LabelMode = LabelWriteMode.Add;
            // rule.simplified = true;
            // rule.addressReplacement = "";
        }
Пример #13
0
 private bool ValidateRule(AddressableImportRule rule, string filter)
 {
     return(string.IsNullOrEmpty(filter) || _filters.Any(x => x(rule, filter)));
 }
Пример #14
0
    private bool ValidateRulePath(AddressableImportRule rule, string filter)
    {
        var result = rule.path.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0;

        return(result);
    }
Пример #15
0
    private bool ValidateAddressReplacement(AddressableImportRule rule, string filter)
    {
        var result = rule.addressReplacement.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0;

        return(result);
    }
Пример #16
0
        private void CustomRemoveElementFunction(AddressableImportRule item)
        {
            var index = rules.IndexOf(item);

            CustomRemoveIndexFunction(index);
        }
Пример #17
0
 private bool ValidateLabelsPath(AddressableImportRule rule, string filter)
 {
     return(rule.labels.Any(x => x.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0));
 }
Пример #18
0
 private bool ValidateAddressableGroupName(AddressableImportRule rule, string filter)
 {
     return(rule.groupName.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0);
 }
 /// <summary>
 /// Gets a group name based on Rule's target group name and provided path
 /// </summary>
 public string ParseGroupName(AddressableImportRule rule, string path)
 {
     return(rule.ParsePath(rule.TargetGroupName, path));
 }