public ControlParser(string srcFileDirPath, PsdLayerExtractor.Layer layer) { var errorPreMsg = "Parse error at '" + srcFileDirPath + "/" + layer.name + "'."; var name_cmdAndVals = layer.name.Split('@'); this.srcFileDirPath = srcFileDirPath; this.originalName = layer.name; this.name = name_cmdAndVals[0]; { for (var i = 1; i < name_cmdAndVals.Length; ++i) { name_cmdAndVals[i] = name_cmdAndVals[i].Trim().ToLower(); } } this.ParseCommandType(name_cmdAndVals, layer, errorPreMsg); if (this.type == ControlType.Script) { this.text = string.IsNullOrEmpty(layer.text) ? "" : layer.text.Trim(); } else { this.fullName = this.name + (string.IsNullOrEmpty(this.command) ? "" : '@' + this.command); var comment = this.ParseComment(name_cmdAndVals); if (!string.IsNullOrEmpty(comment)) { this.name = this.name + "(" + comment + ")"; } this.area = new PsdLayerRect( layer.psdLayer.area.left, layer.psdLayer.area.top, layer.psdLayer.area.width, layer.psdLayer.area.height); this.hasBoxCollider = this.ParseCollider(name_cmdAndVals) == "box"; this.sliceArea = this.ParseSliceArea(name_cmdAndVals); this.color = this.ParseColor(name_cmdAndVals); if (!string.IsNullOrEmpty(layer.text)) { this.text = layer.text.Trim(); var arr = this.text.Split('\n'); this.fontSize = Mathf.FloorToInt(this.area.height / arr.Length * 0.92f); } else { this.text = this.ParseText(name_cmdAndVals); } this.bold = this.IsBold(name_cmdAndVals); this.shadow = this.IsShadow(name_cmdAndVals); this.align = this.ParseAlign(name_cmdAndVals); this.fps = this.ParseFps(name_cmdAndVals); } }
private PsdLayerRect ParseSliceArea(string[] name_cmdAndVals) { var area = this.ParseCommand("slice", name_cmdAndVals); if (!string.IsNullOrEmpty(area)) { var values = area.Split('x'); var rc = new PsdLayerRect(); { rc.left = this.ParseSliceValue(values[0], false); rc.top = values.Length < 2 ? rc.left : this.ParseSliceValue(values[1], true); rc.right = values.Length < 3 ? rc.left : this.ParseSliceValue(values[2], false); rc.bottom = values.Length < 4 ? rc.top : this.ParseSliceValue(values[3], true); } return(rc); } return(null); }
private Texture MakeSlicedSprites(ref byte[] data, Layer layer, PsdLayerRect area) { var channelCount = layer.psdLayer.channels.Length; var pitch = layer.psdLayer.pitch; var w = layer.psdLayer.area.width; var h = layer.psdLayer.area.height; var x1 = area.left; var y1 = area.top; var x2 = area.right; var y2 = area.bottom; var aaa = 0; var rc1 = new Rect(0, 0, x1 + aaa, y1 + aaa); var rc2 = new Rect(w - x2, 0, x2, y1 + aaa); var rc3 = new Rect(0, h - y2, x1 + aaa, y2); var rc4 = new Rect(w - x2, h - y2, x2, y2); var ww = (int)(rc1.width + rc2.width); var hh = (int)(rc1.height + rc3.height); var format = channelCount == 3 ? TextureFormat.RGB24 : TextureFormat.ARGB32; var tex = new Texture2D(ww, hh, format, false); var opacity = (byte)Mathf.RoundToInt(layer.psdLayer.opacity * 255f); var colors = new Color32[ww * hh]; var k = 0; for (var y = h - 1; y >= 0; --y) { var yy = h - 1 - y; var xx = 0; for (var x = 0; x < pitch; x += channelCount) { var n = x + y * pitch; var c = new Color32(1, 1, 1, 1); if (channelCount == 3) { c.b = data[n++]; c.g = data[n++]; c.r = data[n++]; c.a = opacity; } else { c.b = data[n++]; c.g = data[n++]; c.r = data[n++]; c.a = (byte)Mathf.RoundToInt(data[n++] / 255f * opacity); } var pt = new Vector2(xx++, yy); if (rc1.Contains(pt) || rc2.Contains(pt) || rc3.Contains(pt) || rc4.Contains(pt)) { colors[k++] = c; } } } tex.filterMode = FilterMode.Point; tex.SetPixels32(colors); tex.Apply(); data = tex.EncodeToPNG(); return(tex); }
private PsdLayerRect ParseSliceArea(string[] name_cmdAndVals) { var area = this.ParseCommand("slice", name_cmdAndVals); if (!string.IsNullOrEmpty(area)) { var values = area.Split('x'); var rc = new PsdLayerRect(); { rc.left = this.ParseSliceValue(values[0], false); rc.top = values.Length < 2 ? rc.left : this.ParseSliceValue(values[1], true); rc.right = values.Length < 3 ? rc.left : this.ParseSliceValue(values[2], false); rc.bottom = values.Length < 4 ? rc.top : this.ParseSliceValue(values[3], true); } return rc; } return null; }
public ControlParser(string srcFileDirPath, PsdLayerExtractor.Layer layer) { var errorPreMsg = "Parse error at '" +srcFileDirPath+ "/" +layer.name+ "'."; var name_cmdAndVals = layer.name.Split('@'); this.srcFileDirPath = srcFileDirPath; this.originalName = layer.name; this.name = name_cmdAndVals[0]; { for (var i=1; i<name_cmdAndVals.Length; ++i) { name_cmdAndVals[i] = name_cmdAndVals[i].Trim().ToLower(); } } this.ParseCommandType(name_cmdAndVals, layer, errorPreMsg); if (this.type == ControlType.Script) { this.text = string.IsNullOrEmpty(layer.text) ? "" : layer.text.Trim(); } else { this.fullName = this.name + (string.IsNullOrEmpty(this.command) ? "" : '@' + this.command); var comment = this.ParseComment(name_cmdAndVals); if (!string.IsNullOrEmpty(comment)) this.name = this.name + "(" + comment + ")"; this.area = new PsdLayerRect( layer.psdLayer.area.left, layer.psdLayer.area.top, layer.psdLayer.area.width, layer.psdLayer.area.height); this.hasBoxCollider = this.ParseCollider(name_cmdAndVals) == "box"; this.sliceArea = this.ParseSliceArea(name_cmdAndVals); this.color = this.ParseColor(name_cmdAndVals); if (!string.IsNullOrEmpty(layer.text)) { this.text = layer.text.Trim(); var arr = this.text.Split('\n'); this.fontSize = Mathf.FloorToInt(this.area.height / arr.Length * 0.92f); } else this.text = this.ParseText(name_cmdAndVals); this.bold = this.IsBold(name_cmdAndVals); this.shadow = this.IsShadow(name_cmdAndVals); this.align = this.ParseAlign(name_cmdAndVals); this.fps = this.ParseFps(name_cmdAndVals); } }
private Texture MakeSlicedSprites(ref byte[] data, Layer layer, PsdLayerRect area) { var channelCount = layer.psdLayer.channels.Length; var pitch = layer.psdLayer.pitch; var w = layer.psdLayer.area.width; var h = layer.psdLayer.area.height; var x1 = area.left; var y1 = area.top; var x2 = area.right; var y2 = area.bottom; var aaa = 0; var rc1 = new Rect(0, 0, x1 + aaa, y1 + aaa); var rc2 = new Rect(w - x2, 0, x2, y1 + aaa); var rc3 = new Rect(0, h - y2, x1 + aaa, y2); var rc4 = new Rect(w - x2, h - y2, x2, y2); var ww = (int)(rc1.width + rc2.width); var hh = (int)(rc1.height + rc3.height); var format = channelCount == 3 ? TextureFormat.RGB24 : TextureFormat.ARGB32; var tex = new Texture2D(ww, hh, format, false); var opacity = (byte)Mathf.RoundToInt(layer.psdLayer.opacity * 255f); var colors = new Color32[ww * hh]; var k = 0; for (var y=h-1; y>=0; --y) { var yy = h-1-y; var xx = 0; for (var x=0; x<pitch; x+=channelCount) { var n = x + y * pitch; var c = new Color32(1,1,1,1); if (channelCount == 3) { c.b = data[n++]; c.g = data[n++]; c.r = data[n++]; c.a = opacity; } else { c.b = data[n++]; c.g = data[n++]; c.r = data[n++]; c.a = (byte)Mathf.RoundToInt(data[n++]/255f * opacity); } var pt = new Vector2(xx++, yy); if (rc1.Contains(pt) || rc2.Contains(pt) || rc3.Contains(pt) || rc4.Contains(pt)) colors[k++] = c; } } tex.filterMode = FilterMode.Point; tex.SetPixels32(colors); tex.Apply(); data = tex.EncodeToPNG(); return tex; }
private static bool SetSlicedSprite(string fullName, PsdLayerRect sliceArea) { if (sliceArea == null) return false; var spr = PsdLayerToNGUI.data.atlasPrefab.GetSprite(fullName); if (spr != null) { spr.borderLeft = (int)sliceArea.left; spr.borderRight = (int)sliceArea.right; spr.borderBottom = (int)sliceArea.bottom; spr.borderTop = (int)sliceArea.top; } return true; }