void Detect() { if (wcTurrets != null) { threatsTemp.Clear(); wcTurrets.GetSortedThreats(Me, threatsTemp); if (threatsTemp.Count > 0) { SetEnemy(threatsTemp.Keys.First()); return; } } else if (turrets.Count == 0) { Stop(); throw new Exception("No turrets remain for detection."); } foreach (IMyLargeTurretBase t in turrets) { if (t.HasTarget) { SetEnemy(t.GetTargetedEntity()); return; } } detected = false; }
public void UpdateThreatsFromWC(long currentTime) { trackPanel?.Reset(); sitconPanel?.Reset(); foreach (var threatInfo in CurrentThreats) { threatInfo.Value.CurrentlyDetected = false; } threatsFromApi.Clear(); api.GetSortedThreats(me, threatsFromApi); foreach (var threat in threatsFromApi.Keys) { if (!CurrentThreats.ContainsKey(threat.EntityId)) { CurrentThreats.Add(threat.EntityId, new ThreatInfo(accelerationFilterCoeff)); } ThreatInfo threatInfo = CurrentThreats[threat.EntityId]; threatInfo.Update(threat, currentTime); sitconPanel?.WriteLine($"{threat.Name}: {Math.Round(threatInfo.DetectedInfo.Position.X, 2)}, {Math.Round(threatInfo.DetectedInfo.Position.Y, 2)}, {Math.Round(threatInfo.DetectedInfo.Position.Z, 2)}"); if (trackPanel != null && threat.EntityId == TrackedThreat) { trackPanel?.WriteLine($"Name: {threatInfo.DetectedInfo.Name}"); trackPanel?.WriteLine($"Pos: {Math.Round(threatInfo.DetectedInfo.Position.X, 2)}, {Math.Round(threatInfo.DetectedInfo.Position.Y, 2)}, {Math.Round(threatInfo.DetectedInfo.Position.Z, 2)}"); trackPanel?.WriteLine($"Vel: {Math.Round(threatInfo.DetectedInfo.Velocity.X, 2)}, {Math.Round(threatInfo.DetectedInfo.Velocity.Y, 2)}, {Math.Round(threatInfo.DetectedInfo.Velocity.Z, 2)}"); trackPanel?.WriteLine($"Acc: {Math.Round(threatInfo.EstimatedAcceleration.X, 2)}, {Math.Round(threatInfo.EstimatedAcceleration.Y, 2)}, {Math.Round(threatInfo.EstimatedAcceleration.Z, 2)}"); } } }