Пример #1
0
        /// <summary>
        /// Класс для манипуляции нарисованными элемнтами
        /// </summary>
        /// <param name="GetDistanceXY">Функция возвращающая дистанцию до цели</param>
        /// <param name="DrawElement">Рисование копии объекта</param>
        /// <param name="DrawShadow">Рисование тени объекта</param>
        /// <param name="GetHookPoint">Функция возвращающая точку захвата</param>
        /// <param name="AcceptNewCoordinates">Применить изменения к оригиналу</param>
        /// <param name="Element">Манипулируемый элемент</param>
        /// <param name="SubHooks"></param>
        /// <param name="ContextMenu">Контекстное меню</param>
        /// <param name="ChangeMethod">Метод передвижения</param>
        /// <param name="GetMagnetRadius">Радиус Зацепления</param>
        public Hook(
            HookElement Element,
            Func <Point, double> GetDistanceXY,
            Func <Point, Point> GetHookPoint,
            Func <double> GetMagnetRadius,
            Action <Vector?> ChangeMethod,
            Action <Vector?, DrawingVisual, DrawingVisual, DrawingVisual, bool> DrawElement,
            Action <DrawingVisual, DrawingVisual, DrawingVisual> DrawShadow,
            Action AcceptNewCoordinates,
            List <Hook> SubHooks = null)
        {
            this.Element       = Element;
            this.GetDistanceXY = GetDistanceXY;
            ActionDrawShadow   = DrawShadow;
            GetVal             = GetHookPoint;
            this.ChangeMethod  = ChangeMethod;
            ActionDrawOver     = DrawElement;
            this.SubHooks      = SubHooks;
            this.MagnetRadius  = GetMagnetRadius;
            this.AcceptChanges = AcceptNewCoordinates;

            Sets = Element.Sets;

            Element.Changed += o => Task.Run(() => ResetElement?.Invoke(o));
        }
Пример #2
0
        public static Path FromFile(string filename, Ship ship)
        {
            ushort  speed   = (ushort)ship.Status.WalkingSpeed;
            float   lastx   = ship.Position.x;
            float   lasty   = ship.Position.y;
            float   lastz   = ship.Position.z;
            Rotator lastyaw = ship.Yaw;
            Path    path    = new Path();

            using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
                using (XmlTextReader reader = new XmlTextReader(fs))
                {
                    while (reader.Read())
                    {
                        switch (reader.NodeType)
                        {
                        case XmlNodeType.Element:
                            switch (reader.Name.ToUpperInvariant())
                            {
                            case "POINT":
                                lastx   = float.Parse(reader["x"], CultureInfo.InvariantCulture);
                                lasty   = float.Parse(reader["y"], CultureInfo.InvariantCulture);
                                lastz   = float.Parse(reader["z"], CultureInfo.InvariantCulture);
                                lastyaw = int.Parse(reader["yaw"], CultureInfo.InvariantCulture);
                                PointElement p = new PointElement(path,
                                                                  lastx, lasty, lastz, lastyaw);
                                break;

                            case "RESETPOSITION":
                                lastx   = float.Parse(reader["x"], CultureInfo.InvariantCulture);
                                lasty   = float.Parse(reader["y"], CultureInfo.InvariantCulture);
                                lastz   = float.Parse(reader["z"], CultureInfo.InvariantCulture);
                                lastyaw = int.Parse(reader["yaw"], CultureInfo.InvariantCulture);
                                ResetElement r = new ResetElement(path,
                                                                  lastx, lasty, lastz, lastyaw);
                                break;

                            case "SET":
                                speed = ushort.Parse(reader["speed"], CultureInfo.InvariantCulture);
                                SetElement s = new SetElement(path, speed);
                                break;

                            case "SHIPYARD":
                                ShipYard y = new ShipYard(path,
                                                          new Point(lastx, lasty, lastz), lastyaw,
                                                          new Point(
                                                              float.Parse(reader["x"], CultureInfo.InvariantCulture),
                                                              float.Parse(reader["y"], CultureInfo.InvariantCulture),
                                                              float.Parse(reader["z"], CultureInfo.InvariantCulture)),
                                                          byte.Parse(reader["to"], CultureInfo.InvariantCulture),
                                                          uint.Parse(reader["shiptime"], CultureInfo.InvariantCulture),
                                                          uint.Parse(reader["docktime"], CultureInfo.InvariantCulture));
                                break;

                            case "START":
                                ship.Position            = new Point(lastx, lasty, lastz);
                                ship.Yaw                 = ship.Yaw;
                                path.resetpoint          = path.Elements.Count;
                                ship.Status.WalkingSpeed = speed;
                                break;
                            }
                            break;
                        }
                    }
                }

            return(path);
        }
Пример #3
0
        public static Path FromFile(string filename, Ship ship)
        {
            ushort speed = (ushort)ship.Status.WalkingSpeed;
            float lastx = ship.Position.x;
            float lasty = ship.Position.y;
            float lastz = ship.Position.z;
            Rotator lastyaw = ship.Yaw;
            Path path = new Path();
            using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
            using (XmlTextReader reader = new XmlTextReader(fs))
            {
                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                        case XmlNodeType.Element:
                            switch (reader.Name.ToUpperInvariant())
                            {
                                case "POINT":
                                    lastx = float.Parse(reader["x"], CultureInfo.InvariantCulture);
                                    lasty = float.Parse(reader["y"], CultureInfo.InvariantCulture);
                                    lastz = float.Parse(reader["z"], CultureInfo.InvariantCulture);
                                    lastyaw = int.Parse(reader["yaw"], CultureInfo.InvariantCulture);
                                    PointElement p = new PointElement(path,
                                        lastx, lasty, lastz, lastyaw);
                                    break;

                                case "RESETPOSITION":
                                    lastx = float.Parse(reader["x"], CultureInfo.InvariantCulture);
                                    lasty = float.Parse(reader["y"], CultureInfo.InvariantCulture);
                                    lastz = float.Parse(reader["z"], CultureInfo.InvariantCulture);
                                    lastyaw = int.Parse(reader["yaw"], CultureInfo.InvariantCulture);
                                    ResetElement r = new ResetElement(path,
                                        lastx, lasty, lastz, lastyaw);
                                    break;

                                case "SET":
                                    speed = ushort.Parse(reader["speed"], CultureInfo.InvariantCulture);
                                    SetElement s = new SetElement(path, speed);
                                    break;

                                case "SHIPYARD":
                                    ShipYard y = new ShipYard(path,
                                        new Point(lastx, lasty, lastz), lastyaw,
                                        new Point(
                                        float.Parse(reader["x"], CultureInfo.InvariantCulture),
                                        float.Parse(reader["y"], CultureInfo.InvariantCulture),
                                        float.Parse(reader["z"], CultureInfo.InvariantCulture)),
                                        byte.Parse(reader["to"], CultureInfo.InvariantCulture),
                                        uint.Parse(reader["shiptime"], CultureInfo.InvariantCulture),
                                        uint.Parse(reader["docktime"], CultureInfo.InvariantCulture));
                                    break;

                                case "START":
                                    ship.Position = new Point(lastx, lasty, lastz);
                                    ship.Yaw = ship.Yaw;
                                    path.resetpoint = path.Elements.Count;
                                    ship.Status.WalkingSpeed = speed;
                                    break;
                            }
                            break;
                    }
                }
            }

            return path;
        }