Ejemplo n.º 1
0
        public static bool IsObjectInRange(ICelestialObject celestialObject, int distance, PointF point)
        {
            var w = Math.Abs(celestialObject.PositionX - point.X);
            var h = Math.Abs(celestialObject.PositionY - point.Y);

            return(w < distance && h < distance);
        }
Ejemplo n.º 2
0
        private static void DrawSpaceship(IScreenInfo screenInfo, ICelestialObject spaceShip)
        {
            var screenCoordinates = UITools.ToScreenCoordinates(screenInfo, new PointF(spaceShip.PositionX, spaceShip.PositionY));

            var ship  = (Spaceship)spaceShip;
            var color = Color.Black;

            switch (ship.Classification)
            {
            case 200:
                color = Color.DarkOliveGreen;
                break;

            case 201:
                color = Color.DarkGray;
                break;

            case 202:
                color = Color.DarkRed;
                break;

            case 203:
                color = Color.SeaGreen;
                break;
            }

            screenInfo.GraphicSurface.FillEllipse(new SolidBrush(color), screenCoordinates.X - 2, screenCoordinates.Y - 2, 4, 4);
            screenInfo.GraphicSurface.DrawEllipse(new Pen(color), screenCoordinates.X - 4, screenCoordinates.Y - 4, 8, 8);
        }
Ejemplo n.º 3
0
        private void RecalculateGeneralObjectLocation(GameSession gameSession, ICelestialObject celestialObject, EngineSettings settings)
        {
            var speedInTick = celestialObject.Speed / settings.UnitsPerSecond;

            var position = GeometryTools.MoveObject(
                new PointF(celestialObject.PositionX, celestialObject.PositionY),
                speedInTick,
                celestialObject.Direction);


            if (celestialObject is Missile missile)
            {
                var target = gameSession.GetCelestialObject(missile.TargetId).ToSpaceship();

                var direction = GeometryTools.Azimuth(target.GetLocation(), missile.GetLocation());

                position = GeometryTools.MoveObject(new PointF(celestialObject.PositionX, celestialObject.PositionY), speedInTick, direction);
            }

            Logger.Debug($"Object '{celestialObject.Name}' id='{celestialObject.Id}' moved from {celestialObject.GetLocation()} to {position}");

            celestialObject.PreviousPositionX = celestialObject.PositionX;
            celestialObject.PreviousPositionY = celestialObject.PositionY;

            celestialObject.PositionX = position.X;
            celestialObject.PositionY = position.Y;
        }
Ejemplo n.º 4
0
        public void AddCommandOpenFire(ICelestialObject missile)
        {
            var playerShip = _gameSession.GetPlayerSpaceShip();

            var targetPointInSpace = new PointInSpace
            {
                Id             = RandomGenerator.GetId(),
                PositionY      = missile.PositionY,
                PositionX      = missile.PositionX,
                Speed          = 0,
                Direction      = 0,
                Name           = "Missile Target",
                Signature      = 1,
                Classification = (int)CelestialObjectTypes.PointInMap,
                IsScanned      = true
            };

            missile.PositionX = playerShip.PositionX;
            missile.PositionY = playerShip.PositionY;
            //missile.OwnerId = playerShip.Id;

            AddCelestialObject(targetPointInSpace);
            AddMissile(playerShip, missile);

            Command(_gameSession.Id, missile.Id, targetPointInSpace.Id, 0, 0, (int)CommandTypes.Fire);
        }
Ejemplo n.º 5
0
        private void FillControls(Spaceship targetSpaceship, ICelestialObject playerSpaceship)
        {
            txtCelestialObjectName.Text = targetSpaceship.Name;

            var shieldsMax    = (int)targetSpaceship.ShieldsMax;
            var shieldCurrent = (int)targetSpaceship.Shields;

            crlShields.Maximum      = shieldsMax;
            crlShields.CurrentValue = shieldCurrent;
            crlShields.Refresh();

            if (txtDirection.Text != Math.Round(targetSpaceship.Direction, 2) + "")
            {
                txtDirection.Text = Math.Round(targetSpaceship.Direction, 2) + "";
            }

            if (txtSpeed.Text != Math.Round(targetSpaceship.Speed, 2) + "")
            {
                txtSpeed.Text = Math.Round(targetSpaceship.Speed, 2) + "";
            }

            if (txtDistance.Text != Math.Round(GeometryTools.Distance(targetSpaceship.GetLocation(), playerSpaceship.GetLocation()), 2) + "")
            {
                txtDistance.Text = Math.Round(GeometryTools.Distance(targetSpaceship.GetLocation(), playerSpaceship.GetLocation()), 2) + "";
            }
        }
Ejemplo n.º 6
0
        public static void DrawMissile(ICelestialObject celestialObject, PointF location, Graphics graphics, ScreenParameters screenParameters)
        {
            // Convert celestial object coordinates to screen coordinates
            var screenCoordinates = UI.ToScreenCoordinates(screenParameters, location);

            graphics.FillEllipse(new SolidBrush(Color.DarkOliveGreen), screenCoordinates.X - 2, screenCoordinates.Y - 2, 4, 4);
        }
Ejemplo n.º 7
0
        public static void DrawSpaceship(ICelestialObject spaceShip, PointF location, Graphics graphics, ScreenParameters screenParameters)
        {
            var screenCoordinates = UI.ToScreenCoordinates(screenParameters, new PointF(location.X, location.Y));

            var ship  = (Spaceship)spaceShip;
            var color = Color.Black;

            switch (ship.Classification)
            {
            case 200:
                color = Color.DarkOliveGreen;
                break;

            case 201:
                color = Color.DarkGray;
                break;

            case 202:
                color = Color.DarkRed;
                break;

            case 203:
                color = Color.SeaGreen;
                break;
            }

            graphics.FillEllipse(new SolidBrush(color), screenCoordinates.X - 2, screenCoordinates.Y - 2, 4, 4);
            graphics.DrawEllipse(new Pen(color), screenCoordinates.X - 4, screenCoordinates.Y - 4, 8, 8);
        }
Ejemplo n.º 8
0
        public void Event_SelectCelestialObject(ICelestialObject celestialObject, ICelestialObject spaceship)
        {
            if (txtObjectName.InvokeRequired)
            {
                RefreshCallback d = Event_SelectCelestialObject;
                Invoke(d, celestialObject, spaceship);
                return;
            }

            if (celestialObject != null)
            {
                txtObjectName.Text           = celestialObject.Name;
                txtObjectClassification.Text = celestialObject.Classification.ToString();

                txtDirection.Text = $@"{celestialObject.Direction:N2}%";
                txtDistance.Text  = $@"{Coordinates.GetDistance(celestialObject.GetLocation(), spaceship.GetLocation()):N2}%";
                txtSignature.Text = $@"{celestialObject.Signature:N2}%";
                txtSpeed.Text     = $@"{celestialObject.Speed:N2}%";
            }
            else
            {
                if (SelectedCelestialObject == null)
                {
                    txtObjectName.Text           = @"No Object Selected";
                    txtObjectClassification.Text = @"";

                    txtDirection.Text = @"???";
                    txtDistance.Text  = @"???";
                    txtSignature.Text = @"???";
                    txtSpeed.Text     = @"???";
                }
            }
        }
Ejemplo n.º 9
0
        public void SelectCelestialObject(ICelestialObject celestialObject)
        {
            Logger.Info("A celestial object is selected.");

            _gameSession.SelectedObject = celestialObject.DeepClone();

            OnSelectCelestialObject?.Invoke(celestialObject);
        }
Ejemplo n.º 10
0
        public static void DrawArrow(IScreenInfo screenInfo, ICelestialObject currentObject, Color color, int arrowSize = 4)
        {
            var screenCoordinates = UITools.ToScreenCoordinates(screenInfo, new PointF(currentObject.PositionX, currentObject.PositionY));

            var endArrowPoint = GeometryTools.MoveObject(screenCoordinates, 12, currentObject.Direction);

            DrawArrow(screenInfo.GraphicSurface, new SpaceMapVector(screenCoordinates, endArrowPoint, currentObject.Direction), color, arrowSize);
        }
Ejemplo n.º 11
0
        public static void DrawSpaceshipInformation(ICelestialObject celestialObject, Graphics graphics, ScreenParameters screenParameters)
        {
            var screenCoordinates = UI.ToScreenCoordinates(screenParameters, new PointF(celestialObject.PositionX, celestialObject.PositionY));

            var drawSpaceshipInformationAngle = 0;
            var drawSpaceshipInformationShelf = 0;

            var pen = new Pen(Color.DimGray, 2);

            if (celestialObject.Direction >= 0 && celestialObject.Direction < 90)
            {
                drawSpaceshipInformationAngle = 135;
                drawSpaceshipInformationShelf = 90;
            }

            if (celestialObject.Direction >= 90 && celestialObject.Direction < 180)
            {
                drawSpaceshipInformationAngle = 45;
                drawSpaceshipInformationShelf = 90;
            }

            if (celestialObject.Direction >= 180 && celestialObject.Direction < 270)
            {
                drawSpaceshipInformationAngle = 135;
                drawSpaceshipInformationShelf = 90;
            }

            if (celestialObject.Direction >= 270 && celestialObject.Direction < 360)
            {
                drawSpaceshipInformationAngle = 45;
                drawSpaceshipInformationShelf = 90;
            }

            var footCoordinates = OutlandAreaCommon.Tools.MoveCelestialObjects(screenCoordinates, DrawSpaceshipInformationLenght, drawSpaceshipInformationAngle);


            graphics.DrawLine(pen, screenCoordinates.X, screenCoordinates.Y, footCoordinates.X, footCoordinates.Y);


            var shelfCoordinates = OutlandAreaCommon.Tools.MoveCelestialObjects(footCoordinates, DrawSpaceshipInformationShelfLenght, drawSpaceshipInformationShelf);

            graphics.DrawLine(pen, footCoordinates.X, footCoordinates.Y, shelfCoordinates.X, shelfCoordinates.Y);

            var pointInformationBase = new PointF(footCoordinates.X + 3, footCoordinates.Y);

            #region Detail information

            graphics.FillRectangle(new SolidBrush(Color.Chartreuse), new RectangleF(pointInformationBase.X, pointInformationBase.Y - 13, 10, 10));

            using (var font = new Font("Times New Roman", 10, FontStyle.Bold, GraphicsUnit.Pixel))
            {
                graphics.DrawString($"{celestialObject.Name}", font, new SolidBrush(Color.WhiteSmoke), new PointF(pointInformationBase.X + 15, pointInformationBase.Y - 13));
            }

            // TODO: Check size string for draw line length

            #endregion
        }
        public static bool IsSpaceship(this ICelestialObject celestialObject)
        {
            if (celestialObject == null)
            {
                return(false);
            }

            return(celestialObject.Classification >= 200 && celestialObject.Classification < 299);
        }
Ejemplo n.º 13
0
        private static void DrawAsteroid(IScreenInfo screenInfo, ICelestialObject spaceShip)
        {
            var screenCoordinates = UITools.ToScreenCoordinates(screenInfo, new PointF(spaceShip.PositionX, spaceShip.PositionY));

            var color = Color.Gray;

            screenInfo.GraphicSurface.FillEllipse(new SolidBrush(color), screenCoordinates.X - 2, screenCoordinates.Y - 2, 4, 4);
            screenInfo.GraphicSurface.DrawEllipse(new Pen(color), screenCoordinates.X - 4, screenCoordinates.Y - 4, 8, 8);
        }
Ejemplo n.º 14
0
        public static void DrawCelestialObjectCoordinates(ICelestialObject celestialObject, Graphics graphics, ScreenParameters screenParameters)
        {
            var screenCoordinates = UI.ToScreenCoordinates(screenParameters,
                                                           new PointF(celestialObject.PositionX - 25, celestialObject.PositionY + 10));

            using (var font = new Font("Times New Roman", 12, FontStyle.Regular, GraphicsUnit.Pixel))
            {
                graphics.DrawString($"({celestialObject.PositionX} : {celestialObject.PositionY})", font, new SolidBrush(Color.DimGray), new PointF(screenCoordinates.X - 15, screenCoordinates.Y));
            }
        }
Ejemplo n.º 15
0
 public void ForceUpdate(ICelestialObject celestialObject)
 {
     foreach (var mapObject in _gameSession.SpaceMap.CelestialObjects.Where(mapObject => mapObject.Id == celestialObject.Id))
     {
         mapObject.Direction = celestialObject.Direction;
         mapObject.PositionY = celestialObject.PositionY;
         mapObject.PositionX = celestialObject.PositionX;
         mapObject.Speed     = celestialObject.Speed;
     }
 }
        public GranularObjectInformation(ICelestialObject celestialObject, int drawInterval)
        {
            Id = celestialObject.Id;

            CelestialObject = celestialObject.DeepClone();

            WayPoints = Coordinates.GetWayPoints(
                new PointF(celestialObject.PreviousPositionX, celestialObject.PreviousPositionY),
                new PointF(celestialObject.PositionX, celestialObject.PositionY), drawInterval);
        }
Ejemplo n.º 17
0
        private PointF GetTargetLocation(Spaceship targetSpaceship, ICelestialObject missile, double distance)
        {
            var firstIterationFlightTime = distance / missile.Speed;

            var targetSpaceshipNextPoint = Coordinates.MoveObject(
                targetSpaceship.GetLocation(),
                (int)(targetSpaceship.Speed * firstIterationFlightTime),
                targetSpaceship.Direction);

            return(targetSpaceshipNextPoint);
        }
Ejemplo n.º 18
0
        private static void DrawMissile(IScreenInfo screenInfo, ICelestialObject celestialObject)
        {
            var screenCoordinates = UITools.ToScreenCoordinates(screenInfo, new PointF(celestialObject.PositionX, celestialObject.PositionY));

            var missile = celestialObject as Missile;

            var color = Color.Blue;

            screenInfo.GraphicSurface.FillEllipse(new SolidBrush(color), screenCoordinates.X - 2, screenCoordinates.Y - 2, 4, 4);
            screenInfo.GraphicSurface.DrawEllipse(new Pen(color), screenCoordinates.X - 4, screenCoordinates.Y - 4, 8, 8);
        }
Ejemplo n.º 19
0
        public static void DrawPointInSpace(ICelestialObject celestialObject, ICelestialObject spaceShip, Graphics graphics, ScreenParameters screenParameters)
        {
            var screenCoordinates = UI.ToScreenCoordinates(screenParameters, new PointF(celestialObject.PositionX, celestialObject.PositionY));

            var radarLinePen = new Pen(Color.FromArgb(60, 60, 60), 1);

            graphics.DrawLine(radarLinePen, screenCoordinates.X - 15, screenCoordinates.Y, screenCoordinates.X + 15, screenCoordinates.Y);

            graphics.DrawLine(radarLinePen, screenCoordinates.X, screenCoordinates.Y - 15, screenCoordinates.X, screenCoordinates.Y + 15);

            graphics.FillEllipse(new SolidBrush(Color.Black), screenCoordinates.X - 5, screenCoordinates.Y - 5, 10, 10);
        }
Ejemplo n.º 20
0
        //------------------------------------------------------------------------------------

        private static void DrawTrajectory(Graphics graphics, ICelestialObject celestialObject, IEnumerable <SpaceMapObjectLocation> results,
                                           SortedDictionary <int, GranularObjectInformation> turnMapInformation, int turnStep, Color color, ScreenParameters screenParameters)
        {
            var points = new List <PointF>();
            var startDrawingPosition   = new PointF(-10000, -10000);
            var initialDrawingPosition = new PointF(-10000, -10000);
            var iteration = -1;

            if (celestialObject.Classification == CelestialObjectTypes.Missile.ToInt())
            {
                return;
            }

            foreach (var position in results)
            {
                var screenCoordinates = UI.ToScreenCoordinates(screenParameters, new PointF(position.Coordinates.X, position.Coordinates.Y));

                iteration++;

                if (iteration == 0)
                {
                    initialDrawingPosition = new PointF(screenCoordinates.X, screenCoordinates.Y);
                    continue;
                }

                if (iteration == 1)
                {
                    startDrawingPosition = new PointF(screenCoordinates.X, screenCoordinates.Y);
                }

                points.Add(new PointF(screenCoordinates.X, screenCoordinates.Y));
            }

            var currentPosition = UI.ToScreenCoordinates(screenParameters, GetCurrentLocation(turnMapInformation, celestialObject, turnStep,
                                                                                              screenParameters.DrawInterval));


            graphics.DrawLine(new Pen(color)
            {
                DashStyle = DashStyle.Dash
            }, initialDrawingPosition, startDrawingPosition);

            points.Add(currentPosition);

            if (points.Count > 2)
            {
                graphics.DrawCurve(new Pen(color)
                {
                    DashStyle = DashStyle.Dash
                }, points.ToArray());
            }
        }
Ejemplo n.º 21
0
        public static void DrawActiveCelestialObject(ICelestialObject celestialObject, Graphics graphics, ScreenParameters screenParameters)
        {
            if (celestialObject == null)
            {
                return;
            }

            var screenCoordinates = UI.ToScreenCoordinates(screenParameters, new PointF(celestialObject.PositionX, celestialObject.PositionY));

            graphics.FillEllipse(new SolidBrush(Color.WhiteSmoke), screenCoordinates.X - 2, screenCoordinates.Y - 2, 4, 4);

            graphics.FillEllipse(new SolidBrush(Color.WhiteSmoke), screenCoordinates.X - 5, screenCoordinates.Y - 5, 10, 10);
        }
Ejemplo n.º 22
0
        public static void DrawCelestialObjectDirection(ICelestialObject celestialObject, PointF location, Graphics graphics, ScreenParameters screenParameters)
        {
            var screenCoordinates = UI.ToScreenCoordinates(screenParameters, new PointF(location.X, location.Y));

            if ((CelestialObjectTypes)celestialObject.Classification == CelestialObjectTypes.Explosion)
            {
                return;
            }

            var move = SpaceMapTools.Move(screenCoordinates, 8, 6, celestialObject.Direction);

            SpaceMapGraphics.DrawArrow(graphics, move, Color.DimGray);
        }
Ejemplo n.º 23
0
        private void MapMouseMove(object sender, MouseEventArgs e)
        {
            Logger.Debug(TraceMessage.Execute(this, $"MapMouseMove]"));

            mouseCoordinates = e.Location;

            var mouseCoordinatesInternal = OutlandAreaCommon.Tools.ToRelativeCoordinates(e.Location, _screenParameters.Center);

            var mouseMapCoordinates = OutlandAreaCommon.Tools.ToTacticalMapCoordinates(mouseCoordinatesInternal, _screenParameters.CenterScreenOnMap);

            var celestialObjectInRange = SessionTools.GetObjectInRange(_gameSession, 15, new PointF(mouseMapCoordinates.X, mouseMapCoordinates.Y));

            MouseMoveCelestialObject = celestialObjectInRange?.DeepClone();
        }
Ejemplo n.º 24
0
        public void AddCommandAlignTo(ICelestialObject celestialObject)
        {
            var playerShip = _gameSession.GetPlayerSpaceShip();

            if ((CelestialObjectTypes)celestialObject.Classification == CelestialObjectTypes.PointInMap)
            {
                celestialObject.Id             = RandomGenerator.GetId();
                celestialObject.Name           = "Point in space";
                celestialObject.Classification = (int)CelestialObjectTypes.PointInMap;

                AddCelestialObject(celestialObject);
            }

            Command(_gameSession.Id, playerShip.Id, celestialObject.Id, 0, 0, (int)CommandTypes.AlignTo);
        }
Ejemplo n.º 25
0
        public static void DrawLongLine(IScreenInfo screenInfo, ICelestialObject currentObject, Color color)
        {
            var screenCoordinates = UITools.ToScreenCoordinates(screenInfo, new PointF(currentObject.PositionX, currentObject.PositionY));

            var line = new SpaceMapVector(
                screenCoordinates,
                GeometryTools.MoveObject(screenCoordinates, 4000, currentObject.Direction),
                currentObject.Direction);

            using var dashedPen = new Pen(color, 2)
                  {
                      DashStyle = DashStyle.DashDot
                  };

            screenInfo.GraphicSurface.DrawLine(dashedPen, line.PointFrom.X, line.PointFrom.Y, line.PointTo.X, line.PointTo.Y);
        }
Ejemplo n.º 26
0
        public void AddMissile(ICelestialObject playerShip, ICelestialObject celestialObject)
        {
            var missile = (IMissile)celestialObject;

            _gameServer.AddCelestialObject(
                _gameSession.Id,
                celestialObject.Id,
                celestialObject.PositionX,
                celestialObject.PositionY,
                (int)celestialObject.Direction,
                celestialObject.Speed,
                celestialObject.Classification,
                celestialObject.Name,
                missile.AmmoId,
                celestialObject.OwnerId,
                playerShip.Id);
        }
Ejemplo n.º 27
0
        private Hashtable EnqueueMovementHistory(ICelestialObject mapCelestialObject, Hashtable allObjectsHistory)
        {
            var previousIteration = new SpaceMapObjectLocation
            {
                Distance    = SpaceMapTools.GetDistance(mapCelestialObject.GetLocation(), mapCelestialObject.GetLocation()),
                Direction   = mapCelestialObject.Direction,
                Status      = MovementType.Linear,
                Coordinates = mapCelestialObject.GetLocation()
            };

            if (allObjectsHistory.ContainsKey(mapCelestialObject.Id) == false)
            {
                // New celestial object in history collection
                var initialIteration = new SpaceMapObjectLocation
                {
                    Distance    = SpaceMapTools.GetDistance(mapCelestialObject.GetLocation(), mapCelestialObject.GetLocation()),
                    Direction   = mapCelestialObject.Direction,
                    Status      = MovementType.Linear,
                    Coordinates = Coordinates.MoveObject(mapCelestialObject.GetLocation(), 2000,
                                                         (mapCelestialObject.Direction - 180).To360Degrees())
                };

                var initialHistory = new FixedSizedQueue <SpaceMapObjectLocation>(_historyBufferSize);

                initialHistory.Enqueue(initialIteration);

                initialHistory.Enqueue(previousIteration);

                allObjectsHistory.Add(mapCelestialObject.Id, initialHistory);

                return(allObjectsHistory);
            }

            // Add new history point to exist celestial object movement history

            if (!(allObjectsHistory[mapCelestialObject.Id] is FixedSizedQueue <SpaceMapObjectLocation> currentObjectMovementHistory))
            {
                return(allObjectsHistory);
            }

            currentObjectMovementHistory.Enqueue(previousIteration);

            allObjectsHistory[mapCelestialObject.Id] = currentObjectMovementHistory;

            return(allObjectsHistory);
        }
Ejemplo n.º 28
0
        private void RefreshSelectedInfoControl(ICelestialObject celestialObject, SortedDictionary <int, GranularObjectInformation> granularObjectInformations, int i)
        {
            if (celestialObject == null)
            {
                OnRefreshSelectedCelestialObject?.Invoke(null, null);

                return;
            }

            var location = DrawMapTools.GetCurrentLocation(granularTurnInformation, celestialObject, turnStep, _screenParameters.DrawInterval);

            var selectedCelestialObject = celestialObject.DeepClone();

            selectedCelestialObject.PositionX = location.X;
            selectedCelestialObject.PositionY = location.Y;

            OnRefreshSelectedCelestialObject?.Invoke(selectedCelestialObject, _gameSession.GetPlayerSpaceShip());
        }
Ejemplo n.º 29
0
        public static void DrawPreTarget(ICelestialObject celestialObject, Graphics graphics, ScreenParameters screenParameters)
        {
            var screenCoordinates = UI.ToScreenCoordinates(screenParameters, new PointF(celestialObject.PositionX, celestialObject.PositionY));

            var radarLinePen = new Pen(Color.FromArgb(60, 60, 60), 1);

            graphics.DrawEllipse(radarLinePen, screenCoordinates.X - 12, screenCoordinates.Y - 12, 24, 24);

            graphics.DrawEllipse(radarLinePen, screenCoordinates.X - 22, screenCoordinates.Y - 22, 44, 44);

            graphics.DrawEllipse(radarLinePen, screenCoordinates.X - 32, screenCoordinates.Y - 32, 64, 64);


            graphics.DrawLine(radarLinePen, screenCoordinates.X - 45, screenCoordinates.Y, screenCoordinates.X + 45, screenCoordinates.Y);

            graphics.DrawLine(radarLinePen, screenCoordinates.X, screenCoordinates.Y - 45, screenCoordinates.X, screenCoordinates.Y + 45);

            graphics.FillEllipse(new SolidBrush(Color.Black), screenCoordinates.X - 10, screenCoordinates.Y - 10, 20, 20);
        }
Ejemplo n.º 30
0
        public static void RemoveCelestialObject(this GameSession session, ICelestialObject celestialObject)
        {
            if (celestialObject == null)
            {
                return;
            }

            var result = new List <ICelestialObject>();

            foreach (var mapCelestialObject in session.SpaceMap.CelestialObjects)
            {
                if (mapCelestialObject.Id != celestialObject.Id)
                {
                    result.Add(mapCelestialObject);
                }
            }

            session.SpaceMap.CelestialObjects = result;
        }