Пример #1
0
        private void CalculatePath(AdjacentTileGroup <PathPoint> path)
        {
            Path = new CyclingList <PathPoint>();

            Vector2 start = MovingObject.Position.Center;

            while (path.Tiles.Count() > 1)
            {
                var continousPath = path.GetContinuousPath(start).ToArray();
                Path.AddItem(continousPath.First());

                path.Tiles = path.Tiles.Where(p => p == continousPath.Last() || !continousPath.Contains(p)).ToArray();
                start      = continousPath.Last().Position.Center;
            }

            if (path.Tiles.Count() == 1)
            {
                Path.AddItem(path.Tiles[0]);
            }

            var reverse = Path.Items.Skip(1).ToList();

            reverse.Reverse();
            Path.AddRange(reverse.Skip(1));
        }
Пример #2
0
        public PathMoverBehavior(TMoveable movingObject, AdjacentTileGroup <PathPoint> path)
        {
            MovingObject = movingObject;
            movingObject.Layer.Scene.AddObject(this);

            CalculatePath(path);
        }