private void AppendEnemyCaptureString(string str, MATCH_STATUS matchStatus) { Color popBackColorEnemyUnique = txtEnemyCaptureUnique.BackColor; Color popSelectionColorEnemyUnique = txtEnemyCaptureUnique.SelectionColor; switch (matchStatus) { case MATCH_STATUS.GOOD: txtEnemyCaptureUnique.BackColor = Color.LightGreen; txtEnemyCaptureUnique.SelectionColor = Color.Green; break; case MATCH_STATUS.BAD: txtEnemyCaptureUnique.BackColor = Color.LightSalmon; txtEnemyCaptureUnique.SelectionColor = Color.Red; break; } if (txtEnemyCaptureLast15.Text.Length > 0 && txtEnemyCaptureLast15.Lines.Length > 15) { txtEnemyCaptureLast15.Text = txtEnemyCaptureLast15.Text.Substring(txtEnemyCaptureLast15.Text.IndexOf('\n') + 1); } txtEnemyCaptureLast15.AppendText(str + "\r\n"); string[] lines = txtEnemyCaptureUnique.Text.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (string line in lines) { if (line == str) { txtEnemyCaptureUnique.BackColor = popBackColorEnemyUnique; txtEnemyCaptureUnique.SelectionColor = popSelectionColorEnemyUnique; return; } } txtEnemyCaptureUnique.AppendText(str + "\r\n"); txtEnemyCaptureUnique.BackColor = popBackColorEnemyUnique; txtEnemyCaptureUnique.SelectionColor = popSelectionColorEnemyUnique; }
private async Task CaptureEnemyData() { Stopwatch s = Stopwatch.StartNew(); await enemyData.Capture(ocr); if (enemyData.LastResult.Lines.Count == 0) { AppendEnemyCaptureString("(nothing)", MATCH_STATUS.NOTHING); if (enemyData.IsStale) { ClearEnemyUI(); } } else { // grab text from OcrLines IEnumerable <string> lines = enemyData.LastResult.Lines .Select(x => regexEnemy.Replace(x.Text.ToLower().Trim(), "")) .Where(x => x.Length > 0 && !x.Contains("forwar")); // filter out fast forwards foreach (string line in lines) { Enemy enemy = Enemies.Find(x => x.MatchStrings.Contains(line)); MATCH_STATUS matchStatus = enemy != null ? MATCH_STATUS.GOOD : MATCH_STATUS.BAD; AppendEnemyCaptureString(line, matchStatus); // if all enemy slots currently full, no need to process if (enemy1 != null && enemy2 != null && enemy3 != null) { continue; } if (enemy != null) { // edge cases (ghost/ghast, milon battle, ghost battle) if (enemy.Name == "Milon" && ((enemy1 != null && enemy1.Name == "Milon Z.") || (enemy2 != null && enemy2.Name == "Milon Z.") || (enemy3 != null && enemy3.Name == "Milon Z."))) { continue; } if (enemy.Name == "Dr. Lugae" && enemy1 != null && enemy1.Name == "Lugaeborg") { continue; } if (enemy == enemy1) { continue; } if (enemy == enemy2) { continue; } if (enemy == enemy3) { continue; } if (pbEnemy1.Image == null) { enemy1 = enemy; SetEnemy(enemy, pbEnemy1, txtEnemy1); } else if (pbEnemy2.Image == null) { enemy2 = enemy; SetEnemy(enemy, pbEnemy2, txtEnemy2); } else if (pbEnemy3.Image == null) { enemy3 = enemy; SetEnemy(enemy, pbEnemy3, txtEnemy3); } } } } s.Stop(); lblEnemyCaptureTime.Text = s.ElapsedMilliseconds.ToString() + " ms"; }