/// <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)); }
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); }
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; }