public override void OnLoad(ConfigNode node) { if (node.GetNodes("InhabitedBody").Count() == 0) { node = DefaultConfiguration(); } foreach (var i in node.GetNodes("InhabitedBody")) { string name = i.GetValue("name"); CelestialBody body = FlightGlobals.Bodies.FirstOrDefault(x => x.name == name); int seed = int.Parse(i.GetValue("seed")); ThreadDispatcher.QueueToWorker(() => { KSPPlanet planet = LoadPlanet(i, body, seed); lock (planets) { planets.Add(planet.Body, planet); } }); } ThreadDispatcher.QueueToWorker(() => ThreadDispatcher.QueueToMainThread(() => PhysicsReady = true)); }
public void UpdatePosition(Coordinates coord) { DebugUtils.Assert(ThreadDispatcher.IsMainThread); int NextTile = FindTile(coord, CurrentTile); //if (NextTile == CurrentTile) // return; CurrentTile = NextTile; lock (this) NextPosition = coord; ThreadDispatcher.QueueToWorker(() => UpdatePositionWorker()); if (tileOverlayObj == null) { tileOverlayObj = new GameObject(); tileOverlay = tileOverlayObj.AddComponent <MapOverlayTiles>(); tileOverlay.Body = Body; tileOverlay.planet = this; } var tileColors = new Dictionary <int, Color32>(); /*int city = -1; * if (data.ContainsKey(CurrentTile)) * city = data[CurrentTile].ClosestCity;*/ foreach (var i in data) { byte r, g, b; //if (i.Value.Color(out r, out g, out b, city)) if (i.Value.Color(out r, out g, out b)) { tileColors[i.Key] = new Color32(r, g, b, 255); } } if (data.ContainsKey(CurrentTile) && IsNodeAllowed(CurrentTile)) { var knownCities = data.Where(x => x.Value.HasCity.GetValueOrDefault()).Select(x => x.Key).ToArray(); if (knownCities.Length > 0) { var pf = new Pathfinding(this, knownCities, CurrentTile); var path = pf.GetPath(CurrentTile).ToArray(); int city = data[CurrentTile].ClosestCity; if (city >= 0) { foreach (var i in data) { if (IsNodeAllowed(i.Key) && data[i.Key].Level >= TileData.ComputationLevel.CITY_BORDER_FOUND && city == data[i.Key].ClosestCity && !data[i.Key].HasCity.GetValueOrDefault()) { tileColors[i.Key] = XKCDColors.Yellow; } } for (int i = 0; i < path.Length - 1; i++) { tileColors[path[i]] = XKCDColors.Orange; } tileColors[CurrentTile] = XKCDColors.Pink; var tmp = TileData._frontier; if (tmp != null) { foreach (var i in tmp) { tileColors[i] = XKCDColors.BabyPukeGreen; //DebugUtils.Assert(data[i].ClosestCity != city); } } } } } tileOverlay.UpdateTiles(tileColors); }