private static void DrawDataScreenVORSection(ref MySpriteDrawFrame Frame, IMyTextSurface Surface, CombinedDataSet CombinedData)
            {
                float PositionYFactor = 5f;
                float PosistionX      = Center.X + 12 * UnitX;

                if (CombinedData.VORData.Rotation == null)
                {
                    Frame.Add(new MySprite()
                    {
                        Type            = SpriteType.TEXT,
                        Data            = "No VOR\nConnection!",
                        Position        = new Vector2(PosistionX, PositionYFactor * UnitY) + Viewport.Position,
                        RotationOrScale = DataScreenFontSize + 0.2f,
                        Color           = Color.Tomato,
                        Alignment       = TextAlignment.LEFT,
                        FontId          = "White"
                    });
                    return;
                }

                string[] _lines =
                {
                    "VOR: " + CombinedData.VORData.Name,
                    "DME: " + Math.Round(CombinedData.VORData.Distance / 1000, 1).ToString(),
                    "Radial: " + Math.Round(CombinedData.VORData.Radial,       0).ToString(),
                    "OBS: " + Math.Round(CombinedData.VORData.OBS,             0).ToString(),
                    "HDG: " + Math.Round(CombinedData.VORData.Heading,         0).ToString(),
                    "DEV: " + Math.Round(CombinedData.VORData.Deviation, 0).ToString()
                };

                List <string> Lines = new List <string>(_lines);

                foreach (string line in Lines)
                {
                    Frame.Add(new MySprite()
                    {
                        Type            = SpriteType.TEXT,
                        Data            = line,
                        Position        = new Vector2(PosistionX, PositionYFactor * UnitY) + Viewport.Position,
                        RotationOrScale = DataScreenFontSize,
                        Color           = CockpitFGColor.Alpha(1f),
                        Alignment       = TextAlignment.LEFT,
                        FontId          = "White"
                    });

                    PositionYFactor += 35;
                }
            }
            private static void DrawDataScreen(ref MySpriteDrawFrame Frame, IMyTextSurface Surface, CombinedDataSet CombinedData)
            {
                // ILS Data
                DrawDataScreenILSSection(ref Frame, Surface, CombinedData);

                // VOR
                DrawDataScreenVORSection(ref Frame, Surface, CombinedData);

                // Line between the two columns
                MySprite SeparationLine = MySprite.CreateSprite("SquareSimple", Center, new Vector2(3 * UnitX, 200 * UnitY));

                SeparationLine.Color = CockpitFGColor.Alpha(1f);
                Frame.Add(SeparationLine);
            }
            private static void DrawDataScreenILSSection(ref MySpriteDrawFrame Frame, IMyTextSurface Surface, CombinedDataSet CombinedData)
            {
                float PositionYFactor = 5f;
                float PosistionX      = 12 * UnitX;

                if (CombinedData.ILSData.Rotation == null)
                {
                    Frame.Add(new MySprite()
                    {
                        Type            = SpriteType.TEXT,
                        Data            = "No ILS\nConnection!",
                        Position        = new Vector2(PosistionX, PositionYFactor * UnitY) + Viewport.Position,
                        RotationOrScale = DataScreenFontSize + 0.2f,
                        Color           = Color.Tomato,
                        Alignment       = TextAlignment.LEFT,
                        FontId          = "White"
                    });
                    return;
                }

                string[] _lines =
                {
                    "RWY: " + CombinedData.ILSData.RunwayNumber.ToString(),
                    "DME: " + Math.Round(CombinedData.ILSData.Distance / 1000,          1).ToString(),
                    "Bearing: " + Math.Round(CombinedData.ILSData.Bearing,              0).ToString(),
                    "Rel. Bearing: " + Math.Round(CombinedData.ILSData.RelativeBearing, 0).ToString(),
                    "Track: " + Math.Round(CombinedData.ILSData.Track,                  0).ToString(),
                };

                List <string> Lines = new List <string>(_lines);

                foreach (string line in Lines)
                {
                    Frame.Add(new MySprite()
                    {
                        Type            = SpriteType.TEXT,
                        Data            = line,
                        Position        = new Vector2(PosistionX, PositionYFactor * UnitY) + Viewport.Position,
                        RotationOrScale = DataScreenFontSize,
                        Color           = CockpitFGColor.Alpha(1f),
                        Alignment       = TextAlignment.LEFT,
                        FontId          = "White"
                    });

                    PositionYFactor += 35;
                }
            }
        public void DrawToSurfaces(ILSDataSet ILSData, VORDataSet VORData, NDBDataSet NDBData)
        {
            List <IMyTextSurfaceProvider> SurfaceProviders = GetScreens(CockpitTag);

            if (SurfaceProviders == null)
            {
                Echo("No screen found!");
                return;
            }

            CombinedDataSet CombinedData = new CombinedDataSet
            {
                ILSData = ILSData,
                VORData = VORData
            };

            foreach (IMyTextSurfaceProvider _sp in SurfaceProviders)
            {
                IMyTerminalBlock _spTerminal       = _sp as IMyTerminalBlock;
                string           _customDataString = _spTerminal.CustomData;
                MyIni            _customData       = new MyIni();

                MyIniParseResult iniResult;
                if (!_customData.TryParse(_customDataString, out iniResult))
                {
                    throw new Exception(iniResult.ToString());
                }


                if (_customData.Get("NavigationSurfaces", "0").ToString("none") == "none")
                {
                    for (int i = 0; i < _sp.SurfaceCount; i++)
                    {
                        switch (i)
                        {
                        case 1:
                            _customData.Set("NavigationSurfaces", i.ToString(), "ILS");
                            break;

                        case 2:
                            _customData.Set("NavigationSurfaces", i.ToString(), "VOR");
                            break;

                        case 3:
                            _customData.Set("NavigationSurfaces", i.ToString(), "Data");
                            break;

                        default:
                            _customData.Set("NavigationSurfaces", i.ToString(), "N/A");
                            break;
                        }
                    }

                    _spTerminal.CustomData = _customData.ToString();
                    continue;
                }

                string[] DrawSurfaces = new string[_sp.SurfaceCount];
                try
                {
                    for (var i = 0; i < _sp.SurfaceCount; i++)
                    {
                        string value = _customData.Get("NavigationSurfaces", i.ToString()).ToString();
                        DrawSurfaces[i] = value;
                    }
                }
                catch (Exception)
                {
                    Echo("Error in building DrawSurfaces Loop");
                }

                // ILS Screen
                try
                {
                    IMyTextSurface ILSSurface = _sp.GetSurface(Array.IndexOf(DrawSurfaces, "ILS"));
                    Draw.DrawSurface(ILSSurface, Surface.ILS, ILSData);
                }
                catch (Exception)
                {
                    Echo("No ILS Surface found in \"" + _spTerminal.CustomName.ToString() + "\".");
                }


                // VOR Screen
                try
                {
                    IMyTextSurface VORSurface = _sp.GetSurface(Array.IndexOf(DrawSurfaces, "VOR"));
                    Draw.DrawSurface(VORSurface, Surface.VOR, VORData);
                }
                catch (Exception)
                {
                    Echo("No VOR Surface found in \"" + _spTerminal.CustomName.ToString() + "\".");
                }


                // NDB Screen
                try
                {
                    IMyTextSurface VORSurface = _sp.GetSurface(Array.IndexOf(DrawSurfaces, "NDB"));
                    Draw.DrawSurface(VORSurface, Surface.NDB, NDBData);
                }
                catch (Exception)
                {
                    Echo("No NDB Surface found in \"" + _spTerminal.CustomName.ToString() + "\".");
                }


                // Data Screen
                try
                {
                    IMyTextSurface DataSurface = _sp.GetSurface(Array.IndexOf(DrawSurfaces, "Data"));
                    Draw.DrawSurface(DataSurface, Surface.Data, CombinedData);
                }
                catch (Exception)
                {
                    Echo("No Data Surface found in " + _spTerminal.CustomName.ToString());
                }
            }
        }