public override void OnInspectorGUI() { base.OnInspectorGUI(); var cropper = target as SpriteCropper; var texture = cropper.sprite.texture; if (GUILayout.Button("Auto Crop")) { AutoCrop(cropper); } var scale = EditorGUIUtility.currentViewWidth / texture.width * 0.5f; var previewRect = EditorGUILayout.GetControlRect(false, scale * texture.height, GUILayout.Width(scale * texture.width)); EditorGUI.DrawTextureTransparent(previewRect, texture); EditorUtils.DrawPreviewCaptureFrame(previewRect, cropper.boundRect.ToRect(), scale, true, Color.red); EditorUtils.DrawPreviewCaptureFrame(previewRect, cropper.cropRect.ToRect(), scale, true, Color.yellow); }
private void OnGUI() { imageFolder = EditorGUILayout.TextField("Character Image Folder", imageFolder); GUILayout.BeginHorizontal(); if (GUILayout.Button("Load Selected Folder")) { imageFolder = EditorUtils.GetSelectedDirectory(); uncropped = imageFolder.ToLower().Contains("uncrop"); layers.Clear(); dirty = true; } uncropped = GUILayout.Toggle(uncropped, "Uncropped"); GUILayout.EndHorizontal(); if (!uncropped) { referenceSize = EditorGUILayout.Vector2IntField("Reference Size", referenceSize); pixelsPerUnit = EditorGUILayout.FloatField("Pixels Per Unit", pixelsPerUnit); } reorderableList.DoLayoutList(); if (GUILayout.Button("Refresh")) { dirty = true; } if (dirty) { dirty = false; var sprites = layers.Where(p => !string.IsNullOrEmpty(p.name)).Select(p => p.sprite).ToList(); if (sprites.Count == 0) { texture = null; } else { if (uncropped) { var sprite = sprites[0].sprite; merger.referenceSize = new Vector2Int(sprite.texture.width, sprite.texture.height); merger.pixelsPerUnit = sprite.pixelsPerUnit; } else { merger.referenceSize = referenceSize; merger.pixelsPerUnit = pixelsPerUnit; } texture = merger.GetMergedTexture(name, sprites); } } if (texture == null) { return; } GUILayout.Label("Composed Pose Lua Table", EditorStyles.boldLabel); var luaTable = LayersToLuaTable(layers); EditorGUILayout.SelectableLabel(luaTable); if (GUILayout.Button("Copy")) { EditorGUIUtility.systemCopyBuffer = luaTable; } GUILayout.Label("Preview", EditorStyles.boldLabel); useCaptureBox = GUILayout.Toggle(useCaptureBox, "Use Capture Box"); if (useCaptureBox) { GUILayout.BeginHorizontal(); GUILayout.Label("Capture Box"); captureBox = EditorGUILayout.RectIntField(captureBox); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); captureDest = EditorGUILayout.TextField("Capture Destination", captureDest); if (GUILayout.Button("Capture")) { Texture2D tex = new Texture2D(captureBox.width, captureBox.height, TextureFormat.ARGB32, false); RenderTexture.active = texture as RenderTexture; tex.ReadPixels(new Rect(captureBox.x, captureBox.y, captureBox.width, captureBox.height), 0, 0); RenderTexture.active = null; tex.Apply(); var absoluteCaptureDest = Path.Combine(Path.GetDirectoryName(Application.dataPath), captureDest); Directory.CreateDirectory(Path.GetDirectoryName(absoluteCaptureDest)); File.WriteAllBytes(absoluteCaptureDest, tex.EncodeToPNG()); EditorUtility.DisplayDialog("Capture Finished", $"Saved at {absoluteCaptureDest}", "OK"); } GUILayout.EndHorizontal(); } var previewRect = EditorGUILayout.GetControlRect(false, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); previewRect.size = Utils.GetContentSize(previewRect.size, (float)texture.width / texture.height); var scale = previewRect.width / texture.width; EditorGUI.DrawTextureTransparent(previewRect, texture); if (useCaptureBox) { EditorUtils.DrawPreviewCaptureFrame(previewRect, captureBox.ToRect(), scale, false, Color.red); } }