/// <summary> /// Merges the loaded layers! /// </summary> public void MergeLayers() { if (this.layers.Count() == 0) { throw new Exception("Perform LoadLayers() first."); } mapTiles = new Texture2D[this.layers.GetFirst().data.GetLength(0), this.layers.GetFirst().data.GetLength(1)]; for (int i = 0; i < this.layers.GetFirst().data.GetLength(0); i++) { for (int j = 0; j < this.layers.GetFirst().data.GetLength(1); j++) { CustomArrayList<Texture2D> preBlend = new CustomArrayList<Texture2D>(); for (int k = 0; k < this.layers.Count(); k++) { int data = this.layers.ElementAt(k).data[i, j]; if (data != -1) preBlend.AddLast(this.individualTiles[data]); } mapTiles[i, j] = this.BlendTextures(preBlend.ToArray(), BlendMode.PriorityBlend); // One step closer to completion Game1.GetInstance().currentLoadProgress += 9; } } }
/// <summary> /// Merges a linked list of textures. /// </summary> /// <param name="textures"></param> /// <returns></returns> public Texture2D MergeTextures(CustomArrayList<Texture2D> textures) { return this.MergeTextures(textures.ToArray()); }
/// <summary> /// Gets the pixels between points. /// </summary> /// <param name="p1">Point one</param> /// <param name="p2">Point two</param> /// <param name="spacing">The pixel spacing between the points (default should be 1). Lower than 1 will use 1.</param> /// <returns></returns> public Point[] PixelsBetweenPoints(Point p1, Point p2, int spacing) { if (spacing < 1) spacing = 1; int xDiff = p2.X - p1.X; int yDiff = p2.Y - p1.Y; double maxWidth = Math.Max(Math.Abs(xDiff), Math.Abs(yDiff)); double xDelta = (xDiff / maxWidth) * spacing; // Console.Out.WriteLine("xDelta: " + xDelta); double yDelta = (yDiff / maxWidth) * spacing; // Console.Out.WriteLine("yDelta: " + yDelta); CustomArrayList<Point> pointList = new CustomArrayList<Point>(); Point currentPoint = p1; Point previousPoint = new Point(-100, -100); double currentX = p1.X, currentY = p1.Y; for (int i = 0; i < maxWidth / spacing; i++) { currentX += xDelta; currentY += yDelta; currentPoint.X = (int)currentX; currentPoint.Y = (int)currentY; Point newPoint = new Point(currentPoint.X, currentPoint.Y); if (previousPoint != null && !previousPoint.Equals(newPoint)) { // Console.Out.WriteLine(i + ". Adding point to list: " + newPoint); pointList.AddLast(newPoint); } previousPoint = newPoint; } return pointList.ToArray(); }