public T2Blueprint(BlueprintID bpID, int matLevel, int prodLevel)
        {
            MatLevel  = matLevel;
            ProdLevel = prodLevel;
            Product   = CommonQueries.GetProductFromBlueprint(bpID);
            Details   = CommonQueries.GetBlueprintDetails(bpID);

            var t1ID   = CommonQueries.GetT1VersionOfT2(Product);
            var t1BPID = CommonQueries.GetBlueprintFromProduct(t1ID);

            //Console.WriteLine(new T1Blueprint(t1BPID, 0, 0).InventionMaterials);

            Materials = new List <BPMaterial>();

            var rawMaterials     = CommonQueries.GetMaterialsRaw(Product);
            var extraMaterials   = CommonQueries.GetMaterialsExtra(bpID);
            var t1Materials      = CommonQueries.GetMaterialsRaw(t1ID);
            var extraT1Materials = CommonQueries.GetMaterialsExtra(t1BPID);
            // TODO: currently this assumes there is always exactly 1 recyclable material which is the t1 item
            var rawMaterialsAfterRecycling = rawMaterials.Subtract(t1Materials);
            // adjust for ME
            var adjustedRawMaterials = rawMaterialsAfterRecycling.AdjustForMEWastage(matLevel, Details.wasteFactor);

            Materials = adjustedRawMaterials.Union(extraMaterials).ToList();
        }
        public T1Blueprint(BlueprintID bpID, int matlevel, int prodLevel)
        {
            MatLevel  = matlevel;
            ProdLevel = prodLevel;
            Product   = CommonQueries.GetProductFromBlueprint(bpID);
            Details   = CommonQueries.GetBlueprintDetails(bpID);

            Materials = CommonQueries.GetMaterialsRaw(Product)
                        .AdjustForMEWastage(matlevel, Details.wasteFactor)
                        .Union(CommonQueries.GetMaterialsExtra(bpID))
                        .ToList();

            var extraMats = CommonQueries.GetMaterialsExtra(bpID, ActivityIDs.Invention).ToList();

            if (extraMats.Any())
            {
                // data dump is terrible and gives data interfaces a damagePerJob of 100% :ccp:
                InventionMaterials = extraMats
                                     .Where(m => m.matID.GetGroupID() != GroupID.DataInterfaces)
                                     .ToList();
                InventionInterface = extraMats
                                     .Single(m => m.matID.GetGroupID() == GroupID.DataInterfaces)
                                     .matID;
            }
        }