private ModEntityData <T> CreateDependant <T>(EntityCreator <T> creator, ParseTarget parseTarget) where T : Entity { ModEntityData <T> entities = null; foreach (var modDirectoryHelper in StellarisDirectoryHelper.CreateCombinedList(stellarisDirectoryHelper, modDirectoryHelpers)) { entities = creator.ProcessDirectoryHelper(entities, modDirectoryHelper, techsAndDependencies); } return(entities); }
private ModEntityData <T> ProcessDependant <T>(EntityCreator <T> creator, ParseTarget parseTarget) where T : Entity { ModEntityData <T> entities = CreateDependant(creator, parseTarget); entities?.ApplyToChain((ents, links) => { var invalidEntities = ents.Where(x => !x.Value.Prerequisites.Any()).Select(x => x.Value).ToList(); foreach (var invalidEntity in invalidEntities) { Log.Logger.Warning("Removing {entityId} from {file} dependant entities as we were unable to locate its specified pre-requisite techs", invalidEntity.Id, invalidEntity.FilePath); ents.Remove(invalidEntity.Id); var invalidLinks = links.Where(x => x.To.Id == invalidEntity.Id).ToList(); links.RemoveAll(invalidLinks); } }); if (entities != null) { foreach (var entity in entities.AllEntities) { foreach (var prerequisite in entity.Prerequisites) { if (prerequisite.ExtraDesc != null) { entity.ExtraDesc = prerequisite.ExtraDesc; } } } Log.Logger.Debug("Processed {entityCount} {parseTarget} with {linkCount} links", entities.EntityCount, parseTarget, entities.LinkCount); } else { Log.Logger.Warning("{parseTarget} had no items in any of the sources"); } return(entities); }