// 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());
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. }
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. }
static ILookup <AssetType, string> FindAssetIdsByType(AssetIdConfig config) => (from kvp in config.Mappings