Exemple #1
0
 // Get all AssetIds that share a type, then exclude any that aren't a proper superset of this id.
 static Dictionary <string, string[]> FindAssetIdParents(AssetIdConfig idConfig, ILookup <AssetType, string> assetIdsByType) =>
 idConfig.Mappings.ToDictionary(x => x.Key,
                                kvp => kvp.Value
                                .SelectMany(x => assetIdsByType[x])
                                .Distinct()
                                .Where(x => IsSuperSet(idConfig.Mappings[x], kvp.Value))
                                .ToArray());
Exemple #2
0
    public Assets(IFileSystem disk, IJsonUtil jsonUtil) // Everything in this class should be treated as read-only once the constructor finishes.
    {
        if (disk == null)
        {
            throw new ArgumentNullException(nameof(disk));
        }
        BaseDir = ConfigUtil.FindBasePath(disk);
        var assetIdConfigPath = Path.Combine(BaseDir, @"src/Formats/AssetIdTypes.json");
        var config            = GeneralConfig.Load(Path.Combine(BaseDir, "data/config.json"), BaseDir, disk, jsonUtil);

        AssetConfig   = AssetConfig.Load(config.ResolvePath("$(MODS)/Base/assets.json"), AssetMapping.Global, disk, jsonUtil);
        AssetIdConfig = AssetIdConfig.Load(assetIdConfigPath, disk, jsonUtil);

        AssetIdsByType   = FindAssetIdsByType(AssetIdConfig);
        ParentsByAssetId = FindAssetIdParents(AssetIdConfig, AssetIdsByType);
        AssetIdsByEnum   = FindAssetIdsForEnums(AssetConfig.IdTypes, AssetIdsByType);
        EnumsByAssetId   = FindEnumsByAssetId(AssetConfig.IdTypes, AssetIdsByType);
        // HandleIsomorphism(AssetConfig.IdTypes);

        // TODO: Build family based on IsomorphicToAttribute.
        // * AssetTypes in a family need to have a single-type AssetId
        // * AssetType families must have a single unambiguous leader
        // * The child types inherit their enum names from the leader
        // * Child types' mod specific enums need to be in 1:1 relationship with CopiedFrom attrib?
        // ....getting complicated.
    }
Exemple #3
0
        public Assets() // Everything in this class should be treated as read-only once the constructor finishes.
        {
            BaseDir = ConfigUtil.FindBasePath();
            var assetIdConfigPath = Path.Combine(BaseDir, @"src/Formats/AssetIdTypes.json");
            var config            = GeneralConfig.Load(Path.Combine(BaseDir, "data/config.json"), BaseDir);

            AssetConfig   = AssetConfig.Load(config.ResolvePath("$(MODS)/Base/assets.json"));
            AssetIdConfig = AssetIdConfig.Load(assetIdConfigPath);

            Enums = LoadEnums(AssetConfig);
            DeduplicateEnums(Enums);
            AssetIdsByType   = FindAssetIdsByType(AssetIdConfig);
            ParentsByAssetId = FindAssetIdParents(AssetIdConfig, AssetIdsByType);
            AssetIdsByEnum   = FindAssetIdsForEnums(Enums, AssetIdsByType);
            EnumsByAssetId   = FindEnumsByAssetId(Enums, AssetIdsByType);
            HandleIsomorphism(Enums);

            // TODO: Build family based on IsomorphicToAttribute.
            // * AssetTypes in a family need to have a single-type AssetId
            // * AssetType families must have a single unambiguous leader
            // * The child types inherit their enum names from the leader
            // * Child types' mod specific enums need to be in 1:1 relationship with CopiedFrom attrib?
            // ....getting complicated.
        }
Exemple #4
0
 static ILookup <AssetType, string> FindAssetIdsByType(AssetIdConfig config) =>
 (from kvp in config.Mappings