public static void UpdateTowers(CurrentGameState state)
{
TickNow();
var unitPoints = new List<System.Drawing.Point>();
try
{
//TickNow("unitSearchStart", dt);
if (ShouldBringToFront) ControlInput.BringHeroesToFront();
var src = GrabScreenGDI(new Rectangle(0, 100, 1024, 450));
var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);
Tools.ColorFilter.Red = new IntRange(100, 255);
Tools.ColorFilter.Green = new IntRange(0, 10);
Tools.ColorFilter.Blue = new IntRange(0, 10);
var filtered = Tools.ColorFilter.Apply(sourceImage);
var grayScale = Grayscale.CommonAlgorithms.BT709.Apply(filtered);
var bc = new BlobCounter();
bc.ProcessImage(filtered);
var blobs = bc.GetObjectsInformation().ToList();
blobs =
blobs.Where(
o =>
!o.Rectangle.IntersectsWith(state.GameMode.MinimapRectangle) && o.Rectangle.Width > 10 &&
o.Rectangle.Width < 100 && o.Rectangle.Height >= 3 && o.Rectangle.Height <= 5).ToList();
var i = 0;
var gc = Graphics.FromImage(sourceImage);
foreach (var blob in blobs)
{
var rc = new Rectangle(blob.Rectangle.X, blob.Rectangle.Y, 100, 20);
Tools.Cropper.Rectangle = rc;
var cut = Tools.Cropper.Apply(sourceImage);
var res = Tools.TemplateMatcher.ProcessImage(cut, templateTower);
foreach (var r in res)
{
gc.DrawRectangle(new Pen(Color.Magenta), rc.X, rc.Y, 100, 20);
unitPoints.Add(new System.Drawing.Point(rc.X - 12, 100 + rc.Y + 350));
}
}
sourceImage.Save("./debug/towaz.png");
}
catch (Exception e)
{
}
state.TowersFound = unitPoints.ToArray();
if (state.TowersFound.Length > 0) Console.WriteLine("TOWERS " + state.TowersFound.Length);
MainWindow.DebugReaderStats("Towers:" + TickNow());
}