private void Flee(List <Ingame.MyDetectedEntityInfo> RadarData = null) { try { if (!IsFleeing) { return; } try { if (!FleeTimersTriggered) { TriggerFleeTimers(); } try { if (RadarData == null) { RadarData = LookForEnemies(FreighterSetup.FleeTriggerDistance); } if (RadarData.Count == 0) { return; } try { Ingame.MyDetectedEntityInfo ClosestEnemy = RadarData.OrderBy(x => GridPosition.DistanceTo(x.Position)).FirstOrDefault(); if (ClosestEnemy.IsEmpty()) { Grid.DebugWrite("Flee", "Cannot find closest hostile"); return; } try { IMyEntity EnemyEntity = MyAPIGateway.Entities.GetEntityById(ClosestEnemy.EntityId); if (EnemyEntity == null) { Grid.DebugWrite("Flee", "Cannot find enemy entity from closest hostile ID"); return; } try { //Grid.DebugWrite("Flee", $"Fleeing from '{EnemyEntity.DisplayName}'. Distance: {Math.Round(GridPosition.DistanceTo(ClosestEnemy.Position))}m; FleeTriggerDistance: {FreighterSetup.FleeTriggerDistance}"); Vector3D FleePoint = GridPosition.InverseVectorTo(ClosestEnemy.Position, 100 * 1000); RC.AddWaypoint(FleePoint, "Flee Point"); (RC as MyRemoteControl).ChangeFlightMode(MyRemoteControl.FlightMode.OneWay); (RC as MyRemoteControl).SetAutoPilotSpeedLimit(DetermineFleeSpeed()); RC.SetAutoPilotEnabled(true); } catch (Exception Scrap) { Grid.LogError("Flee.AddWaypoint", Scrap); } } catch (Exception Scrap) { Grid.LogError("Flee.LookForEnemies.GetEntity", Scrap); } } catch (Exception Scrap) { Grid.LogError("Flee.LookForEnemies.Closest", Scrap); } } catch (Exception Scrap) { Grid.LogError("Flee.LookForEnemies", Scrap); } } catch (Exception Scrap) { Grid.LogError("Flee.TriggerTimers", Scrap); } } catch (Exception Scrap) { Grid.LogError("Flee", Scrap); } }