public override void OnInspectorGUI() { base.OnInspectorGUI(); EditorUtility.SetDirty(target); animationComponent ac = (animationComponent)target; int numAnims = 0; if (ac.animations != null) { numAnims = ac.animations.Length; } numAnims = EditorGUILayout.IntField("Animation count", numAnims); if (numAnims < 0) { numAnims = 0; } if (ac.animations == null || (ac.animations != null && numAnims != ac.animations.Length)) { animation[] newA = new animation[numAnims]; for (int i = 0; i < newA.Length; i++) { if (i < ac.animations.Length) { newA[i] = ac.animations[i]; } else { newA[i] = new animation(ac.transform.parent.gameObject.GetComponent <charComponent>(), i); } } ac.animations = newA; } if (GUILayout.Button("Add a Animation")) { animation[] newA = new animation[ac.animations.Length + 1]; for (int i = 0; i < ac.animations.Length; i++) { newA[i] = ac.animations[i]; } newA[ac.animations.Length] = new animation(ac.transform.parent.gameObject.GetComponent <charComponent>(), ac.animations.Length); ac.animations = newA; } if (ac.animations != null) { foldAnimations = EditorGUILayout.Foldout(foldAnimations, "Show Animations"); EditorGUI.indentLevel++; for (int i = 0; i < ac.animations.Length; i++) { ac.animations[i].fold = EditorGUILayout.Foldout(ac.animations[i].fold, ac.animations[i].name); if (ac.animations[i].fold) { EditorGUI.indentLevel++; EditorGUILayout.LabelField("Index " + ac.animations[i].index); ac.animations[i].name = EditorGUILayout.TextField("Name", ac.animations[i].name); int numFrameLists = 0; if (ac.animations[i].frames != null) { numFrameLists = ac.animations[i].frames.Length; } EditorGUILayout.LabelField("Frame Count " + numFrameLists); if (GUILayout.Button("Add a Frame")) { frameList[] newf = new frameList[numFrameLists + 1]; int[] times = new int[numFrameLists + 1]; int[] nexts = new int[numFrameLists + 1]; bool[] xFlips = new bool[numFrameLists + 1]; bool[] yFlips = new bool[numFrameLists + 1]; bool[] foldFrames = new bool[numFrameLists + 1]; charComponentAction[] StartAction = new charComponentAction[numFrameLists + 1]; charComponentAction[] EndAction = new charComponentAction[numFrameLists + 1]; for (int j = 0; j < numFrameLists; j++) { newf[j] = ac.animations[i].frames[j]; times[j] = ac.animations[i].times[j]; nexts[j] = ac.animations[i].nexts[j]; xFlips[j] = ac.animations[i].xFlips[j]; yFlips[j] = ac.animations[i].yFlips[j]; foldFrames[j] = ac.animations[i].foldFrames[j]; StartAction[j] = ac.animations[i].StartAction[j]; EndAction[j] = ac.animations[i].EndAction[j]; } newf[numFrameLists] = new frameList(); times[numFrameLists] = 1; nexts[numFrameLists] = numFrameLists + 1; xFlips[numFrameLists] = false; yFlips[numFrameLists] = false; foldFrames[numFrameLists] = false; StartAction[numFrameLists] = default(charComponentAction); EndAction[numFrameLists] = default(charComponentAction); ac.animations[i].frames = newf; ac.animations[i].times = times; ac.animations[i].nexts = nexts; ac.animations[i].xFlips = xFlips; ac.animations[i].yFlips = yFlips; ac.animations[i].foldFrames = foldFrames; ac.animations[i].StartAction = StartAction; ac.animations[i].EndAction = EndAction; } if (ac.animations[i].frames != null) { selectedGC = (graphicComponent)EditorGUILayout.ObjectField(selectedGC, typeof(graphicComponent), true); if (selectedGC != null && selectedGC.allFrames != null && selectedGC.allFrames.Length > 0) { string[] names = new string[selectedGC.allFrames.Length]; for (int k = 0; k < selectedGC.allFrames.Length; k++) { names[k] = selectedGC.allFrames[k].name; } selectedFrame = EditorGUILayout.Popup("Frames", selectedFrame, names); EditorGUILayout.ObjectField(selectedGC.allFrames[selectedFrame].mainSprite, typeof(Sprite), true, GUILayout.Width(112), GUILayout.Height(64)); EditorGUILayout.LabelField("X: " + selectedGC.allFrames[selectedFrame].mainPosX + " Y: " + selectedGC.allFrames[selectedFrame].mainPosY); EditorGUILayout.LabelField("Flip X: " + selectedGC.allFrames[selectedFrame].GlobalFlipX + " Flip Y: " + selectedGC.allFrames[selectedFrame].GlobalFlipX); } for (int j = 0; j < ac.animations[i].frames.Length; j++) { ac.animations[i].foldFrames[j] = EditorGUILayout.Foldout(ac.animations[i].foldFrames[j], "Frame " + (j + 1)); if (ac.animations[i].foldFrames[j]) { EditorGUI.indentLevel++; if (GUILayout.Button("Add")) { ac.animations[i].frames[j].frames.Add(selectedGC.allFrames[selectedFrame]); } foreach (frame f in ac.animations[i].frames[j].frames) { f.fold = EditorGUILayout.Foldout(f.fold, f.name); if (f.fold) { EditorGUI.indentLevel++; EditorGUILayout.ObjectField(f.mainSprite, typeof(Sprite), true, GUILayout.Width(128), GUILayout.Height(64)); EditorGUILayout.LabelField("X: " + f.mainPosX + " Y: " + f.mainPosY); EditorGUILayout.LabelField("Flip X: " + f.GlobalFlipX + " Flip Y: " + f.GlobalFlipX); int ind = ac.animations[i].frames[j].frames.IndexOf(f); if (GUILayout.Button("Change")) { ac.animations[i].frames[j].frames[ind] = selectedGC.allFrames[selectedFrame]; } if (GUILayout.Button("Refresh")) { ac.animations[i].frames[j].frames[ind] = selectedGC.allFrames[ac.animations[i].frames[j].frames[ind].index]; } if (GUILayout.Button("Delete")) { ac.animations[i].frames[j].frames.RemoveAt(ind); break; } if (ind != 0 && GUILayout.Button("Up")) { frame faux = ac.animations[i].frames[j].frames[ind - 1]; ac.animations[i].frames[j].frames[ind - 1] = f; ac.animations[i].frames[j].frames[ind] = faux; } if (ind != ac.animations[i].frames[j].frames.Count - 1 && GUILayout.Button("Down")) { frame faux = ac.animations[i].frames[j].frames[ind + 1]; ac.animations[i].frames[j].frames[ind + 1] = f; ac.animations[i].frames[j].frames[ind] = faux; } if (GUILayout.Button("Use")) { f.Use(); } EditorGUI.indentLevel--; } } EditorGUI.indentLevel--; ac.animations[i].nexts[j] = EditorGUILayout.IntField("Next", ac.animations[i].nexts[j]); ac.animations[i].times[j] = EditorGUILayout.IntField("Time", ac.animations[i].times[j]); ac.animations[i].xFlips[j] = EditorGUILayout.Toggle("X Flip", ac.animations[i].xFlips[j]); ac.animations[i].yFlips[j] = EditorGUILayout.Toggle("Y Flip", ac.animations[i].yFlips[j]); } } } EditorGUI.indentLevel--; } } EditorGUI.indentLevel--; } EditorUtility.SetDirty(target); }
public override void OnInspectorGUI() { base.OnInspectorGUI(); graphicComponent gc = (graphicComponent)target; GUILayout.Label("Frames"); EditorGUI.indentLevel++; int numFrames = 0; if (gc.allFrames != null) { numFrames = gc.allFrames.Length; } numFrames = EditorGUILayout.IntField("Frame count", numFrames); if (numFrames < 0) { numFrames = 0; } if (gc.allFrames != null && numFrames != gc.allFrames.Length) { frame[] newf = new frame[numFrames]; for (int i = 0; i < newf.Length; i++) { if (i < gc.allFrames.Length) { newf[i] = gc.allFrames[i]; } else { newf[i] = new frame(gc, i); } } gc.allFrames = newf; } if (GUILayout.Button("Add a Frame")) { frame[] newf; if (gc.allFrames != null) { newf = new frame[gc.allFrames.Length + 1]; for (int i = 0; i < gc.allFrames.Length; i++) { newf[i] = gc.allFrames[i]; } } else { newf = new frame[1]; } newf[newf.Length - 1] = new frame(gc, newf.Length - 1); gc.allFrames = newf; } foldFrames = EditorGUILayout.Foldout(foldFrames, "Show Frames"); if (foldFrames) { EditorGUI.indentLevel++; for (int i = 0; i < gc.allFrames.Length; i++) { gc.allFrames[i].fold = EditorGUILayout.Foldout(gc.allFrames[i].fold, gc.allFrames[i].name); if (gc.allFrames[i].fold) { EditorGUILayout.LabelField("Index " + gc.allFrames[i].index); gc.allFrames[i].name = EditorGUILayout.TextField("Name", gc.allFrames[i].name); gc.allFrames[i].canChangeSprite = EditorGUILayout.Toggle("Change Sprite?", gc.allFrames[i].canChangeSprite); gc.allFrames[i].haveBlaxVersion = EditorGUILayout.Toggle("Blax Version?", gc.allFrames[i].haveBlaxVersion); if (gc.allFrames[i].canChangeSprite) { EditorGUI.indentLevel++; EditorGUILayout.LabelField("Main Sprite"); EditorGUI.indentLevel++; EditorGUILayout.LabelField("Not Flipped"); gc.allFrames[i].mainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].mainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64)); gc.allFrames[i].specialXFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].specialXFlipSprite, "X Flipped Sprite"); if (gc.allFrames[i].specialXFlipSprite) { gc.allFrames[i].xfMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].xfMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64)); } gc.allFrames[i].specialYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].specialYFlipSprite, "Y Flipped Sprite"); if (gc.allFrames[i].specialYFlipSprite) { gc.allFrames[i].yfMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].yfMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64)); } gc.allFrames[i].specialXYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].specialXYFlipSprite, "XY Flipped Sprite"); if (gc.allFrames[i].specialXYFlipSprite) { gc.allFrames[i].xyfMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].xyfMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64)); } EditorGUI.indentLevel--; if (gc.allFrames[i].haveBlaxVersion) { EditorGUILayout.LabelField("Blax Version Sprite"); gc.allFrames[i].blaxVersion = EditorGUILayout.Foldout(gc.allFrames[i].blaxVersion, "Blax Version"); if (gc.allFrames[i].blaxVersion) { EditorGUI.indentLevel++; EditorGUILayout.LabelField("Not Flipped"); gc.allFrames[i].blaxMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64)); gc.allFrames[i].blaxSpecialXFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].blaxSpecialXFlipSprite, "X Flipped Sprite"); if (gc.allFrames[i].blaxSpecialXFlipSprite) { gc.allFrames[i].blaxXFMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxXFMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64)); } gc.allFrames[i].blaxSpecialYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].blaxSpecialYFlipSprite, "Y Flipped Sprite"); if (gc.allFrames[i].blaxSpecialYFlipSprite) { gc.allFrames[i].blaxYFMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxYFMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64)); } gc.allFrames[i].blaxSpecialXYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].blaxSpecialXYFlipSprite, "XY Flipped Sprite"); if (gc.allFrames[i].blaxSpecialXYFlipSprite) { gc.allFrames[i].blaxXYFMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxXYFMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64)); } EditorGUI.indentLevel--; } } EditorGUI.indentLevel--; } gc.allFrames[i].GlobalFlipX = EditorGUILayout.Toggle("Flip X", gc.allFrames[i].GlobalFlipX); gc.allFrames[i].GlobalFlipY = EditorGUILayout.Toggle("Flip Y", gc.allFrames[i].GlobalFlipY); gc.allFrames[i].canChangeX = EditorGUILayout.Toggle("Change X?", gc.allFrames[i].canChangeX); if (gc.allFrames[i].canChangeX) { gc.allFrames[i].mainPosX = EditorGUILayout.FloatField("X", gc.allFrames[i].mainPosX); } gc.allFrames[i].canChangeY = EditorGUILayout.Toggle("Change Y?", gc.allFrames[i].canChangeY); if (gc.allFrames[i].canChangeY) { gc.allFrames[i].mainPosY = EditorGUILayout.FloatField("Y", gc.allFrames[i].mainPosY); } if (GUILayout.Button("Use")) { gc.allFrames[i].Use(); } } } } EditorGUI.indentLevel = 0; if (txt != null) { txt = (Texture2D)EditorGUILayout.ObjectField(txt, typeof(Texture2D), false, GUILayout.Width(304), GUILayout.Height((304f / txt.width) * txt.height)); } else { txt = (Texture2D)EditorGUILayout.ObjectField(txt, typeof(Texture2D), false, GUILayout.Width(288), GUILayout.Height(96)); } sprites = null; if (txt != null) { string path = AssetDatabase.GetAssetPath(txt); sprites = AssetDatabase.LoadAllAssetsAtPath(path).OfType <Sprite>().ToArray(); } gi = (GraphicImport)EditorGUILayout.EnumPopup("Graphic Import", gi); startNum = EditorGUILayout.IntField("Start Index", startNum); endNum = EditorGUILayout.IntField("End Index", endNum); startingIndex = EditorGUILayout.IntField("Starting Index", startingIndex); if (txt != null && GUILayout.Button("Get All Sprites")) { if (startNum < 0) { startNum = 0; } if (startNum >= sprites.Length) { startNum = sprites.Length - 1; } if (endNum < startNum) { endNum = startNum; } if (endNum >= sprites.Length) { endNum = sprites.Length - 1; } if (startingIndex < 0) { startingIndex = 0; } frame[] allf = new frame[Mathf.Max(startingIndex + endNum + 1 - startNum, gc.allFrames.Length)]; frame faux; for (int i = startNum, j = 0, k = 0; j < allf.Length; j++, k++) { if (j < startingIndex || j > startingIndex + endNum - startNum) { allf[j] = gc.allFrames[j]; k++; } else { faux = new frame(gc, j); faux.name = txt.name + j; faux.canChangeSprite = true; allf[j] = faux; switch (gi) { case GraphicImport.Main: allf[j].mainSprite = sprites[i]; break; case GraphicImport.XFlipped: allf[j].xfMainSprite = sprites[i]; break; case GraphicImport.YFlipped: allf[j].yfMainSprite = sprites[i]; break; case GraphicImport.XYFlipped: allf[j].xyfMainSprite = sprites[i]; break; case GraphicImport.BlaxMain: allf[j].blaxMainSprite = sprites[i]; break; case GraphicImport.BlaxXFlipped: allf[j].blaxXFMainSprite = sprites[i]; break; case GraphicImport.BlaxYFlipped: allf[j].blaxYFMainSprite = sprites[i]; break; case GraphicImport.BlaxXYFlipped: allf[j].blaxXYFMainSprite = sprites[i]; break; } i++; } } gc.allFrames = allf; } EditorUtility.SetDirty(target); }
public frame(graphicComponent MainObject, int Index) { index = Index; mainObject = MainObject; }