static void CreateRagePixelSprite() { GameObject newSpriteGO = new GameObject(); RagePixelSprite ragePixelSprite = (RagePixelSprite)newSpriteGO.AddComponent(typeof(RagePixelSprite)); newSpriteGO.name = "New Sprite"; if (SceneView.lastActiveSceneView != null) { if (SceneView.lastActiveSceneView.camera != null) { newSpriteGO.transform.position = SceneView.lastActiveSceneView.camera.transform.position; newSpriteGO.transform.position = new Vector3(newSpriteGO.transform.position.x, newSpriteGO.transform.position.y, 0f); } } bool found = false; foreach (Object obj in allAssets) { if (!found) { if (obj is RagePixelSpriteSheet && !obj.name.Equals("BasicFont")) { ragePixelSprite.spriteSheet = (RagePixelSpriteSheet)obj; ragePixelSprite.currentRowKey = ragePixelSprite.spriteSheet.rows[0].key; ragePixelSprite.currentCellKey = ragePixelSprite.GetCurrentRow().cells[0].key; found = true; } } } GameObject[] selection = new GameObject[1]; selection[0] = newSpriteGO; Selection.objects = selection; }
public override void OnInspectorGUI() { Transform t = (Transform)target; bool useStandardTransformInspector = false; // Replicate the standard transform inspector gui if (t.gameObject.GetComponent(typeof(RagePixelSprite))) { bool clicked = false; RagePixelSprite ragePixelSprite = t.gameObject.GetComponent(typeof(RagePixelSprite)) as RagePixelSprite; if (ragePixelSprite.spriteSheet != null && !Application.isPlaying) { EditorGUIUtility.LookLikeControls(); EditorGUI.indentLevel = 0; Vector3 position = EditorGUILayout.Vector2Field("Position", t.localPosition); //Vector3 eulerAngles = EditorGUILayout.Vector3Field("Rotation", t.localEulerAngles); Vector3 scale = new Vector3(); if (ragePixelSprite.GetCurrentRow().newPixelSizeX != ragePixelSprite.GetCurrentRow().pixelSizeX || ragePixelSprite.GetCurrentRow().newPixelSizeY != ragePixelSprite.GetCurrentRow().pixelSizeY) { GUI.color = Color.green; EditorGUILayout.Vector2Field("Size (bitmap)", new Vector2(ragePixelSprite.GetCurrentRow().newPixelSizeX, ragePixelSprite.GetCurrentRow().newPixelSizeY)); GUI.color = Color.white; scale = new Vector2(ragePixelSprite.pixelSizeX, ragePixelSprite.pixelSizeY); } else { scale = EditorGUILayout.Vector2Field("Size", new Vector2(ragePixelSprite.pixelSizeX, ragePixelSprite.pixelSizeY)); } GUILayout.Label("Rotation"); EditorGUILayout.BeginHorizontal(); EditorGUI.indentLevel = 1; t.localEulerAngles = new Vector3(0f, 0f, (int)EditorGUILayout.FloatField("Degrees", -t.localEulerAngles.z)) * -1f; EditorGUI.indentLevel = 0; EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); GUILayout.Label("Layer "); ragePixelSprite.ZLayer = EditorGUILayout.IntField(ragePixelSprite.ZLayer, GUILayout.Width(30)); if (GUILayout.Button("Forward")) { ragePixelSprite.ZLayer--; clicked = true; } if (GUILayout.Button("Backward")) { ragePixelSprite.ZLayer++; clicked = true; } GUILayout.EndHorizontal(); position.z = ragePixelSprite.ZLayer; GUILayout.Space(5f); EditorGUIUtility.LookLikeInspector(); if (GUI.changed || clicked) { Undo.RegisterUndo(t, "Transform Change"); t.localPosition = FixIfNaN(position); ragePixelSprite.pixelSizeX = Mathf.RoundToInt(FixIfNaN(scale).x); ragePixelSprite.pixelSizeY = Mathf.RoundToInt(FixIfNaN(scale).y); ragePixelSprite.meshIsDirty = true; ragePixelSprite.refreshMesh(); } } else { useStandardTransformInspector = true; } } else { useStandardTransformInspector = true; } if (useStandardTransformInspector) { EditorGUIUtility.LookLikeControls(); EditorGUI.indentLevel = 0; Vector3 position = EditorGUILayout.Vector3Field("Position", t.localPosition); Vector3 eulerAngles = EditorGUILayout.Vector3Field("Rotation", t.localEulerAngles); Vector3 scale = EditorGUILayout.Vector3Field("Scale", t.localScale); EditorGUIUtility.LookLikeInspector(); if (GUI.changed) { Undo.RegisterUndo(t, "Transform Change"); t.localPosition = FixIfNaN(position); t.localEulerAngles = FixIfNaN(eulerAngles); t.localScale = FixIfNaN(scale); } } }
public void OnGUI() { int y = 2; int x = 5; spriteSheet = (RagePixelSpriteSheet)EditorGUI.ObjectField( new Rect(x, y, Screen.width - x * 2, 16), "Sprite sheet", spriteSheet, typeof(RagePixelSpriteSheet), false ); y += 20; if (spriteSheet != null) { if (spriteSheet != spriteSheetGUI.spriteSheet) { spriteSheetGUI.spriteSheet = spriteSheet; spriteSheetGUI.currentRowKey = spriteSheet.rows[0].key; copySpriteSheetGUI.spriteSheet = spriteSheet; copySpriteSheetGUI.currentRowKey = spriteSheet.rows[0].key; animStripGUI.currentCellKey = spriteSheet.rows[0].cells[0].key; } spriteSheetGUI.positionX = x; spriteSheetGUI.positionY = y; animStripGUI.positionX = x; animStripGUI.positionY = spriteSheetGUI.positionY + spriteSheetGUI.pixelHeight + 5; GUI.color = RagePixelGUIIcons.greenButtonColor; if (GUI.Button(new Rect(Screen.width - 38f * 2 - 5, spriteSheetGUI.positionY + spriteSheetGUI.pixelHeight - 32f, 38f, 32f), "NEW")) { int index = spriteSheet.GetIndex(spriteSheetGUI.currentRowKey); RagePixelRow row = spriteSheet.AddRow( RagePixelUtil.RandomKey(), index + 1, spriteSheet.GetRow(spriteSheetGUI.currentRowKey).pixelSizeX, spriteSheet.GetRow(spriteSheetGUI.currentRowKey).pixelSizeY ); RagePixelCell cell = row.InsertCell(0, RagePixelUtil.RandomKey()); spriteSheetGUI.currentRowKey = row.key; animStripGUI.currentCellKey = cell.key; RagePixelUtil.RebuildAtlas(spriteSheet, true, "AddRow"); } GUI.color = RagePixelGUIIcons.redButtonColor; if (GUI.Button(new Rect(Screen.width - 38f - 5, spriteSheetGUI.positionY + spriteSheetGUI.pixelHeight - 32f, 38f, 32f), "DEL")) { if (spriteSheet.rows.Length > 1) { if (EditorUtility.DisplayDialog("Delete selected sprite?", "Are you sure?", "Delete", "Cancel")) { int index = spriteSheet.GetIndex(spriteSheetGUI.currentRowKey); spriteSheet.RemoveRowByKey(spriteSheetGUI.currentRowKey); int newKey = spriteSheet.rows[Mathf.Clamp(index, 0, spriteSheet.rows.Length - 1)].key; if (selectedSprite != null) { if (selectedSprite.currentRowKey == spriteSheetGUI.currentRowKey) { selectedSprite.meshIsDirty = true; selectedSprite.currentRowKey = newKey; selectedSprite.pixelSizeX = selectedSprite.GetCurrentRow().pixelSizeX; selectedSprite.pixelSizeY = selectedSprite.GetCurrentRow().pixelSizeY; } } spriteSheetGUI.currentRowKey = newKey; animStripGUI.currentCellKey = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells[0].key; RagePixelUtil.RebuildAtlas(spriteSheet, false, "DeleteRow"); if (inspector != null) { inspector.spriteSheetGUI.isDirty = true; inspector.animStripGUI.isDirty = true; } } } else { EditorUtility.DisplayDialog("Cannot delete", "Cannot delete the last sprite.", "OK"); } } y += spriteSheetGUI.pixelHeight + animStripGUI.pixelHeight + 10; GUI.color = RagePixelGUIIcons.greenButtonColor; if (GUI.Button(new Rect(Screen.width - 38f * 2 - 5, animStripGUI.positionY + animStripGUI.pixelHeight - 32f, 38f, 32f), "NEW")) { int index = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetIndex(animStripGUI.currentCellKey) + 1; RagePixelCell cell = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).InsertCell(index, RagePixelUtil.RandomKey()); animStripGUI.currentCellKey = cell.key; RagePixelUtil.RebuildAtlas(spriteSheet, true, "AddCell"); } GUI.color = RagePixelGUIIcons.redButtonColor; if (GUI.Button(new Rect(Screen.width - 38f - 5, animStripGUI.positionY + animStripGUI.pixelHeight - 32f, 38f, 32f), "DEL")) { if (spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells.Length > 1) { if (EditorUtility.DisplayDialog("Delete selected animation frame?", "Are you sure?", "Delete", "Cancel")) { int index = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetIndex(animStripGUI.currentCellKey); spriteSheet.GetRow(spriteSheetGUI.currentRowKey).RemoveCellByKey(animStripGUI.currentCellKey); int newKey = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells[Mathf.Clamp(index, 0, spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells.Length - 1)].key; if (selectedSprite != null) { if (selectedSprite.currentCellKey == animStripGUI.currentCellKey) { selectedSprite.meshIsDirty = true; selectedSprite.currentCellKey = newKey; selectedSprite.pixelSizeX = selectedSprite.GetCurrentRow().pixelSizeX; selectedSprite.pixelSizeY = selectedSprite.GetCurrentRow().pixelSizeY; } } animStripGUI.currentCellKey = newKey; RagePixelUtil.RebuildAtlas(spriteSheet, true, "DeleteCell"); if (inspector != null) { inspector.spriteSheetGUI.isDirty = true; inspector.animStripGUI.isDirty = true; } } } else { EditorUtility.DisplayDialog("Cannot delete", "Cannot delete the last animation frame.", "OK"); } } GUI.color = Color.white; if (spriteSheet.GetRow(spriteSheetGUI.currentRowKey).name == null) { spriteSheet.GetRow(spriteSheetGUI.currentRowKey).name = ""; } spriteSheet.GetRow(spriteSheetGUI.currentRowKey).name = EditorGUI.TextField( new Rect(x, y, Mathf.Min(350, Screen.width - x * 2), 16), "Sprite Name", spriteSheet.GetRow(spriteSheetGUI.currentRowKey).name); y += 20; RagePixelCell selectedCell = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetCell(animStripGUI.currentCellKey); EditorGUI.LabelField( new Rect(x, y, Screen.width - x * 2, 16), "Frame Index", spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetIndex(animStripGUI.currentCellKey).ToString() + " (" + (spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells.Length - 1).ToString() + ")" + (selectedCell.importAssetPath == "" ? "" : (" - " + selectedCell.importAssetPath))); y += 20; spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetCell(animStripGUI.currentCellKey).delay = EditorGUI.IntField( new Rect(x, y, Mathf.Min(200, Screen.width - x * 2), 16), "Frame Time", (int)spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetCell(animStripGUI.currentCellKey).delay); y += 20; GUILayout.Space(y + 20); int rangeAnimationsFoldoutHeight = 0; showRangeAnimationsFoldout = EditorGUI.Foldout(new Rect(x, y, Screen.width - x * 2, 20), showRangeAnimationsFoldout, "Range animations"); y += 20; if (showRangeAnimationsFoldout) { GUI.color = Color.gray; x = 5; GUI.Label(new Rect(x, y, 170, 16), "Name"); x += 175; GUI.Label(new Rect(x, y, 40, 16), "Start"); x += 45; GUI.Label(new Rect(x, y, 40, 16), "End"); x += 45; GUI.Label(new Rect(x, y, 130, 16), "Type"); GUI.color = Color.white; y += 20; RagePixelAnimation[] animations = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).animations; for (int animIndex = 0; animIndex < animations.Length; animIndex++) { if (animations[animIndex].frameMode != RagePixelSprite.FrameMode.Range) { continue; } x = 5; animations[animIndex].name = EditorGUI.TextField(new Rect(x, y, 170, 16), animations[animIndex].name); x += 175; animations[animIndex].startIndex = EditorGUI.IntField(new Rect(x, y, 40, 16), animations[animIndex].startIndex); x += 45; animations[animIndex].endIndex = EditorGUI.IntField(new Rect(x, y, 40, 16), animations[animIndex].endIndex); x += 45; animations[animIndex].mode = (RagePixelSprite.AnimationMode)EditorGUI.EnumPopup(new Rect(x, y, 130, 16), animations[animIndex].mode); x += 135; if (GUI.Button(new Rect(x, y, 60, 16), "Delete")) { spriteSheet.GetRow(spriteSheetGUI.currentRowKey).RemoveAnimation(animIndex); } y += 20; rangeAnimationsFoldoutHeight += 20; } x = 5; if (GUI.Button(new Rect(x, y, 50, 16), "Add")) { RagePixelAnimation anim = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).AddAnimation(); anim.frameMode = RagePixelSprite.FrameMode.Range; } y += 20; rangeAnimationsFoldoutHeight += 20; GUILayout.Space(rangeAnimationsFoldoutHeight + 26); y += 6; } int sequenceAnimationsFoldoutHeight = 0; showSequenceAnimationsFoldout = EditorGUI.Foldout(new Rect(x, y, Screen.width - x * 2, 20), showSequenceAnimationsFoldout, "Sequence animations"); y += 20; if (showSequenceAnimationsFoldout) { GUI.color = Color.gray; x = 5; GUI.Label(new Rect(x, y, 170, 16), "Name"); x += 175; GUI.Label(new Rect(x, y, 40, 16), "Type"); x += 135; GUI.Label(new Rect(x, y, 60, 16), "Frames"); GUI.color = Color.white; y += 20; RagePixelAnimation[] animations = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).animations; for (int animIndex = 0; animIndex < animations.Length; animIndex++) { if (animations[animIndex].frameMode != RagePixelSprite.FrameMode.Sequence) { continue; } x = 5; animations[animIndex].name = EditorGUI.TextField(new Rect(x, y, 170, 16), animations[animIndex].name); x += 175; animations[animIndex].mode = (RagePixelSprite.AnimationMode)EditorGUI.EnumPopup(new Rect(x, y, 130, 16), animations[animIndex].mode); x += 135; //frames if (animations[animIndex].frames == null || animations[animIndex].frames.Length == 0) { animations[animIndex].frames = new int[] { 0 }; } for (int i = 0; i < animations[animIndex].frames.Length; i++) { animations[animIndex].frames[i] = EditorGUI.IntField(new Rect(x, y, 24, 16), animations[animIndex].frames[i]); x += 28; } if (GUI.Button(new Rect(x, y, 20, 16), "-")) { //reduce length by 1 Array.Resize(ref animations[animIndex].frames, animations[animIndex].frames.Length - 1); } x += 22; if (GUI.Button(new Rect(x, y, 20, 16), "+")) { //increase length by 1 Array.Resize(ref animations[animIndex].frames, animations[animIndex].frames.Length + 1); } x += 28; if (GUI.Button(new Rect(x, y, 60, 16), "Delete")) { spriteSheet.GetRow(spriteSheetGUI.currentRowKey).RemoveAnimation(animIndex); } y += 20; sequenceAnimationsFoldoutHeight += 20; } x = 5; if (GUI.Button(new Rect(x, y, 50, 16), "Add")) { RagePixelAnimation anim = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).AddAnimation(); anim.frameMode = RagePixelSprite.FrameMode.Sequence; } y += 20; sequenceAnimationsFoldoutHeight += 20; GUILayout.Space(sequenceAnimationsFoldoutHeight + 26); y += 6; } x = 5; showCopyAnimationsFoldout = EditorGUI.Foldout(new Rect(x, y, Screen.width - x * 2, 16), showCopyAnimationsFoldout, "Copy Animations"); if (showCopyAnimationsFoldout) { y += 20; GUI.Label(new Rect(x, y, Screen.width - x * 2, 16), "Other Sprite"); y += 20; copySpriteSheetGUI.positionX = x; copySpriteSheetGUI.positionY = y; y += copySpriteSheetGUI.pixelHeight + 10; GUI.enabled = spriteSheetGUI.currentRowKey != copySpriteSheetGUI.currentRowKey; if (GUI.Button(new Rect(x, y, 180f, 19f), "Copy From Other")) { RagePixelRow thisRow = spriteSheet.GetRow(spriteSheetGUI.currentRowKey); RagePixelRow otherRow = spriteSheet.GetRow(copySpriteSheetGUI.currentRowKey); thisRow.CopyAnimationsFrom(otherRow); } if (GUI.Button(new Rect(x + 190, y, 180f, 19f), "Copy To Other")) { RagePixelRow thisRow = spriteSheet.GetRow(spriteSheetGUI.currentRowKey); RagePixelRow otherRow = spriteSheet.GetRow(copySpriteSheetGUI.currentRowKey); otherRow.CopyAnimationsFrom(thisRow); } GUI.enabled = true; y += 21; } y += 20; showImportFoldout = EditorGUI.Foldout(new Rect(x, y, Screen.width - x * 2, 16), showImportFoldout, "Import"); if (showImportFoldout) { GUILayout.Space(24); GUILayout.BeginHorizontal(); newTexture = (Texture2D)EditorGUILayout.ObjectField(" ", newTexture, typeof(Texture2D), false); GUILayout.BeginVertical(); y += 10; if (GUI.Button(new Rect(x + 240f, y, 180f, 19f), "Import to selected frame")) { if (newTexture != null) { ImportSprite(SpriteSheetImportTarget.Selected); } } y += 21; if (GUI.Button(new Rect(x + 240f, y, 180f, 19f), "Import as new frame")) { if (newTexture != null) { ImportSprite(SpriteSheetImportTarget.NewFrame); } } y += 21; if (GUI.Button(new Rect(x + 240f, y, 180f, 19f), "Import as new sprite")) { if (newTexture != null) { ImportSprite(SpriteSheetImportTarget.NewSprite); } } y += 21; if (GUI.Button(new Rect(x + 240f, y, 180f, 19f), "Import spritesheet")) { if (newTexture != null) { ImportSprite(SpriteSheetImportTarget.SpriteSheet); } } //sprite width, sprite height y += 21; importSpriteWidth = EditorGUI.IntField(new Rect(x + 240f, y, 180f, 19f), "Frame Width", importSpriteWidth); y += 21; importSpriteHeight = EditorGUI.IntField(new Rect(x + 240f, y, 180f, 19f), "Frame Height", importSpriteHeight); y += 21; importSpriteTopLeft = EditorGUI.Toggle(new Rect(x + 240f, y, 180f, 19f), "First Frame at Top Left", importSpriteTopLeft); GUILayout.EndVertical(); GUILayout.EndHorizontal(); } // Update references to sprites y += 20; showUpdateFoldout = EditorGUI.Foldout(new Rect(x, y, Screen.width - x * 2, 16), showUpdateFoldout, "Update"); if (showUpdateFoldout) { y += 20; GUILayout.BeginVertical(); if (GUI.Button(new Rect(5, y, 180f, 19f), "Update Selected Frame")) { UpdateSprite(SpriteSheetUpdateTarget.SelectedFrame); } /* * if(GUI.Button(new Rect(190, y, 180f, 19f), "Save Frame to Source")) * { * if(newTexture != null) * { * * } * } */ y += 21; if (GUI.Button(new Rect(5, y, 180f, 19f), "Update Selected Sprite")) { UpdateSprite(SpriteSheetUpdateTarget.SelectedSprite); } y += 21; if (GUI.Button(new Rect(5, y, 180f, 19f), "Update All Sprites")) { UpdateSprite(SpriteSheetUpdateTarget.AllSprites); } GUILayout.EndVertical(); } int oldRowKey = spriteSheetGUI.currentRowKey; animStripGUI.HandleGUIEvent(Event.current); spriteSheetGUI.HandleGUIEvent(Event.current); if (oldRowKey != spriteSheetGUI.currentRowKey) { animStripGUI.currentCellKey = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells[0].key; } if (animStripGUI.isDirty || spriteSheetGUI.isDirty) { Repaint(); if (inspector != null) { inspector.spriteSheetGUI.isDirty = true; inspector.animStripGUI.isDirty = true; inspector.Repaint(); } if (selectedSprite != null) { selectedSprite.meshIsDirty = true; selectedSprite.refreshMesh(); } } spriteSheetGUI.maxWidth = scenePixelWidth - 38 * 2 - 10 - spriteSheetGUI.positionX; animStripGUI.maxWidth = scenePixelWidth - 38 * 2 - 10 - animStripGUI.positionX; EditorGUI.DrawPreviewTexture(spriteSheetGUI.bounds, spriteSheetGUI.spriteSheetTexture); EditorGUI.DrawPreviewTexture(animStripGUI.bounds, animStripGUI.animStripTexture); if (showCopyAnimationsFoldout) { copySpriteSheetGUI.HandleGUIEvent(Event.current); copySpriteSheetGUI.maxWidth = scenePixelWidth - 38 * 2 - 10 - copySpriteSheetGUI.positionX; EditorGUI.DrawPreviewTexture(copySpriteSheetGUI.bounds, copySpriteSheetGUI.spriteSheetTexture); } } if (GUI.changed) { EditorUtility.SetDirty(spriteSheet); } }
public void OnGUI() { int y = 2; int x = 5; spriteSheet = (RagePixelSpriteSheet)EditorGUI.ObjectField( new Rect(x, y, Screen.width - x * 2, 16), "Sprite sheet", spriteSheet, typeof(RagePixelSpriteSheet), false ); y += 20; if (spriteSheet != null) { if (spriteSheet != spriteSheetGUI.spriteSheet) { spriteSheetGUI.spriteSheet = spriteSheet; spriteSheetGUI.currentRowKey = spriteSheet.rows[0].key; animStripGUI.currentCellKey = spriteSheet.rows[0].cells[0].key; } spriteSheetGUI.positionX = x; spriteSheetGUI.positionY = y; animStripGUI.positionX = x; animStripGUI.positionY = spriteSheetGUI.positionY + spriteSheetGUI.pixelHeight + 5; GUI.color = RagePixelGUIIcons.greenButtonColor; if (GUI.Button(new Rect(Screen.width - 38f * 2 - 5, spriteSheetGUI.positionY + spriteSheetGUI.pixelHeight - 32f, 38f, 32f), "NEW")) { int index = spriteSheet.GetIndex(spriteSheetGUI.currentRowKey); RagePixelRow row = spriteSheet.AddRow( RagePixelUtil.RandomKey(), index + 1, spriteSheet.GetRow(spriteSheetGUI.currentRowKey).pixelSizeX, spriteSheet.GetRow(spriteSheetGUI.currentRowKey).pixelSizeY ); RagePixelCell cell = row.InsertCell(0, RagePixelUtil.RandomKey()); spriteSheetGUI.currentRowKey = row.key; animStripGUI.currentCellKey = cell.key; RagePixelUtil.RebuildAtlas(spriteSheet, true, "AddRow"); } GUI.color = RagePixelGUIIcons.redButtonColor; if (GUI.Button(new Rect(Screen.width - 38f - 5, spriteSheetGUI.positionY + spriteSheetGUI.pixelHeight - 32f, 38f, 32f), "DEL")) { if (spriteSheet.rows.Length > 1) { if (EditorUtility.DisplayDialog("Delete selected sprite?", "Are you sure?", "Delete", "Cancel")) { int index = spriteSheet.GetIndex(spriteSheetGUI.currentRowKey); spriteSheet.RemoveRowByKey(spriteSheetGUI.currentRowKey); int newKey = spriteSheet.rows[Mathf.Clamp(index, 0, spriteSheet.rows.Length - 1)].key; if (selectedSprite != null) { if (selectedSprite.currentRowKey == spriteSheetGUI.currentRowKey) { selectedSprite.meshIsDirty = true; selectedSprite.currentRowKey = newKey; selectedSprite.pixelSizeX = selectedSprite.GetCurrentRow().pixelSizeX; selectedSprite.pixelSizeY = selectedSprite.GetCurrentRow().pixelSizeY; } } spriteSheetGUI.currentRowKey = newKey; animStripGUI.currentCellKey = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells[0].key; RagePixelUtil.RebuildAtlas(spriteSheet, false, "DeleteRow"); if (inspector != null) { inspector.spriteSheetGUI.isDirty = true; inspector.animStripGUI.isDirty = true; } } } else { EditorUtility.DisplayDialog("Cannot delete", "Cannot delete the last sprite.", "OK"); } } y += spriteSheetGUI.pixelHeight + animStripGUI.pixelHeight + 10; GUI.color = RagePixelGUIIcons.greenButtonColor; if (GUI.Button(new Rect(Screen.width - 38f * 2 - 5, animStripGUI.positionY + animStripGUI.pixelHeight - 32f, 38f, 32f), "NEW")) { int index = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetIndex(animStripGUI.currentCellKey) + 1; RagePixelCell cell = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).InsertCell(index, RagePixelUtil.RandomKey()); animStripGUI.currentCellKey = cell.key; RagePixelUtil.RebuildAtlas(spriteSheet, true, "AddCell"); } GUI.color = RagePixelGUIIcons.redButtonColor; if (GUI.Button(new Rect(Screen.width - 38f - 5, animStripGUI.positionY + animStripGUI.pixelHeight - 32f, 38f, 32f), "DEL")) { if (spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells.Length > 1) { if (EditorUtility.DisplayDialog("Delete selected animation frame?", "Are you sure?", "Delete", "Cancel")) { int index = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetIndex(animStripGUI.currentCellKey); spriteSheet.GetRow(spriteSheetGUI.currentRowKey).RemoveCellByKey(animStripGUI.currentCellKey); int newKey = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells[Mathf.Clamp(index, 0, spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells.Length - 1)].key; if (selectedSprite != null) { if (selectedSprite.currentCellKey == animStripGUI.currentCellKey) { selectedSprite.meshIsDirty = true; selectedSprite.currentCellKey = newKey; selectedSprite.pixelSizeX = selectedSprite.GetCurrentRow().pixelSizeX; selectedSprite.pixelSizeY = selectedSprite.GetCurrentRow().pixelSizeY; } } animStripGUI.currentCellKey = newKey; RagePixelUtil.RebuildAtlas(spriteSheet, true, "DeleteCell"); if (inspector != null) { inspector.spriteSheetGUI.isDirty = true; inspector.animStripGUI.isDirty = true; } } } else { EditorUtility.DisplayDialog("Cannot delete", "Cannot delete the last animation frame.", "OK"); } } GUI.color = Color.white; spriteSheet.GetRow(spriteSheetGUI.currentRowKey).name = EditorGUI.TextField( new Rect(x, y, Mathf.Min(350, Screen.width - x * 2), 16), "Sprite Name", spriteSheet.GetRow(spriteSheetGUI.currentRowKey).name); y += 20; EditorGUI.LabelField( new Rect(x, y, Screen.width - x * 2, 16), "Frame Index", spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetIndex(animStripGUI.currentCellKey).ToString() + " (" + (spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells.Length - 1).ToString() + ")"); y += 20; spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetCell(animStripGUI.currentCellKey).delay = EditorGUI.IntField( new Rect(x, y, Mathf.Min(200, Screen.width - x * 2), 16), "Frame Time", (int)spriteSheet.GetRow(spriteSheetGUI.currentRowKey).GetCell(animStripGUI.currentCellKey).delay); y += 20; GUILayout.Space(y + 20); int namedAnimationsFoldoutHeight = 0; showNamedAnimationsFoldout = EditorGUI.Foldout(new Rect(x, y, Screen.width - x * 2, 20), showNamedAnimationsFoldout, "Named animations"); y += 20; if (showNamedAnimationsFoldout) { GUI.color = Color.gray; x = 5; GUI.Label(new Rect(x, y, 170, 16), "Name"); x += 175; GUI.Label(new Rect(x, y, 40, 16), "Start"); x += 45; GUI.Label(new Rect(x, y, 40, 16), "End"); x += 45; GUI.Label(new Rect(x, y, 130, 16), "Type"); GUI.color = Color.white; y += 20; RagePixelAnimation[] animations = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).animations; for (int animIndex = 0; animIndex < animations.Length; animIndex++) { x = 5; animations[animIndex].name = EditorGUI.TextField(new Rect(x, y, 170, 16), animations[animIndex].name); x += 175; animations[animIndex].startIndex = EditorGUI.IntField(new Rect(x, y, 40, 16), animations[animIndex].startIndex); x += 45; animations[animIndex].endIndex = EditorGUI.IntField(new Rect(x, y, 40, 16), animations[animIndex].endIndex); x += 45; animations[animIndex].mode = (RagePixelSprite.AnimationMode)EditorGUI.EnumPopup(new Rect(x, y, 130, 16), animations[animIndex].mode); x += 135; if (GUI.Button(new Rect(x, y, 60, 16), "Delete")) { spriteSheet.GetRow(spriteSheetGUI.currentRowKey).RemoveAnimation(animIndex); } y += 20; namedAnimationsFoldoutHeight += 20; } x = 5; if (GUI.Button(new Rect(x, y, 50, 16), "Add")) { spriteSheet.GetRow(spriteSheetGUI.currentRowKey).AddAnimation(); } y += 20; namedAnimationsFoldoutHeight += 20; GUILayout.Space(namedAnimationsFoldoutHeight + 26); y += 6; } x = 5; showImportFoldout = EditorGUI.Foldout(new Rect(x, y, Screen.width - x * 2, 16), showImportFoldout, "Import"); if (showImportFoldout) { GUILayout.BeginHorizontal(); newTexture = (Texture2D)EditorGUILayout.ObjectField(" ", newTexture, typeof(Texture2D), false); GUILayout.BeginVertical(); if (GUI.Button(new Rect(x + 240f, y, 180f, 19f), "Import to selected frame")) { if (newTexture != null) { ImportSprite(SpriteSheetImportTarget.Selected); } } y += 21; if (GUI.Button(new Rect(x + 240f, y, 180f, 19f), "Import as new frame")) { if (newTexture != null) { ImportSprite(SpriteSheetImportTarget.NewFrame); } } y += 21; if (GUI.Button(new Rect(x + 240f, y, 180f, 19f), "Import as new sprite")) { if (newTexture != null) { ImportSprite(SpriteSheetImportTarget.NewSprite); } } GUILayout.EndVertical(); GUILayout.EndHorizontal(); } int oldRowKey = spriteSheetGUI.currentRowKey; animStripGUI.HandleGUIEvent(Event.current); spriteSheetGUI.HandleGUIEvent(Event.current); if (oldRowKey != spriteSheetGUI.currentRowKey) { animStripGUI.currentCellKey = spriteSheet.GetRow(spriteSheetGUI.currentRowKey).cells[0].key; } if (animStripGUI.isDirty || spriteSheetGUI.isDirty) { Repaint(); if (inspector != null) { inspector.spriteSheetGUI.isDirty = true; inspector.animStripGUI.isDirty = true; inspector.Repaint(); } if (selectedSprite != null) { selectedSprite.meshIsDirty = true; selectedSprite.refreshMesh(); } } spriteSheetGUI.maxWidth = scenePixelWidth - 38 * 2 - 10 - spriteSheetGUI.positionX; animStripGUI.maxWidth = scenePixelWidth - 38 * 2 - 10 - animStripGUI.positionX; EditorGUI.DrawPreviewTexture(spriteSheetGUI.bounds, spriteSheetGUI.spriteSheetTexture); EditorGUI.DrawPreviewTexture(animStripGUI.bounds, animStripGUI.animStripTexture); } if (GUI.changed) { EditorUtility.SetDirty(spriteSheet); } }