public static ApplyBorder GetBorderFor(int x, int y) { var request = new ApplyBorder(); switch (x) { case 0: request.Left = ApplyBorder.Style.Transparent; break; case 1: request.Right = ApplyBorder.Style.Clone; break; case 2: request.Left = ApplyBorder.Style.Clone; break; case 3: if (y < 2) { request.Right = ApplyBorder.Style.Clone; } else { request.Right = ApplyBorder.Style.Transparent; } break; } switch (y) { case 0: case 4: request.Top = ApplyBorder.Style.Clone; break; case 1: request.Bottom = ApplyBorder.Style.Clone; break; case 2: request.Top = ApplyBorder.Style.Transparent; break; case 3: request.Bottom = ApplyBorder.Style.Clone; break; case 5: request.Bottom = ApplyBorder.Style.Transparent; break; } return(request); }
private static Color[] CreateStamps(Texture2D original, Vector2Int start, Vector2Int size, ApplyBorder applyBorder) { var request = original.GetPixels(start.x, start.y, size.x, size.y); var borderTexture = CreateBlankTexture(new Vector2Int(size.x + 1, size.y + 1)); borderTexture.SetPixels(applyBorder.Left == ApplyBorder.Style.None ? 0 : 1, applyBorder.Bottom == ApplyBorder.Style.None ? 0 : 1, size.x, size.y, request); if (applyBorder.Left == ApplyBorder.Style.Clone) { var clone = original.GetPixels(start.x, start.y, 1, size.y); borderTexture.SetPixels(0, applyBorder.Bottom == ApplyBorder.Style.None ? 0 : 1, 1, size.y, clone); } if (applyBorder.Right == ApplyBorder.Style.Clone) { var clone = original.GetPixels(start.x + size.x - 1, start.y, 1, size.y); borderTexture.SetPixels(size.x, applyBorder.Bottom == ApplyBorder.Style.None ? 0 : 1, 1, size.y, clone); } if (applyBorder.Bottom == ApplyBorder.Style.Clone) { var clone = original.GetPixels(start.x, start.y, size.x, 1); borderTexture.SetPixels(applyBorder.Left == ApplyBorder.Style.None ? 0 : 1, 0, size.x, 1, clone); } if (applyBorder.Top == ApplyBorder.Style.Clone) { var clone = original.GetPixels(start.x, start.y + size.y - 1, size.x, 1); borderTexture.SetPixels(applyBorder.Left == ApplyBorder.Style.None ? 0 : 1, size.y, size.x, 1, clone); } borderTexture.Apply(); request = borderTexture.GetPixels(); GameObject.DestroyImmediate(borderTexture); return(request); }
private static List <Color[]> GetsStampsFrom(Texture2D original, Vector2Int stampSize, Vector2Int location) { var request = new List <Color[]>(); for (var y = 0; y < 6; y++) { for (var x = 0; x < 4; x++) { if (x < 2 && y < 2) { continue; } request.Add(CreateStamps(original, location + new Vector2Int(stampSize.x * x, stampSize.y * 6 - stampSize.y * (y + 1)), stampSize, ApplyBorder.GetBorderFor(x, y))); } } return(request); }