public void Update() { RefreshOwnState(); RefreshViewObjectState(); //Should do the following: //1. Identify the closest target. //2. Swivel the barrel to keep aim at it. //3. Move within range. //4. Fire var newClosest = FindClosestTank(); if (newClosest != null) { if (currentClosest != null) { if (newClosest.Name != currentClosest.Name) { Console.WriteLine("New closest enemy: " + newClosest.Name); } } currentClosest = newClosest; } if (currentClosest != null) { float targetHeading = GetHeading(ownState.X, ownState.Y, currentClosest.X, currentClosest.Y); //TurnTurretBasedOnHeading(targetHeading); if (GetTurnDir(ownState.TurretHeading, targetHeading)) { //if (helper.tracker.LastCalledInterval(RequestType.TurretRight) > 100) // helper.TurretRight(secretToken); } else { //if (helper.tracker.LastCalledInterval(RequestType.TurretLeft) > 100) // helper.TurretLeft(secretToken); } } }
private GameObjectState FindClosestTank() { if (ownState == null) { return(null); } float closestDistance = float.MaxValue; GameObjectState closest = null; foreach (GameObjectState s in objectState) { if (s.Type != "Tank") { continue; } //get distance between us and the object. float ownX = ownState.X; float ownY = ownState.Y; float otherX = s.X; float otherY = s.Y; float dist = CalculateDistance(ownX, ownY, otherX, otherY); if (dist < closestDistance) { closestDistance = dist; closest = s; } } return(closest); }