Beispiel #1
0
        public override void Init()
        {
            dataGridViewSynthesis.MakeDoubleBuffered();
            dataGridViewSynthesis.DefaultCellStyle.WrapMode = DataGridViewTriState.False;
            dataGridViewSynthesis.RowTemplate.Height        = 26;

            Order = SQLiteDBClass.GetSettingString(DbOSave, "").RestoreArrayFromString(0, SynthesisRecipes.Count);
            if (Order.Distinct().Count() != Order.Length)       // if not distinct..
            {
                for (int i = 0; i < Order.Length; i++)          // reset
                {
                    Order[i] = i;
                }
            }

            Wanted = SQLiteDBClass.GetSettingString(DbWSave, "").RestoreArrayFromString(0, SynthesisRecipes.Count);

            var rcpes = SynthesisRecipes.Select(r => r.name).Distinct().ToList();

            rcpes.Sort();
            rfs          = new RecipeFilterSelector(rcpes);
            rfs.Changed += FilterChanged;

            var lvls = SynthesisRecipes.Select(r => r.level).Distinct().ToList();

            lvls.Sort();
            lfs          = new RecipeFilterSelector(lvls);
            lfs.Changed += FilterChanged;

            List <string> matShortNames = SynthesisRecipes.SelectMany(r => r.ingredients).Distinct().ToList();

            matLookUp = matShortNames.Select(sn => Tuple.Create <string, string>(sn, MaterialCommodityDB.GetCachedMaterialByShortName(sn).name)).ToList();
            List <string> matLongNames = matLookUp.Select(lu => lu.Item2).ToList();

            matLongNames.Sort();
            mfs          = new RecipeFilterSelector(matLongNames);
            mfs.Changed += FilterChanged;

            for (int i = 0; i < SynthesisRecipes.Count; i++)         // pre-fill array.. preventing the crash on cell edit when you
            {
                int rno = Order[i];
                MaterialCommoditiesList.SynthesisRecipe r = SynthesisRecipes[rno];

                int rown = dataGridViewSynthesis.Rows.Add();

                using (DataGridViewRow row = dataGridViewSynthesis.Rows[rown])
                {
                    row.Cells[0].Value = r.name; // debug rno + ":" + r.name;
                    row.Cells[1].Value = r.level;
                    row.Cells[6].Value = r.ingredientsstring;
                    row.Tag            = rno;
                    row.Visible        = false;
                }
            }

            discoveryform.OnNewEntry      += Discoveryform_OnNewEntry;
            uctg.OnTravelSelectionChanged += Display;
        }
Beispiel #2
0
        static public List <MaterialCommodities> GetShoppingList(List <Tuple <Recipe, int> > target, List <MaterialCommodities> list)
        {
            List <MaterialCommodities> shoppingList = new List <MaterialCommodities>();

            foreach (Tuple <Recipe, int> want in target)
            {
                Recipe r      = want.Item1;
                int    wanted = want.Item2;
                for (int i = 0; i < r.ingredients.Length; i++)
                {
                    string ingredient = r.ingredients[i];
                    int    mi         = list.FindIndex(x => x.shortname.Equals(ingredient));
                    int    got        = (mi >= 0) ? list[mi].scratchpad : 0;
                    int    need       = r.count[i] * wanted;

                    if (got < need)
                    {
                        int shopentry = shoppingList.FindIndex(x => x.shortname.Equals(ingredient));
                        if (shopentry >= 0)
                        {
                            shoppingList[shopentry].scratchpad += (need - got);
                        }
                        else
                        {
                            MaterialCommodityDB db = MaterialCommodityDB.GetCachedMaterialByShortName(ingredient);
                            if (db != null)                                           // MUST be there, its well know, but will check..
                            {
                                MaterialCommodities mc = new MaterialCommodities(db); // make a new entry
                                mc.scratchpad = (need - got);
                                shoppingList.Add(mc);
                            }
                        }
                        if (mi >= 0)
                        {
                            list[mi].scratchpad = 0;
                        }
                    }
                    else
                    {
                        if (mi >= 0)
                        {
                            list[mi].scratchpad -= need;
                        }
                    }
                }
            }
            return(shoppingList);
        }
Beispiel #3
0
        public override void Init()
        {
            dataGridViewEngineering.MakeDoubleBuffered();
            dataGridViewEngineering.DefaultCellStyle.WrapMode = DataGridViewTriState.False;
            dataGridViewEngineering.RowTemplate.Height        = 26;

            Order = SQLiteDBClass.GetSettingString(DbOSave, "").RestoreArrayFromString(0, EngineeringRecipes.Count);
            if (Order.Distinct().Count() != Order.Length)       // if not distinct..
            {
                for (int i = 0; i < Order.Length; i++)          // reset
                {
                    Order[i] = i;
                }
            }

            Wanted = SQLiteDBClass.GetSettingString(DbWSave, "").RestoreArrayFromString(0, EngineeringRecipes.Count);

            List <string> engineers = EngineeringRecipes.SelectMany(r => r.engineers).Distinct().ToList();

            engineers.Sort();
            efs          = new RecipeFilterSelector(engineers);
            efs.Changed += FilterChanged;

            lfs          = new RecipeFilterSelector(levels);
            lfs.Changed += FilterChanged;

            List <string> modules = EngineeringRecipes.Select(r => r.module).Distinct().ToList();

            modules.Sort();
            mfs          = new RecipeFilterSelector(modules);
            mfs.Changed += FilterChanged;

            var upgrades = EngineeringRecipes.Select(r => r.name).Distinct().ToList();

            upgrades.Sort();
            ufs          = new RecipeFilterSelector(upgrades);
            ufs.Changed += FilterChanged;

            List <string> matShortNames = EngineeringRecipes.SelectMany(r => r.ingredients).Distinct().ToList();

            matLookUp = matShortNames.Select(sn => Tuple.Create <string, string>(sn, MaterialCommodityDB.GetCachedMaterialByShortName(sn).name)).ToList();
            List <string> matLongNames = matLookUp.Select(lu => lu.Item2).ToList();

            matLongNames.Sort();
            matfs          = new RecipeFilterSelector(matLongNames);
            matfs.Changed += FilterChanged;

            for (int i = 0; i < EngineeringRecipes.Count; i++)         // pre-fill array.. preventing the crash on cell edit when you
            {
                int rno = Order[i];
                MaterialCommoditiesList.EngineeringRecipe r = EngineeringRecipes[rno];

                int             rown = dataGridViewEngineering.Rows.Add();
                DataGridViewRow row  = dataGridViewEngineering.Rows[rown];
                row.Cells[UpgradeCol.Index].Value = r.name; // debug rno + ":" + r.name;
                row.Cells[Module.Index].Value     = r.module;
                row.Cells[Level.Index].Value      = r.level;
                row.Cells[Recipe.Index].Value     = r.ingredientsstring;
                row.Cells[Engineers.Index].Value  = r.engineersstring;
                row.Tag     = rno;
                row.Visible = false;
            }

            isHistoric          = SQLiteDBClass.GetSettingBool(DbHistoricMatsSave, false);
            chkHistoric.Checked = isHistoric;
            chkHistoric.Visible = !isEmbedded;

            discoveryform.OnNewEntry      += Discoveryform_OnNewEntry;
            uctg.OnTravelSelectionChanged += Display;
        }
Beispiel #4
0
        //return maximum can make, how many made, needed string.
        static public Tuple <int, int, string> HowManyLeft(List <MaterialCommodities> list, Recipe r, int tomake = 0)
        {
            int           max    = int.MaxValue;
            StringBuilder needed = new StringBuilder(64);

            for (int i = 0; i < r.ingredients.Length; i++)
            {
                string ingredient = r.ingredients[i];

                int mi   = list.FindIndex(x => x.shortname.Equals(ingredient));
                int got  = (mi >= 0) ? list[mi].scratchpad : 0;
                int sets = got / r.count[i];

                max = Math.Min(max, sets);

                int need = r.count[i] * tomake;

                if (got < need)
                {
                    string dispName;
                    if (mi > 0)
                    {
                        dispName = (list[mi].category == MaterialCommodityDB.MaterialEncodedCategory || list[mi].category == MaterialCommodityDB.MaterialManufacturedCategory) ? " " + list[mi].name : list[mi].shortname;
                    }
                    else
                    {
                        MaterialCommodityDB db = MaterialCommodityDB.GetCachedMaterialByShortName(ingredient);
                        dispName = (db.category == MaterialCommodityDB.MaterialEncodedCategory || db.category == MaterialCommodityDB.MaterialManufacturedCategory) ? " " + db.name : db.shortname;
                    }
                    string s = (need - got).ToStringInvariant() + dispName;
                    if (needed.Length == 0)
                    {
                        needed.Append("Need:" + s);
                    }
                    else
                    {
                        needed.Append("," + s);
                    }
                }
            }

            int made = 0;

            if (max > 0 && tomake > 0)             // if we have a set, and use it up
            {
                made = Math.Min(max, tomake);      // can only make this much
                StringBuilder usedstr = new StringBuilder(64);

                for (int i = 0; i < r.ingredients.Length; i++)
                {
                    int mi = list.FindIndex(x => x.shortname.Equals(r.ingredients[i]));
                    System.Diagnostics.Debug.Assert(mi != -1);
                    int used = r.count[i] * made;
                    list[mi].scratchpad -= used;
                    string dispName = (list[mi].category == MaterialCommodityDB.MaterialEncodedCategory || list[mi].category == MaterialCommodityDB.MaterialManufacturedCategory) ? " " + list[mi].name : list[mi].shortname;
                    usedstr.AppendPrePad(used.ToStringInvariant() + dispName, ",");
                }

                needed.AppendPrePad("Used: " + usedstr.ToString(), ", ");
            }

            return(new Tuple <int, int, string>(max, made, needed.ToNullSafeString()));
        }