// Use this for initialization void Start() { loaded = false; currentLoading = null; loadables = new Queue <Loadable>(); tileDataGenerator = gameObject.GetComponent <Component_TileDataGenerator>(); loadables.Enqueue(tileDataGenerator); world = gameObject.GetComponent <World>(); loadables.Enqueue(world); level = gameObject.GetComponent <Level>(); loadables.Enqueue(level); }
public override void OnInspectorGUI() { editor = this; gen = (Component_TileDataGenerator)target; //Init stateInit(); if (runOnce) { //Dont know why this needs to be ran once, but it does! Don't question the clusterfuck that is unity increaseMemory(gen.tileset.Length); runOnce = false; } //Textures Texture texHorSep = Resources.Load <Texture>("layout_horizontalseperator"); Texture texVerSep = Resources.Load <Texture>("layout_verticalseperator"); Texture texPlus = Resources.Load <Texture>("inspectorbutton_plus"); Texture texMinus = Resources.Load <Texture>("inspectorbutton_minus"); Texture texReverse = Resources.Load <Texture>("inspectorbutton_reverse"); Texture texCopy = Resources.Load <Texture>("inspectorbutton_copy"); Texture texMagnify = Resources.Load <Texture>("inspectorbutton_magnify"); Texture texReduce = Resources.Load <Texture>("inspectorbutton_reduce"); Texture texUpArrow = Resources.Load <Texture>("inspectorbutton_uparrow"); Texture texDownArrow = Resources.Load <Texture>("inspectorbutton_downarrow"); /* Styles */ //Full Image Button GUIStyle styleFullImageBtn = new GUIStyle(GUI.skin.button); styleFullImageBtn.fixedWidth = 0; styleFullImageBtn.fixedHeight = 0; styleFullImageBtn.stretchWidth = true; styleFullImageBtn.stretchHeight = true; styleFullImageBtn.clipping = TextClipping.Overflow; styleFullImageBtn.padding = new RectOffset(0, 0, 0, 0); //Begin Inspector GUILayout.BeginVertical(); GUILayout.Space(8); drawHorizontalSeperator(texHorSep, 4f); GUILayout.BeginHorizontal(); //Create Add Element Button / Zoom All / Reduce All if (GUILayout.Button(texPlus, styleFullImageBtn, GUILayout.Width(32), GUILayout.Height(32))) { int oldLength = gen.tileset.Length; gen.addData(new Component_TileDataGenerator.Data()); increaseMemory(oldLength); } GUILayout.FlexibleSpace(); if (GUILayout.Button(texMagnify, styleFullImageBtn, GUILayout.Width(32), GUILayout.Height(32))) { for (int i = 0; i < gen.tileset.Length; i++) { zoomButton[i] = true; } } if (GUILayout.Button(texReduce, styleFullImageBtn, GUILayout.Width(32), GUILayout.Height(32))) { for (int i = 0; i < gen.tileset.Length; i++) { zoomButton[i] = false; } } GUILayout.EndHorizontal(); drawHorizontalSeperator(texHorSep, 4f); GUILayout.Space(8); //Display Tilesets foldTilesets = EditorGUI.Foldout(EditorGUILayout.GetControlRect(), foldTilesets, "Tilesets (Count: " + gen.tileset.Length + ")", true); if (foldTilesets) { GUILayout.BeginVertical(); drawHorizontalSeperator(texHorSep, 3f); //Expand/Collapse buttons GUILayout.BeginHorizontal(); if (GUILayout.Button("Expand All")) { for (int i = 0; i < foldTile.Length; i++) { foldTile[i] = true; } } if (GUILayout.Button("Collapse All")) { for (int i = 0; i < foldTile.Length; i++) { foldTile[i] = false; } } GUILayout.EndHorizontal(); drawHorizontalSeperator(texHorSep, 3f); //List Tilesets for (int i = 0; i < gen.tileset.Length; i++) { Component_TileDataGenerator.Data data = gen.tileset[i]; GUILayout.BeginHorizontal(); GUILayout.Space(8); GUILayout.BeginVertical(); foldTile[i] = EditorGUI.Foldout(EditorGUILayout.GetControlRect(), foldTile[i], data.name, true); if (foldTile[i]) { GUILayout.BeginVertical(); //Name / TextField / Tileable Toggle / Copy Button / Reset to Default Button / Delete Button GUILayout.BeginHorizontal(); GUILayout.Space(8); GUILayout.Label("Name", GUILayout.ExpandWidth(false)); data.name = EditorGUILayout.DelayedTextField(data.name, GUILayout.Width(160)); //Display mutate buttons when none have been clicked if (!mutateEnabled(i)) { data.isTileable = GUILayout.Toggle(data.isTileable, "Tileable", GUILayout.ExpandWidth(false)); GUILayout.FlexibleSpace(); if (i > 0) { if (GUILayout.Button(texUpArrow, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22))) { gen.swapData(data, gen.tileset[i - 1]); } } if (i < gen.tileset.Length - 1) { if (GUILayout.Button(texDownArrow, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22))) { gen.swapData(data, gen.tileset[i + 1]); } } else { GUILayout.Space(22); } if (zoomButton[i]) { if (GUILayout.Button(texReduce, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22))) { zoomButton[i] = false; } } else { if (GUILayout.Button(texMagnify, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22))) { zoomButton[i] = true; } } if (GUILayout.Button(texCopy, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22))) { int oldLength = gen.tileset.Length; gen.copyDataExceptName(data); increaseMemory(oldLength); } if (GUILayout.Button(texReverse, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22))) { clearMutates(); mutateButton[MUTATE_DEFAULT, i] = true; } if (GUILayout.Button(texMinus, styleFullImageBtn, GUILayout.Width(22), GUILayout.Height(22))) { clearMutates(); mutateButton[MUTATE_DELETE, i] = true; } } //Display mutate buttons when one has been clicked if (mutateButton[MUTATE_DEFAULT, i]) { GUILayout.FlexibleSpace(); GUILayout.Label("Reset to Default?", GUILayout.ExpandWidth(false)); if (GUILayout.Button("Yes", GUILayout.Width(44), GUILayout.Height(22))) { gen.tileset[i] = new Component_TileDataGenerator.Data(); mutateButton[MUTATE_DEFAULT, i] = false; } if (GUILayout.Button("No", GUILayout.Width(44), GUILayout.Height(22))) { mutateButton[MUTATE_DEFAULT, i] = false; } } if (mutateButton[MUTATE_DELETE, i]) { GUILayout.FlexibleSpace(); GUILayout.Label("Delete?", GUILayout.ExpandWidth(false)); if (GUILayout.Button("Yes", GUILayout.Width(44), GUILayout.Height(22))) { gen.deleteData(i); mutateButton[MUTATE_DELETE, i] = false; } if (GUILayout.Button("No", GUILayout.Width(44), GUILayout.Height(22))) { mutateButton[MUTATE_DELETE, i] = false; } } GUILayout.EndHorizontal(); //------------------------------------------- drawHorizontalSeperator(texHorSep, 1f); //Sprite / Normal Map GUILayout.BeginHorizontal(); int zoomwidth = (zoomButton[i]) ? (128) : (40); int zoomheight = (zoomButton[i]) ? (128) : (40); GUILayout.BeginVertical(); GUILayout.Label("Sprite"); if (data.isTileable) { data.sprites = (Texture2D)EditorGUILayout.ObjectField(data.sprites, typeof(Texture2D), false, GUILayout.Width(zoomwidth), GUILayout.Height(zoomheight)); } else { data.sprite = (Sprite)EditorGUILayout.ObjectField(data.sprite, typeof(Sprite), false, GUILayout.Width(zoomwidth), GUILayout.Height(zoomheight)); } GUILayout.EndVertical(); drawVerticalSeperator(texVerSep, 1f, zoomheight); GUILayout.BeginVertical(); data.isNormalMapped = GUILayout.Toggle(data.isNormalMapped, "Normal Map"); if (data.isNormalMapped) { data.normalMap = (Texture)EditorGUILayout.ObjectField(data.normalMap, typeof(Texture), false, GUILayout.Width(zoomwidth), GUILayout.Height(zoomheight)); } GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); //------------------------------------------- GUILayout.Space(8); drawHorizontalSeperator(texHorSep, 1f); GUILayout.Space(8); //Color / Shiny GUILayout.BeginHorizontal(); GUILayout.Label("Sprite Color", GUILayout.ExpandWidth(false)); data.mainColor = EditorGUILayout.ColorField(data.mainColor); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); data.isShiny = GUILayout.Toggle(data.isShiny, " Shiny ", GUILayout.ExpandWidth(false)); if (data.isShiny) { data.specularColor = EditorGUILayout.ColorField(data.specularColor); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (data.isShiny) { GUILayout.Label("Shininess ", GUILayout.ExpandWidth(false)); data.shininess = EditorGUILayout.DelayedFloatField(data.shininess); } GUILayout.EndHorizontal(); //------------------------------------------- GUILayout.Space(8); drawHorizontalSeperator(texHorSep, 1f); GUILayout.Space(8); //Shader GUILayout.BeginHorizontal(); GUILayout.Label("Shader ", GUILayout.ExpandWidth(false)); data.shader = (Shader)EditorGUILayout.ObjectField(data.shader, typeof(Shader), false); GUILayout.EndHorizontal(); //------------------------------------------- GUILayout.Space(8); GUILayout.EndVertical(); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); drawHorizontalSeperator(texHorSep, 3f); } GUILayout.EndVertical(); } GUILayout.Space(32); GUILayout.EndVertical(); }