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)); }
public PathMoverBehavior(TMoveable movingObject, AdjacentTileGroup <PathPoint> path) { MovingObject = movingObject; movingObject.Layer.Scene.AddObject(this); CalculatePath(path); }