using UnityEditor; using UnityEngine; namespace Beyond { [CustomEditor(typeof(TradeMenuController))] [System.Serializable] public class TradeMenuControllerEditor : vEditorBase { // SerializedProperty itemListData; private SerializedProperty shopItemRefs; private TradeMenuController tradeMenuController; private Rect buttonRect; private Vector2 scroll; private GUISkin oldSkin; protected override void OnEnable() { base.OnEnable(); skin = Resources.Load("vSkin") as GUISkin; tradeMenuController = (TradeMenuController)target; shopItemRefs = serializedObject.FindProperty("shopItemRefs"); } public override void OnInspectorGUI() { // GUILayout.Label("This is a Label in a Custom Editor"); oldSkin = GUI.skin; if (skin) { GUI.skin = skin; } DrawPropertiesExcluding(serializedObject, "shopItemRefs"); if (tradeMenuController.itemListData) { if (GUILayout.Button("Open Item List")) { ShowItemListWindow(); } GUILayout.BeginVertical("box"); GUILayout.Box("Shop Items " + tradeMenuController.shopItemRefs.Count); if (GUILayout.Button("Add Item", EditorStyles.miniButton)) { PopupWindow.Show(buttonRect, new bItemSelector (tradeMenuController.itemListData.items, ref tradeMenuController.itemsFilter, (bItem item) => //OnSelectItem { Debug.Log(item); shopItemRefs.arraySize++; shopItemRefs.GetArrayElementAtIndex(shopItemRefs.arraySize - 1) .FindPropertyRelative("id").intValue = item.id; shopItemRefs.GetArrayElementAtIndex(shopItemRefs.arraySize - 1) .FindPropertyRelative("amount").intValue = 1; EditorUtility.SetDirty(tradeMenuController); serializedObject.ApplyModifiedProperties(); } )); } if (Event.current.type == EventType.Repaint) { buttonRect = GUILayoutUtility.GetLastRect(); } GUIStyle boxStyle = new GUIStyle(GUI.skin.box); scroll = GUILayout.BeginScrollView(scroll, GUILayout.MinHeight(200), GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(false)); try { for (int i = 0; i < tradeMenuController.shopItemRefs.Count; i++) { var item = tradeMenuController.itemListData.items.Find(t => t.id.Equals(tradeMenuController.shopItemRefs[i].id)); if (item) { GUILayout.BeginVertical("box"); GUILayout.BeginHorizontal(); GUILayout.BeginHorizontal(); var rect = GUILayoutUtility.GetRect(50, 50); if (item.icon != null) { DrawTextureGUI(rect, item.icon, new Vector2(50, 50)); } var name = " ID " + item.id.ToString("00") + "\n - " + item.name + "\n - " + item.type.ToString(); var content = new GUIContent(name, null, "Click to Open"); GUILayout.Label(content, EditorStyles.miniLabel); GUILayout.BeginVertical("box"); GUILayout.BeginHorizontal(); GUILayout.Label("Amount", EditorStyles.miniLabel); tradeMenuController.shopItemRefs[i].amount = EditorGUILayout.IntField(tradeMenuController.shopItemRefs[i].amount, GUILayout.Width(30)); if (tradeMenuController.shopItemRefs[i].amount < 1) { tradeMenuController.shopItemRefs[i].amount = 1; } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.EndHorizontal(); if (GUILayout.Button("x", GUILayout.Width(25), GUILayout.Height(25))) { shopItemRefs.DeleteArrayElementAtIndex(i); EditorUtility.SetDirty(target); serializedObject.ApplyModifiedProperties(); break; } GUILayout.EndHorizontal(); Color backgroundColor = GUI.backgroundColor; GUI.backgroundColor = Color.clear; var _rec = GUILayoutUtility.GetLastRect(); _rec.width -= 100; EditorGUIUtility.AddCursorRect(_rec, MouseCursor.Link); if (GUI.Button(_rec, "")) { ShowItemListWindow(item); } GUILayout.Space(7); GUI.backgroundColor = backgroundColor; if (item.attributes != null && item.attributes.Count > 0) { if (tradeMenuController.shopItemRefs[i].changeAttributes) { if (GUILayout.Button("Reset", EditorStyles.miniButton)) { tradeMenuController.shopItemRefs[i].attributes = null; } if (tradeMenuController.shopItemRefs[i].attributes == null) { tradeMenuController.shopItemRefs[i].attributes = item.attributes.CopyAsNew(); } else if (tradeMenuController.shopItemRefs[i].attributes.Count != item.attributes.Count) { tradeMenuController.shopItemRefs[i].attributes = item.attributes.CopyAsNew(); } else { for (int a = 0; a < tradeMenuController.shopItemRefs[i].attributes.Count; a++) { GUILayout.BeginHorizontal(); GUILayout.Label(tradeMenuController.shopItemRefs[i].attributes[a].name .ToString()); tradeMenuController.shopItemRefs[i].attributes[a].value = EditorGUILayout.IntField( tradeMenuController.shopItemRefs[i].attributes[a].value, GUILayout.MaxWidth(60)); GUILayout.EndHorizontal(); } } } } GUILayout.EndVertical(); } else { shopItemRefs.DeleteArrayElementAtIndex(i); EditorUtility.SetDirty(tradeMenuController); serializedObject.ApplyModifiedProperties(); break; } } } catch { } GUILayout.EndScrollView(); GUI.skin.box = boxStyle; GUILayout.EndVertical(); } GUI.skin = oldSkin; if (GUI.changed) { EditorUtility.SetDirty(tradeMenuController); serializedObject.ApplyModifiedProperties(); } } private void DrawTextureGUI(Rect position, Sprite sprite, Vector2 size) { Rect spriteRect = new Rect(sprite.rect.x / sprite.texture.width, sprite.rect.y / sprite.texture.height, sprite.rect.width / sprite.texture.width, sprite.rect.height / sprite.texture.height); Vector2 actualSize = size; actualSize.y *= (sprite.rect.height / sprite.rect.width); GUI.DrawTextureWithTexCoords(new Rect(position.x, position.y + (size.y - actualSize.y) / 2, actualSize.x, actualSize.y), sprite.texture, spriteRect); } protected virtual void ShowItemListWindow(bItem item = null) { if (item == null) { bItemListWindow.CreateWindow(tradeMenuController.itemListData); } else if (tradeMenuController.itemListData.inEdition) { if (bItemListWindow.Instance == null) { bItemListWindow.CreateWindow(tradeMenuController.itemListData, tradeMenuController.itemListData.items.IndexOf(item)); } } else { bItemListWindow.CreateWindow(tradeMenuController.itemListData, tradeMenuController.itemListData.items.IndexOf(item)); } if (item) { bItemListWindow.SetCurrentSelectedItem(tradeMenuController.itemListData.items.IndexOf(item)); } } } }