// interactive stuffs private void MapMouseDrag(object sender, MouseEventArgs e) { if (MapInfo.DoDrag && MapInfo.CanDrag) { bool doupdate = false; Vec deltamouse = MapInfo.OldMousePos - new Vec() { e.GetPosition(map).X, e.GetPosition(map).Y }; Areas.TotalDistance += deltamouse.Mag; Time.delta = (deltamouse.Mag * MapInfo.MoveRate); Time.time += (uint)Time.delta; MapInfo.position = MapInfo.position + deltamouse; if (MapInfo.position[0] < -100) { MapInfo.position[0] += 200; MapInfo.chunkpos[0] -= 1; doupdate = true; } if (MapInfo.position[0] > 100) { MapInfo.position[0] -= 200; MapInfo.chunkpos[0] += 1; doupdate = true; } if (MapInfo.position[1] < -100) { MapInfo.position[1] += 200; MapInfo.chunkpos[1] -= 1; doupdate = true; } if (MapInfo.position[1] > 100) { MapInfo.position[1] -= 200; MapInfo.chunkpos[1] += 1; doupdate = true; } if (doupdate) { MapInfo.DoDrag = false; MapInfo.Update(); } MapInfo.MoveUpdate(); Areas.Load(MapInfo.CurrBiome); TransformGroup group = new TransformGroup(); group.Children.Add(new TranslateTransform(-MapInfo.position[0], -MapInfo.position[1])); map.RenderTransform = group; Characters.Update(); Sun.Draw(); double shortest_dist = double.MaxValue; for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { try { foreach (Bases.Base checking in Bases.BaseList[(int)MapInfo.chunkpos[0] + i, (int)MapInfo.chunkpos[1] + j]) { Vec temp = MapInfo.position + new Vec() { 100, 100 } -(checking.pos + new Vec() { 200 * i, 200 * j }); double dist = temp * temp; if (dist <= shortest_dist) { shortest_dist = dist; Bases.NearestBase = checking; } } } catch { } } } Bases.Base temp_base = Bases.SelectedBase; if (Bases.NearestBase.distance_to <= 50) { Bases.SelectedBase = Bases.NearestBase; } else { Bases.SelectedBase = null; } if (temp_base != Bases.SelectedBase) { MapInfo.Update(); } } }