private void RefreshDatabaseListView() { lock (Bot.Database.DatabaseLock) { var imagelist = new ImageList(); this.listviewDatabase.Clear(); int i = 1; foreach (Sample sample in Bot.Database.Database) { imagelist.Images.Add(sample.Bitmap); ListViewItem item = new ListViewItem("Letter " + i, i - 1); if (sample is LetterSample) { LetterSample letterSample = sample as LetterSample; if (letterSample.Kind == SampleKind.Known) { item.Text = letterSample.Letter.ToString(); } if (letterSample.Kind == SampleKind.BannedStone) { item.Text = "Banned"; } } if (sample is ScreenpartSample) { ScreenpartSample screenpartSample = sample as ScreenpartSample; item.Text = screenpartSample.Screenpart.ToString(); } item.Tag = sample; this.listviewDatabase.Items.Add(item); i++; } this.listviewDatabase.LargeImageList = imagelist; } }
private void AttemptToRecognizeStartSituation() { SpecialSituationDescription = ""; List <ScreenpartSample> scrSamples = new List <ScreenpartSample>(); lock (bot.Database.DatabaseLock) { foreach (var smpl in bot.Database.Database.OfType <ScreenpartSample>()) { if (!smpl.Scanned) { smpl.ColorData = bot.PresageAndRecognize.SimplifyOtherBitmap(smpl.Bitmap, new System.Drawing.Rectangle(0, 0, smpl.Bitmap.Width, smpl.Bitmap.Height)); smpl.Scanned = true; } scrSamples.Add(smpl); } } int THRESHOLD = 1000; var snap = bot.Scan.LastSnapshot; int closest = Int32.MaxValue; ScreenpartSample closestS = null; foreach (var scrSample in scrSamples) { var compareData = snap.ColorDataScreenparts[scrSample.Screenpart]; int dist = (bot.PresageAndRecognize.GetDistance(scrSample.ColorData, compareData)); if (dist < closest) { closest = dist; closestS = scrSample; } } SpecialSituationDescription = "Recognized screenpart: " + closestS.Screenpart + " (distance " + closest + ")"; if (closest < THRESHOLD) { switch (closestS.Screenpart) { case Scan.Screenpart.TREASURE_CHEST_TOP_ROW: for (char i = 'A'; i <= 'Z'; i++) { bot.Injection.PressChar(i); } AfterPauseState = AutonomousState.ReadingLetters; State = AutonomousState.WakingUp; TimeUntilAction = TimeSpan.FromMilliseconds(DELAY_AFTER_TREASURE_ROW_COMPLETE); break; } } }