public bool ExtractCards(string faction, CardRandomizerCardPool pool, CardRandomizerCardNumber numbers) { for (int i = 0; i < numbers.Champions; i++) { int c = pool.ExtractRandomChampion(faction); if (c == -1) { return(false); } Champions.Add(Program.database.Champions[c].Name); } Champions.Sort(); for (int i = 0; i < numbers.Spells; i++) { int c = pool.ExtractRandomSpell(faction); if (c == -1) { return(false); } Spells.Add(Program.database.Spells[c].Name); } Spells.Sort(); for (int i = 0; i < numbers.Relics; i++) { int c = pool.ExtractRandomRelic(faction); if (c == -1) { return(false); } Relics.Add(Program.database.Relics[c].Name); } Relics.Sort(); for (int i = 0; i < numbers.Equips; i++) { int c = pool.ExtractRandomEquipment(faction); if (c == -1) { return(false); } Equips.Add(Program.database.Equipments[c].Name); } Equips.Sort(); return(true); }
private void ButtonGenerateCards_Click(object sender, EventArgs e) { if (!Program.database.ready) { SetStatus("Database is not ready"); return; } // stage 1: generate settings if (!ValidateSettings()) { return; } string MainFaction = ComboMainFaction.SelectedItem.ToString(); string SecondaryFaction = ComboSecondaryFaction.SelectedItem.ToString(); CardRandomizerCardNumber mfcn = new CardRandomizerCardNumber(); CardRandomizerCardNumber sfcn = new CardRandomizerCardNumber(); CardRandomizerFlags crf = new CardRandomizerFlags(); uint.TryParse(MFCChampions.Text, out mfcn.Champions); uint.TryParse(MFCSpells.Text, out mfcn.Spells); uint.TryParse(MFCRelics.Text, out mfcn.Relics); uint.TryParse(MFCEquips.Text, out mfcn.Equips); uint.TryParse(SFCChampions.Text, out sfcn.Champions); uint.TryParse(SFCSpells.Text, out sfcn.Spells); uint.TryParse(SFCRelics.Text, out sfcn.Relics); uint.TryParse(SFCEquips.Text, out sfcn.Equips); crf.IsHighlander = CheckHighlander.Checked; crf.AllowUnforgeableCards = CheckAllowUnforgeableCards.Checked; crf.AllowBannedCards = CheckboxAllowBannedCards.Checked; crf.AllowSplitCards = CheckAllowSplitCards.Checked; // stage 2: add runes to the pool, according to the settings SetStatus("Loading cards to the pool..."); List <string> factions = new List <string>(); factions.Add(MainFaction); if (SecondaryFaction != "None") { factions.Add(SecondaryFaction); } CardRandomizerCardPool pool = new CardRandomizerCardPool(); pool.LoadCardsFromDatabase(factions, crf); // stage 3: extract runes from the pool, according to the settings SetStatus("Generating result..."); CardRandomizerFactionResultList mfresult = new CardRandomizerFactionResultList(); CardRandomizerFactionResultList sfresult = new CardRandomizerFactionResultList(); if (!mfresult.ExtractCards(MainFaction, pool, mfcn)) { SetStatus("Failed to generate result for main faction"); return; } if (SecondaryFaction != "None") { if (!sfresult.ExtractCards(SecondaryFaction, pool, sfcn)) { SetStatus("Failed to generate result for secondary faction"); return; } } Clipboard.SetText(mfresult.ToString() + (SecondaryFaction == "None" ? "" : "\n" + sfresult.ToString())); SetStatus("Copied to clipboard"); }