Esempio n. 1
0
        // 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();
                }
            }
        }