Example #1
0
        internal void updateGrid(StarSystem currentSys, List <StarSystem> nearSystems)
        {
            while (!IsHandleCreated)
            {
                Thread.Sleep(100);
            }
            dataGridView1.Invoke(
                new MethodInvoker(
                    delegate
            {
                dataGridView1.DataSource = nearSystems;
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    var sys   = (StarSystem)row.DataBoundItem;
                    var color = Color.White;
                    if (sys.AllBodiesFound)
                    {
                        color = Color.Green;
                    }
                    else if (sys.Bodies.Count == 0)
                    {
                        color = Color.Gray;
                    }
                    else if (sys.Bodies.Where(b => b.TerraformState == "Terraformable" || b.BodyType == "Ammonia world" || b.BodyType == "Earthlike body" || b.BodyType == "Water world").Count() != 0)
                    {
                        color = Color.LightBlue;
                    }
                    else if (!sys.AllBodiesFound)
                    {
                        color = Color.Yellow;
                    }
                    row.DefaultCellStyle.BackColor = color;
                }
            }
                    )
                );
            dataGridView2.Invoke(
                new MethodInvoker(
                    delegate
            {
                Database.mutex.WaitOne();
                var blueSys   = Database.db.GetCollection <StarSystem>().Find(s => !s.AllBodiesFound && (s.Bodies[0].TerraformState == "Terraformable" || s.Bodies[0].BodyType == "Ammonia world" || s.Bodies[0].BodyType == "Earthlike body" || s.Bodies[0].BodyType == "Water world")).OrderBy(s => (s.X - currentSys.X) * (s.X - currentSys.X) + (s.Y - currentSys.Y) * (s.Y - currentSys.Y) + (s.Z - currentSys.Z) * (s.Z - currentSys.Z)).FirstOrDefault();
                var yellowSys = Database.db.GetCollection <StarSystem>().Find(s => !s.AllBodiesFound).OrderBy(s => (s.X - currentSys.X) * (s.X - currentSys.X) + (s.Y - currentSys.Y) * (s.Y - currentSys.Y) + (s.Z - currentSys.Z) * (s.Z - currentSys.Z)).FirstOrDefault();
                var greySys   = Database.db.GetCollection <StarSystem>().Find(s => s.Bodies.Count == 0).OrderBy(s => (s.X - currentSys.X) * (s.X - currentSys.X) + (s.Y - currentSys.Y) * (s.Y - currentSys.Y) + (s.Z - currentSys.Z) * (s.Z - currentSys.Z)).FirstOrDefault();
                Database.mutex.ReleaseMutex();

                dataGridView2.Rows.Clear();
                if (blueSys == null)
                {
                    dataGridView2.Rows.Add(new string[] { "Near blue system", "?", "? ly" });
                }
                else
                {
                    dataGridView2.Rows.Add(new string[] { "Near blue system", blueSys.SystemName, blueSys.DistanceStr, blueSys.InterrestingBodies });
                }
                if (yellowSys == null)
                {
                    dataGridView2.Rows.Add(new string[] { "Near yellow system", "?", "? ly" });
                }
                else
                {
                    dataGridView2.Rows.Add(new string[] { "Near yellow system", yellowSys.SystemName, yellowSys.DistanceStr, yellowSys.InterrestingBodies });
                }
                if (greySys == null)
                {
                    dataGridView2.Rows.Add(new string[] { "Near gray system", "?", "? ly" });
                }
                else
                {
                    dataGridView2.Rows.Add(new string[] { "Near gray system", greySys.SystemName, greySys.DistanceStr });
                }
            }

                    )
                );
        }
        public static void Run()
        {
            bool DBUpdate = false;

            while (true)
            {
                Program.mainForm.UpdateStatus(Queue.Count + " Event To Process");
                if (Queue.IsEmpty)
                {
                    Thread.Sleep(500);
                    continue;
                }
                Queue.TryDequeue(out var e);
                Program.mainForm.UpdateStatus(Queue.Count + " Event To Process ( " + e.Event + " )");
                StarSystem sys;
                switch (e.Event)
                {
                case "StopUpdatingGuiOn":
                    StopUpdatingGui = true;
                    break;

                case "StopUpdatingGuiOff":
                    StopUpdatingGui = false;
                    break;

                case "UpdateFrontEvent":
                    if (!DBUpdate && !((UpdateFrontEvent)e).Force)
                    {
                        break;
                    }

                    var currentSys = CurrentStarSystem = GetCurrentStarSystem();
                    if (((UpdateFrontEvent)e).Full)
                    {
                        mutex.WaitOne();
                        var nearSystems = db.GetCollection <StarSystem>()
                                          .Find(s => (s.X - currentSys.X) * (s.X - currentSys.X) + (s.Y - currentSys.Y) * (s.Y - currentSys.Y) + (s.Z - currentSys.Z) * (s.Z - currentSys.Z) <= 2500)
                                          .OrderBy(s => (s.X - currentSys.X) * (s.X - currentSys.X) + (s.Y - currentSys.Y) * (s.Y - currentSys.Y) + (s.Z - currentSys.Z) * (s.Z - currentSys.Z))
                                          .ToList();
                        mutex.ReleaseMutex();
                        Program.mainForm.updateGrid(currentSys, nearSystems);
                    }
                    else
                    {
                        Program.mainForm.UpdateFirstLine();
                    }
                    break;

                case "FSDTarget":
                    var sysName   = ((FSDTargetEvent)e).Name;
                    var targetSys = GetStarSystem(((FSDTargetEvent)e).SystemAddress);
                    if (targetSys == null)
                    {
                        Program.mainForm.UpdateStatus(((FSDTargetEvent)e).Name + " probably not scanned");
                        Thread.Sleep(1000);
                    }
                    break;

                case "SetConfig":
                    var cp = GetConfig(((SetConfig)e).key);
                    if (cp == null)
                    {
                        db.GetCollection <ConfigPair>().Insert(new ConfigPair {
                            Key = ((SetConfig)e).key, Value = ((SetConfig)e).value.ToString()
                        });
                    }
                    else
                    {
                        cp.Value = ((SetConfig)e).value.ToString();
                        db.GetCollection <ConfigPair>().Update(cp);
                    }

                    break;

                case "FSDJump":
                    sys = GetStarSystem(((FSDJumpEvent)e).SystemAddress);
                    if (sys == null)
                    {
                        sys            = new StarSystem();
                        sys.SystemId   = ((FSDJumpEvent)e).SystemAddress;
                        sys.SystemName = ((FSDJumpEvent)e).StarSystem;
                        sys.X          = ((FSDJumpEvent)e).StarPos[0];
                        sys.Y          = ((FSDJumpEvent)e).StarPos[1];
                        sys.Z          = ((FSDJumpEvent)e).StarPos[2];
                        sys._id        = db.GetCollection <StarSystem>().Insert(sys);
                        DBUpdate       = true;
                    }
                    if (e.timestamp != sys.LastVisite)
                    {
                        sys.LastVisite = e.timestamp;
                        sys.Visites++;
                        DBUpdate = true;
                        if (!sys.NearStarImported)
                        {
                            var nearSystem = EDSMAPI.GetNearSystem(sys);
                            if (nearSystem != null)
                            {
                                var i = 0;
                                List <StarSystem> nearSys = new List <StarSystem>();
                                foreach (EDSMSystem _edsmsystem in nearSystem)
                                {
                                    Program.mainForm.UpdateStatus("import system (" + ((++i * 100) / nearSystem.Count()) + "%)(" + i + "/" + nearSystem.Count + ") " + _edsmsystem.name);
                                    if (GetStarSystem(_edsmsystem.id64) == null)
                                    {
                                        nearSys.Add(edsmSysToStandarSys(_edsmsystem));
                                    }
                                }
                                db.GetCollection <StarSystem>().InsertBulk(nearSys);
                                sys.NearStarImported = true;
                            }
                        }
                    }

                    break;

                case "FSSDiscoveryScan":
                    sys             = CurrentStarSystem;
                    sys.BodiesCount = ((FSSDiscoveryScanEvent)e).BodyCount;
                    if (((FSSDiscoveryScanEvent)e).Progress == 1.0d)
                    {
                        sys.Bodies.ForEach(b => b.Scanned = true);
                        sys.AllBodiesFound = true;
                    }
                    db.GetCollection <StarSystem>().Update(sys);
                    DBUpdate = true;
                    break;

                case "FSSAllBodiesFound":
                    sys = CurrentStarSystem;
                    sys.AllBodiesFound = true;
                    db.GetCollection <StarSystem>().Update(sys);
                    DBUpdate = true;
                    break;

                case "Scan":
                    if (((ScanEvent)e).BodyName.Contains("Belt Cluster"))
                    {
                        break;
                    }
                    sys = GetStarSystem(((ScanEvent)e).SystemAddress);
                    if (sys == null)
                    {
                        sys = AddStarSystem(EDSMAPI.GetSystem(((ScanEvent)e).StarSystem));
                    }
                    var body = sys.Bodies.Where(b => b.BodyName == ((ScanEvent)e).BodyName).FirstOrDefault();
                    if (body == null)
                    {
                        body          = new Body();
                        body.BodyName = ((ScanEvent)e).BodyName;
                        if (((ScanEvent)e).StarType != null)
                        {
                            body.BodyType = ((ScanEvent)e).StarType;
                        }
                        else
                        {
                            body.BodyType = ((ScanEvent)e).PlanetClass;
                        }
                        body.TerraformState = ((ScanEvent)e).TerraformState;
                        body.Distance       = ((ScanEvent)e).DistanceFromArrivalLS;
                        body.Scanned        = true;

                        sys.Bodies.Add(body);
                        db.GetCollection <StarSystem>().Update(sys);
                    }
                    body.Scanned = true;
                    db.GetCollection <Body>().Update(body);
                    DBUpdate = true;

                    break;

                default: break;
                }
            }
        }