Пример #1
0
        internal static Codespace.Ordinal InvertDirection(Codespace.Ordinal direction)
        {
            switch (direction)
            {
            case Codespace.Ordinal.Left:
                return(Codespace.Ordinal.Right);

            case Codespace.Ordinal.Right:
                return(Codespace.Ordinal.Left);

            case Codespace.Ordinal.Up:
                return(Codespace.Ordinal.Down);

            case Codespace.Ordinal.Down:
                return(Codespace.Ordinal.Up);
            }

            throw new Exception();
        }
Пример #2
0
        /// <summary>
        /// Generate a path from actors current position to the extent of the Codespace in given direction
        /// </summary>
        /// <param name="ord"></param>
        /// <param name="a"></param>
        /// <returns></returns>
        public static PathGeometry OrdinalPath(Codespace.Ordinal ord, DynamicElement el)
        {
            PathFigure pFigure = new PathFigure();

            pFigure.StartPoint = el.MidPoint;

            Point endpoint = el.MidPoint;

            switch (ord)
            {
            case Codespace.Ordinal.Right:
                endpoint.Offset(el.Parent.Right, 0);
                break;

            case Codespace.Ordinal.Left:
                endpoint.Offset(el.Parent.Left, 0);
                break;

            case Codespace.Ordinal.Up:
                endpoint.Offset(0, el.Parent.Top);
                break;

            case Codespace.Ordinal.Down:
                endpoint.Offset(0, el.Parent.Bottom);
                break;
            }


            pFigure.Segments.Add(new LineSegment(endpoint, true));


            PathGeometry animationPath = new PathGeometry();

            animationPath.Figures.Add(pFigure);
            // Freeze the PathGeometry for performance benefits.
            animationPath.Freeze();
            return(animationPath);
        }
Пример #3
0
        internal PathGeometry GenerateMagneticPath(VisualElement el)
        {
            if (!this.HasMagneticBorder)
            {
                return(null);
            }

            DynamicElement de = el as DynamicElement;

            if (null != de)
            {
                Codespace.Ordinal direction = _magnetism.Value;

                if (de.MagneticState == DynamicElement.Magnestism.Antimagnetic)
                {
                    direction = PathHelper.InvertDirection(direction);
                }

                return(PathHelper.OrdinalPath(direction, de));
            }

            return(null);
        }