Exemplo n.º 1
0
        private void RecalculateSolarSystems(Map spaceMap)
        {
            foreach (var solarSystem in spaceMap.Systems)
            {
                try
                {
                    SolarSystems.Add(solarSystem.Name, solarSystem);

                    foreach (var connection in solarSystem.ConnectedSolarSystems)
                    {
                        var connectedSolarSystem = SpaceMap.Systems.FirstOrDefault(system => system.Name == connection);

                        if (connectedSolarSystem?.Name == null)
                        {
                            continue;
                        }
                        if (connectedSolarSystem.IsDeleted)
                        {
                            continue;
                        }

                        var pointFrom = new Point(solarSystem.LocationInMap.X, solarSystem.LocationInMap.Y);
                        var pointTo   = new Point(connectedSolarSystem.LocationInMap.X, connectedSolarSystem.LocationInMap.Y);

                        //Draw connection line center
                        var centerLinePoint = new Point((pointFrom.X + pointTo.X) / 2, (pointFrom.Y + pointTo.Y) / 2);

                        var newConnection = new Wormhole {
                            Location = centerLinePoint, SolarSystemFrom = solarSystem.Name, SolarSystemTo = connectedSolarSystem.Name
                        };

                        Wormholes.Add(newConnection);
                    }
                }
                catch (Exception ex)
                {
                    _commandsLog.ErrorFormat("[MapView.RecalculateSolarSystems] Critical error {0}", ex);
                }
            }
        }
Exemplo n.º 2
0
        private void Event_Paint(object sender, PaintEventArgs e)
        {
            //Log.InfoFormat($"[MapInformationControl.Event_Paint] start for pilot {SpaceMap.ActivePilot}");

            if (isPainting)
            {
                return;
            }

            isPainting = true;

            try
            {
                if (isDragging)
                {
                    var coordinates = PointToClient(Cursor.Position);

                    var screenCenter = new Point(ScreenCenter.X + coordinates.X - Width / 2, ScreenCenter.Y + coordinates.Y - Height / 2);

                    RecalculateOffsetPositions(screenCenter);
                }

                var rectangleMapCenter = new Rectangle(Width / 2 - 0, Height / 2 - 0, 3, 3);

                e.Graphics.DrawEllipse(new Pen(Color.Red, 2), rectangleMapCenter);

                var rectangleScreenCenter = new Rectangle(ScreenCenter.X - Width / 2, ScreenCenter.Y - Height / 2, 3, 3);
                e.Graphics.DrawEllipse(new Pen(Color.DarkOrange, 2), rectangleScreenCenter);

                lblUpdateTime.Text = @"Updated at " + SpaceMap.LastUpdateTime.ToLongTimeString();

                #region Draw selected solar system aura

                foreach (var solarSystem in SpaceMap.Systems)
                {
                    if (solarSystem.Name == null || solarSystem.Name != SpaceMap.SelectedSolarSystemName)
                    {
                        continue;
                    }

                    var rectangle = new Rectangle(solarSystem.LocationInMap.X - MapPosition.X - 14,
                                                  solarSystem.LocationInMap.Y - MapPosition.Y - 14, 28, 28);

                    e.Graphics.DrawEllipse(new Pen(Color.DarkOrange, 2), rectangle);
                }

                #endregion

                #region Draw location solar system aura

                foreach (var solarSystem in SpaceMap.Systems)
                {
                    if (solarSystem.Name == null || solarSystem.Name != SpaceMap.LocationSolarSystemName)
                    {
                        continue;
                    }

                    var rectangle = new Rectangle(solarSystem.LocationInMap.X - MapPosition.X - 12,
                                                  solarSystem.LocationInMap.Y - MapPosition.Y - 12, 24, 24);

                    e.Graphics.DrawEllipse(new Pen(Color.DarkGreen, 2), rectangle);
                }

                #endregion

                #region Draw connection lines

                foreach (var solarSystem in SpaceMap.Systems)
                {
                    if (solarSystem.Name == null)
                    {
                        continue;
                    }
                    if (solarSystem.IsDeleted)
                    {
                        continue;
                    }
                    if (solarSystem.IsHidden)
                    {
                        continue;
                    }

                    foreach (var connection in solarSystem.ConnectedSolarSystems)
                    {
                        var connectedSolarSystem = SpaceMap.Systems.FirstOrDefault(system => system.Name == connection);

                        if (connectedSolarSystem.Name == null)
                        {
                            continue;
                        }
                        if (connectedSolarSystem.IsDeleted)
                        {
                            continue;
                        }

                        var pen = new Pen(Color.Gray, 1);
                        pen.DashStyle = DashStyle.Solid;

                        var pointFrom = new Point(solarSystem.LocationInMap.X - MapPosition.X, solarSystem.LocationInMap.Y - MapPosition.Y);
                        var pointTo   = new Point(connectedSolarSystem.LocationInMap.X - MapPosition.X,
                                                  connectedSolarSystem.LocationInMap.Y - MapPosition.Y);

                        e.Graphics.DrawLine(pen, pointFrom, pointTo);
                    }
                }

                #endregion

                #region Draw connection delete points

                foreach (var centerLinePoint in Wormholes.Select(solarSystemsConnection => new Point(solarSystemsConnection.Location.X - MapPosition.X, solarSystemsConnection.Location.Y - MapPosition.Y)))
                {
                    var coordinates = PointToClient(Cursor.Position);

                    var locationX = Math.Abs(centerLinePoint.X - coordinates.X);
                    var locationY = Math.Abs(centerLinePoint.Y - coordinates.Y);

                    if (locationX < 10 && locationY < 10)
                    {
                        e.Graphics.DrawLine(new Pen(Color.DarkOrange, 2),
                                            new Point(centerLinePoint.X - 5, centerLinePoint.Y - 5),
                                            new Point(centerLinePoint.X + 5, centerLinePoint.Y + 5));

                        e.Graphics.DrawLine(new Pen(Color.DarkOrange, 2),
                                            new Point(centerLinePoint.X + 5, centerLinePoint.Y - 5),
                                            new Point(centerLinePoint.X - 5, centerLinePoint.Y + 5));
                    }
                }

                #endregion

                #region Draw solar systems and names

                foreach (var solarSystem in SpaceMap.Systems)
                {
                    if (solarSystem.Name == null)
                    {
                        continue;
                    }
                    if (solarSystem.IsDeleted)
                    {
                        continue;
                    }
                    if (solarSystem.IsHidden)
                    {
                        continue;
                    }

                    var systemLabel     = solarSystem.Name;
                    var systemTypeLabel = "";

                    if (_systemsInformation.ContainsKey(solarSystem.Name) == false)
                    {
                        _systemsInformation.Add(solarSystem.Name, Global.Space.GetSystemByName(solarSystem.Name));
                    }


                    if (Tools.IsWSpaceSystem(solarSystem.Name))
                    {
                        if (_systemsInformation[solarSystem.Name].Class != null)
                        {
                            systemLabel     = systemLabel + "[C" + _systemsInformation[solarSystem.Name].Class + "]";
                            systemTypeLabel = "[C" + _systemsInformation[solarSystem.Name].Class + "]";
                        }
                        else
                        {
                            systemLabel     = systemLabel + "[Shattered]";
                            systemTypeLabel = " [Shattered]";
                        }
                    }

                    //Shattered

                    var drawFont      = new Font("Verdana", 8, FontStyle.Bold);
                    var drawBrushName = new SolidBrush(Tools.GetColorBySolarSystem(_systemsInformation[solarSystem.Name].Security.ToString()));

                    if (Tools.IsWSpaceSystem(solarSystem.Name))
                    {
                        drawBrushName = new SolidBrush(Tools.GetColorBySolarSystem("C" + _systemsInformation[solarSystem.Name].Class));
                    }

                    var stringSize = e.Graphics.MeasureString(systemLabel, drawFont);

                    var stringSize2 = e.Graphics.MeasureString(solarSystem.Name, drawFont);

                    var drawFormat = new StringFormat();


                    if (solarSystem.Type == "A" || solarSystem.Type == "B" || solarSystem.Type == "C")
                    {
                        e.Graphics.DrawString(solarSystem.Name, drawFont, drawBrushName,
                                              solarSystem.LocationInMap.X - MapPosition.X + 2 - stringSize.Width / 2, solarSystem.LocationInMap.Y - MapPosition.Y - 30,
                                              drawFormat);
                    }

                    if (Tools.IsWSpaceSystem(solarSystem.Name))
                    {
                        var drawBrush = new SolidBrush(Tools.GetColorBySolarSystem("C" + _systemsInformation[solarSystem.Name].Class));
                        e.Graphics.DrawString(systemTypeLabel, drawFont, drawBrush,
                                              solarSystem.LocationInMap.X - MapPosition.X + 2 - stringSize.Width / 2 + stringSize2.Width,
                                              solarSystem.LocationInMap.Y - MapPosition.Y - 30, drawFormat);
                    }

                    var rectangle = new Rectangle(solarSystem.LocationInMap.X - MapPosition.X - 8, solarSystem.LocationInMap.Y - MapPosition.Y - 8, 16,
                                                  16);

                    e.Graphics.FillEllipse(new SolidBrush(Tools.GetColorBySolarSystem(_systemsInformation[solarSystem.Name].Security.ToString())),
                                           rectangle);
                    e.Graphics.DrawEllipse(new Pen(Color.DimGray, 1), rectangle);
                }

                #endregion
            }
            catch (Exception ex)
            {
                //var someValue = SpaceMap.Systems;
                //var defaultValue = SpaceMap.Systems;

                ////result будет 23, если someValue - null
                //var result = someValue ?? defaultValue;
            }
            finally
            {
                isPainting = false;
            }
        }