public PackAtlasSprite(BinRaw binRaw, SpriteRaw spriteRaw) { mMain = binRaw.main; Debug.Assert(mMain != null, "Can not find main texture."); mAddition = binRaw.addition; mName = spriteRaw.name; mRect = spriteRaw.rect; mBorder = spriteRaw.border; mPivot = spriteRaw.pivot; mTransparency = PackUtil.CheckAtlasBinTranparency(binRaw); mQuality = (PackQuality)binRaw.quality; }
private void OnPreviewInfoGUI(Rect rect, SpriteRaw sprite) { var bottomInfo = new GUIContent(sprite.rect.width + "x" + sprite.rect.height); var bottomInfoSize = EditorStyles.boldLabel.CalcSize(bottomInfo); EditorGUI.LabelField(new Rect(rect.x + rect.width * 0.5f - bottomInfoSize.x * 0.5f, rect.yMax, bottomInfoSize.x, bottomInfoSize.y), bottomInfo, EditorStyles.boldLabel); if (mShowBorder) { var border = sprite.border; EditorGUI.LabelField(new Rect(rect.x, rect.y + rect.height - 40, rect.width, 20), string.Format("L:{0}, B:{1}, R:{2}, T:{3}", (int)border.x, (int)border.y, (int)border.z, (int)border.w)); var pivot = sprite.pivot; EditorGUI.LabelField(new Rect(rect.x, rect.y + rect.height - 20, rect.width, 20), string.Format("PX:{0}, PY:{1}", pivot.x, pivot.y)); } }
public bool Fetch(SpriteIndex index, out AtlasRaw atlas, out BinRaw bin, out SpriteRaw sprite) { atlas = null; bin = null; sprite = null; if (index.atlas < mAtlases.Count) { atlas = mAtlases[index.atlas]; if (index.bin < atlas.bins.Length) { bin = atlas.bins[index.bin]; if (index.sprite < bin.sprites.Length) { sprite = bin.sprites[index.sprite]; return(true); } } } return(false); }
public static void IndexSprite(AtlasRaw atlas, SpriteRaw sprite, out int iBin, out int iSprite) { iBin = -1; iSprite = -1; for (int i = 0; i < atlas.bins.Length; i++) { var bin = atlas.bins[i]; for (int j = 0; j < bin.sprites.Length; j++) { if (bin.sprites[j] == sprite) { iSprite = j; break; } } if (iSprite != -1) { iBin = i; break; } } }
private void OnPreivewTitleGUI(Rect rect, SpriteRaw sprite) { var controlID = GUIUtility.GetControlID(FocusType.Passive); var eventType = Event.current.GetTypeForControl(controlID); if (eventType == EventType.Repaint) { EditorStyles.toolbar.Draw(rect, GUIContent.none, controlID); } if (GUI.Button(new Rect(rect.x, rect.y, 60, rect.height), "Save", EditorStyles.toolbarButton)) { AssetDatabase.SaveAssets(); } EditorGUI.LabelField(new Rect(rect.x + rect.width - 320, rect.y, 40, rect.height), "Name", EditorStyles.miniLabel); EditorGUI.BeginChangeCheck(); sprite.name = EditorGUI.TextField(new Rect(rect.x + rect.width - 280, rect.y + 1, 200, rect.height), sprite.name, EditorStyles.toolbarTextField); if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(target); } mShowBorder = GUI.Toggle(new Rect(rect.x + rect.width - 80, rect.y, 80, rect.height), mShowBorder, "Edit Border", EditorStyles.toolbarButton); }
public static Rect DrawSpriteInRect(Texture2D main, Texture2D alpha, SpriteRaw sprite, Rect rect, Vector2 margin) { var spw = sprite.rect.width; var sph = sprite.rect.height; if (spw / sph >= rect.width / rect.height) { if (spw > rect.width - margin.x) { spw = Mathf.Max(rect.width - margin.x, 1); sph = sprite.rect.height / sprite.rect.width * spw; } } else { if (sph > rect.height - margin.y) { sph = Mathf.Max(rect.height - margin.y, 1); spw = sprite.rect.width / sprite.rect.height * sph; } } var previewRect = new Rect( rect.x + (rect.width - spw) * 0.5f, rect.y + (rect.height - sph) * 0.5f, spw, sph ); var uvRect = new Rect( sprite.rect.x / main.width, sprite.rect.y / main.height, sprite.rect.width / main.width, sprite.rect.height / main.height); DrawGrid(previewRect); DrawSprite(previewRect, main, alpha, uvRect); return(previewRect); }
public static PackAtlasSprite ParseSprite(BinRaw binRaw, SpriteRaw spriteRaw) { return(new PackAtlasSprite(binRaw, spriteRaw)); }
private void OnSpriteBorderGUI(Rect panelRect, Rect borderRect, SpriteRaw sprite) { var controlID = GUIUtility.GetControlID(FocusType.Passive); var eventType = Event.current.GetTypeForControl(controlID); var border = sprite.border; var borderScale = new Vector2( borderRect.width / sprite.rect.width, borderRect.height / sprite.rect.height); var scaledBorder = new Vector4( border.x * borderScale.x, border.y * borderScale.y, border.z * borderScale.x, border.w * borderScale.y); var lines = new Rect[] { new Rect(panelRect.x, borderRect.y + scaledBorder.w, panelRect.width, 1), new Rect(panelRect.x, borderRect.yMax - scaledBorder.y - 1, panelRect.width, 1), new Rect(borderRect.x + scaledBorder.x, panelRect.y, 1, panelRect.height), new Rect(borderRect.xMax - scaledBorder.z - 1, panelRect.y, 1, panelRect.height), }; foreach (var line in lines) { EditorGUI.DrawRect(line, Color.green); } var area = Mathf.Min(3, borderRect.width * 0.5f, borderRect.height * 0.5f); var areas = new Rect[] { new Rect(lines[0].x, lines[0].y - area, lines[0].width, lines[0].height + area * 2), new Rect(lines[1].x, lines[1].y - area, lines[1].width, lines[1].height + area * 2), new Rect(lines[2].x - area, lines[2].y, lines[2].width + area * 2, lines[2].height), new Rect(lines[3].x - area, lines[3].y, lines[3].width + area * 2, lines[3].height), }; switch (eventType) { case EventType.MouseDown: { for (int i = 0; i < areas.Length; i++) { if (areas[i].Contains(Event.current.mousePosition)) { GUIUtility.hotControl = controlID; var index = GUIUtility.GetStateObject(typeof(List <int>), controlID) as List <int>; index.Clear(); index.Add(i); break; } } break; } case EventType.MouseDrag: { if (GUIUtility.hotControl == controlID && panelRect.Contains(Event.current.mousePosition)) { var delta = Event.current.delta; delta.x *= 1 / borderScale.x; delta.y *= 1 / borderScale.y; var index = GUIUtility.GetStateObject(typeof(List <int>), controlID) as List <int>; var i = index[0]; if (i == 0) { border.w = Mathf.Clamp(border.w + delta.y, 0, sprite.rect.height); } else if (i == 1) { border.y = Mathf.Clamp(border.y - delta.y, 0, sprite.rect.height); } else if (i == 2) { border.x = Mathf.Clamp(border.x + delta.x, 0, sprite.rect.width); } else if (i == 3) { border.z = Mathf.Clamp(border.z - delta.x, 0, sprite.rect.width); } sprite.border = border; EditorUtility.SetDirty(target); Event.current.Use(); } break; } case EventType.MouseUp: { if (GUIUtility.hotControl == controlID) { GUIUtility.hotControl = 0; } break; } } }