void OnGUI() { tabIndex = GUILayout.Toolbar(tabIndex, tabHeaders); if (tabIndex == 0) { EditorGUILayout.HelpBox("Welcome to Inventory Wizard. With this tool you can create your own inventory. Watch video and follow steps", MessageType.Info); EditorGUILayout.LabelField("Inventory & Cell size", EditorStyles.centeredGreyMiniLabel); GUILayout.BeginVertical("HelpBox"); GUILayout.BeginVertical("GroupBox"); SizeX = EditorGUILayout.IntSlider("Inventory Horizontal size", SizeX, 1, 100); SizeY = EditorGUILayout.IntSlider("Inventory Vertical size", SizeY, 1, 100); normalCellColor = EditorGUILayout.ColorField("Normal cell color", normalCellColor); hoveredCellColor = EditorGUILayout.ColorField("Hovered cell color", hoveredCellColor); blockedCellCover = EditorGUILayout.ColorField("Blocked cell color", blockedCellCover); stackTextFont = (Font)EditorGUILayout.ObjectField("Stack text font", stackTextFont, typeof(Font), false); stackTextColor = EditorGUILayout.ColorField("Stack text color", stackTextColor); EditorGUILayout.LabelField(""); CellRectSize = EditorGUILayout.IntSlider("Cell size", CellRectSize, 1, 200); //CellSpacing = EditorGUILayout.IntSlider("Space between cells", CellSpacing, 0, 20); CellImage = (Sprite)EditorGUILayout.ObjectField("Cell image", CellImage, typeof(Sprite), false); inventoryBackgroundColor = EditorGUILayout.ColorField("Background color", inventoryBackgroundColor); InventoryBackground = (Sprite)EditorGUILayout.ObjectField("Inventory background", InventoryBackground, typeof(Sprite), false); if (GUILayout.Button("Build inventory")) { var eventSystem = Instantiate(new GameObject()); eventSystem.AddComponent <EventSystem>(); eventSystem.AddComponent <StandaloneInputModule>(); eventSystem.AddComponent <BaseInput>(); eventSystem.name = "Event System"; CleanUp(); if (CellImage == null) { EditorUtility.DisplayDialog("Setup uncompleted", " Please attach sprite to cell image field. Otherwise, inventory cells will be invisible", "Continue"); return; } // Drawing Canvas var obj = Instantiate(new GameObject()); obj.AddComponent <Canvas>().renderMode = RenderMode.ScreenSpaceOverlay; obj.AddComponent <CanvasScaler>(); obj.AddComponent <GraphicRaycaster>(); obj.AddComponent <InventoryManager>(); eventSystem.gameObject.transform.parent = obj.transform; obj.name = "Inventory Canvas"; // Drawing Inventory (cell holder in context) var cellHolder = Instantiate(new GameObject()); cellHolder.transform.SetParent(obj.transform); cellHolder.name = "Inventory"; inventoryTransform = obj.transform; var cellHolderImage = cellHolder.AddComponent <Image>(); cellHolderImage.rectTransform.sizeDelta = new Vector2((CellRectSize + CellSpacing) * SizeX, (CellRectSize + CellSpacing) * SizeY); cellHolderImage.rectTransform.anchoredPosition = Vector2.zero; cellHolderImage.color = inventoryBackgroundColor; inventoryRectSize = cellHolderImage.rectTransform.sizeDelta; var inventory = cellHolder.AddComponent <DTInventory>(); inventory.cellSize = CellRectSize; inventory.padding = CellSpacing; inventory.column = SizeX; inventory.row = SizeY; inventory.normalCellColor = normalCellColor; inventory.blockedCellColor = blockedCellCover; inventory.hoveredCellColor = hoveredCellColor; // Making inventory grid cell object var imgObj = Instantiate(new GameObject()); imgObj.AddComponent <Image>().sprite = CellImage; imgObj.GetComponent <RectTransform>().sizeDelta = new Vector2(CellRectSize, CellRectSize); imgObj.GetComponent <RectTransform>().anchorMin = new Vector2(0, 1); imgObj.GetComponent <RectTransform>().anchorMax = new Vector2(0, 1); imgObj.GetComponent <RectTransform>().pivot = new Vector2(0, 1); imgObj.transform.SetParent(obj.transform); imgObj.GetComponent <Image>().type = Image.Type.Sliced; imgObj.GetComponent <Image>().color = Color.white; imgObj.GetComponent <RectTransform>().anchoredPosition = new Vector2(0, 3000); imgObj.AddComponent <GridSlot>(); imgObj.name = "Utility object (Don't delete!)"; var stackText = Instantiate(new GameObject()); stackText.transform.SetParent(imgObj.transform); var stackTextComponent = stackText.AddComponent <Text>(); stackTextComponent.alignment = TextAnchor.LowerLeft; stackTextComponent.raycastTarget = false; stackTextComponent.rectTransform.anchorMin = new Vector2(0, 0); stackTextComponent.rectTransform.anchorMax = new Vector2(0, 0); stackTextComponent.rectTransform.anchoredPosition = new Vector2(53, 53); stackTextComponent.color = stackTextColor; if (stackTextFont != null) { stackTextComponent.font = stackTextFont; } // Drawing Inventory view inventory.cell = imgObj.GetComponent <Image>(); inventory.DrawPreview(); CleanUp(); CleanUp(); CleanUp(); CleanUp(); //this.Close(); } GUILayout.EndVertical(); GUILayout.EndVertical(); } if (tabIndex == 1) { inventory = FindObjectOfType <DTInventory>(); if (inventory == null) { EditorGUILayout.HelpBox("No inventory found in the scene. You must create inventory first, in order to create loot window", MessageType.Error); } else { GUILayout.BeginVertical("GroupBox"); LootSizeX = EditorGUILayout.IntField("Loot Horizontal size", LootSizeX); LootSizeY = EditorGUILayout.IntField("Loot Vertical size", LootSizeY); if (GUILayout.Button("Build Loot Window")) { var cellHolder = Instantiate(new GameObject()); cellHolder.transform.SetParent(inventoryTransform); cellHolder.name = "Loot window"; var cellHolderImage = cellHolder.AddComponent <Image>(); cellHolderImage.rectTransform.sizeDelta = new Vector2((CellRectSize + CellSpacing) * LootSizeX, (CellRectSize + CellSpacing) * LootSizeY); cellHolderImage.rectTransform.anchoredPosition = Vector2.zero; cellHolderImage.color = inventoryBackgroundColor; cellHolderImage.rectTransform.anchoredPosition = new Vector2(inventoryRectSize.x, 0); inventory.lootPanel = cellHolder.GetComponent <RectTransform>(); inventory.lootRow = LootSizeX; inventory.lootColumn = LootSizeY; //DestroyImmediate(GameObject.Find("Inventory Canvas")); inventory.DrawPreview(); CleanUp(); } } } if (tabIndex == 2) { if (inventory == null) { EditorGUILayout.HelpBox("No inventory found in the scene. You must create inventory first, in order to create equipment panels", MessageType.Error); } else { scrollPos = EditorGUILayout.BeginScrollView(scrollPos, false, false); equipmentPanelsCount = EditorGUILayout.IntSlider("Equipment panels count", equipmentPanelsCount, 1, 20); if (currentEquipmentPanelsCount != equipmentPanelsCount) { equipmentPanelX = new int[equipmentPanelsCount]; equipmentPanelY = new int[equipmentPanelsCount]; equipmentPanelType = new string[equipmentPanelsCount]; currentEquipmentPanelsCount = equipmentPanelsCount; } for (int i = 0; i < equipmentPanelsCount; i++) { GUILayout.BeginVertical("HelpBox"); GUILayout.Label("Equipment panel " + (i + 1) + " :" + equipmentPanelType[i], EditorStyles.boldLabel); GUILayout.Label(""); equipmentPanelX[i] = EditorGUILayout.IntField("Equipment Horizontal size", equipmentPanelX[i]); if (equipmentPanelX[i] == 0) { equipmentPanelX[i] = 1; } equipmentPanelY[i] = EditorGUILayout.IntField("Equipment Vertical size", equipmentPanelY[i]); if (equipmentPanelY[i] == 0) { equipmentPanelY[i] = 1; } equipmentPanelType[i] = EditorGUILayout.TextField("Allowed item type", equipmentPanelType[i]); GUILayout.EndVertical(); } if (GUILayout.Button("Build panels")) { inventory.equipmentPanels = new List <EquipmentPanel>(); for (int i = 0; i < equipmentPanelsCount; i++) { var cellHolder = Instantiate(new GameObject()); cellHolder.transform.SetParent(inventoryTransform); cellHolder.name = "Equiment panel :" + equipmentPanelType[i]; var equipmentPanel = cellHolder.AddComponent <EquipmentPanel>(); equipmentPanel.width = equipmentPanelX[i]; equipmentPanel.height = equipmentPanelY[i]; equipmentPanel.allowedItemType = equipmentPanelType[i]; var cellHolderImage = cellHolder.AddComponent <Image>(); cellHolderImage.rectTransform.sizeDelta = new Vector2((CellRectSize + CellSpacing) * equipmentPanelX[i], (CellRectSize + CellSpacing) * equipmentPanelY[i]); cellHolderImage.rectTransform.anchoredPosition = Vector2.zero; cellHolderImage.color = inventoryBackgroundColor; inventory.equipmentPanels.Add(equipmentPanel); //cellHolderImage.rectTransform.anchoredPosition = new Vector2(inventoryRectSize.x, 0); //DestroyImmediate(GameObject.Find("Inventory Canvas")); CleanUp(); } inventory.DrawPreview(); } EditorGUILayout.EndScrollView(); } } }