public void OnGUI(object asset, ItemDatabaseWindow itemDBWindow)
        {
            GUILayout.BeginVertical();

            EquipmentAsset itemAsset = asset as EquipmentAsset;

            GUILayout.BeginHorizontal(EditorStyles.toolbar);

            GUILayout.Label(" ", EditorStyles.toolbarButton, GUILayout.Width(30));
            GUILayout.Label("Type", EditorStyles.toolbarButton);
            GUILayout.Button("StatId", EditorStyles.toolbarButton);
            GUILayout.Label("Value", EditorStyles.toolbarButton, GUILayout.Width(50));
            GUILayout.Label("Stacks", EditorStyles.toolbarButton, GUILayout.Width(50));

            /*bool clicked = GUILayout.Toggle (i == itemDBWindow.SelectedEffectIndex, modifier.GetType ().Name, ToggleButtonStyle, GUILayout.Width(150));
             *      if (clicked != (i == itemDBWindow.SelectedEffectIndex)) {
             *              if (clicked) {
             *                      itemDBWindow.SelectedEffectIndex = i;
             *                      GUI.FocusControl (null);
             *              } else {
             *                      itemDBWindow.SelectedEffectIndex = -1;
             *              }
             *      }*/
            GUILayout.EndHorizontal();

            for (int i = 0; i < itemAsset.Mods.Count; i++)
            {
                RPGStatModifierAsset modifier = itemAsset.Mods[i];
                GUILayout.BeginHorizontal(EditorStyles.toolbar);

                if (GUILayout.Button("-", EditorStyles.toolbarButton, GUILayout.Width(30)) &&
                    EditorUtility.DisplayDialog("Remove modifier", "Are you sure you want to delete the modifier?", "Delete", "Cancel"))
                {
                    itemAsset.Mods.RemoveAt(i);
                }

                GUILayout.Label(modifier.GetType().Name, EditorStyles.toolbarButton);
                //modifier.AssignedStatId = EditorGUILayout.IntField (modifier.AssignedStatId);

                var statType = RPGStatTypeDatabase.Instance.Get(modifier.AssignedStatId, true);
                if (GUILayout.Button(statType == null ? "Assign Stat" : statType.Name, EditorStyles.toolbarButton))
                {
                    XmlDatabaseEditorUtility.ShowContext(RPGStatTypeDatabase.Instance, (statTypeAsset) => {
                        modifier.AssignedStatId = statTypeAsset.Id;
                        Debug.Log("Assigning stat to stat type " + statTypeAsset.Id);
                    }, typeof(RPGStatTypeWindow));
                }


                modifier.Value  = EditorGUILayout.FloatField(modifier.Value, GUILayout.Width(50));
                modifier.Stacks = EditorGUILayout.Toggle(modifier.Stacks, GUILayout.Width(50));

                /*bool clicked = GUILayout.Toggle (i == itemDBWindow.SelectedEffectIndex, modifier.GetType ().Name, ToggleButtonStyle, GUILayout.Width(150));
                 * if (clicked != (i == itemDBWindow.SelectedEffectIndex)) {
                 *      if (clicked) {
                 *              itemDBWindow.SelectedEffectIndex = i;
                 *              GUI.FocusControl (null);
                 *      } else {
                 *              itemDBWindow.SelectedEffectIndex = -1;
                 *      }
                 * }*/
                GUILayout.EndHorizontal();
            }

            if (GUILayout.Button("Add Modifier", EditorStyles.toolbarButton))
            {
                XmlDatabaseEditorUtility.GetGenericMenu(RPGStatModifierEditorUtility.GetNames(), (selectedIndex) => {
                    itemAsset.Mods.Add(RPGStatModifierEditorUtility.CreateAsset(selectedIndex));
                }).ShowAsContext();
            }

            GUILayout.EndVertical();
        }
Ejemplo n.º 2
0
        public void OnGUI(object asset, ItemDatabaseWindow itemDBWindow)
        {
            GUILayout.BeginVertical();

            UsableItemAsset itemAsset = asset as UsableItemAsset;

            for (int i = 0; i < itemAsset.Effects.Count; i++)
            {
                EffectAsset effect = itemAsset.Effects[i];
                GUILayout.BeginHorizontal(EditorStyles.toolbar);

                if (GUILayout.Button("-", EditorStyles.toolbarButton, GUILayout.Width(30)) &&
                    EditorUtility.DisplayDialog("Remove effect", "Are you sure you want to delete the effect?", "Delete", "Cancel"))
                {
                    itemAsset.Effects.RemoveAt(i);
                }

                bool clicked = GUILayout.Toggle(i == itemDBWindow.SelectedEffectIndex, effect.GetType().Name, ToggleButtonStyle, GUILayout.Width(150));
                if (clicked != (i == itemDBWindow.SelectedEffectIndex))
                {
                    if (clicked)
                    {
                        itemDBWindow.SelectedEffectIndex = i;
                        GUI.FocusControl(null);
                    }
                    else
                    {
                        itemDBWindow.SelectedEffectIndex = -1;
                    }
                }
                GUILayout.EndHorizontal();

                if (itemDBWindow.SelectedEffectIndex == i)
                {
                    GUILayout.BeginVertical();
                    foreach (var extension in EffectEditorUtility.GetExtensions())
                    {
                        if (extension.CanHandleType(effect.GetType()))
                        {
                            extension.OnGUI(effect);
                        }
                    }
                    GUILayout.EndVertical();
                }
            }

            if (GUILayout.Button("Add Effect", EditorStyles.toolbarButton))
            {
                Debug.Log(itemAsset.GetType().ToString());
                if (typeof(PositionUsableItemAsset).IsAssignableFrom(itemAsset.GetType()))
                {
                    XmlDatabaseEditorUtility.GetGenericMenu(EffectEditorUtility.GetPositionEffectNames(), (index) => {
                        var itemEffectAsset = EffectEditorUtility.CreatePositionEffectAsset(index);
                        itemAsset.Effects.Add(itemEffectAsset);
                        EditorWindow.FocusWindowIfItsOpen <ItemDatabaseWindow> ();
                    }).ShowAsContext();
                }
                else if (typeof(TargetUsableItemAsset).IsAssignableFrom(itemAsset.GetType()))
                {
                    XmlDatabaseEditorUtility.GetGenericMenu(EffectEditorUtility.GetTargetEffectNames(), (index) => {
                        var itemEffectAsset = EffectEditorUtility.CreateTargetEffectAsset(index);
                        itemAsset.Effects.Add(itemEffectAsset);
                        EditorWindow.FocusWindowIfItsOpen <ItemDatabaseWindow> ();
                    }).ShowAsContext();
                }
                else
                {
                    XmlDatabaseEditorUtility.GetGenericMenu(EffectEditorUtility.GetNames(), (index) => {
                        var skillEffectAsset = EffectEditorUtility.CreateAsset(index);
                        itemAsset.Effects.Add(skillEffectAsset);
                        EditorWindow.FocusWindowIfItsOpen <ItemDatabaseWindow> ();
                    }).ShowAsContext();
                }
            }

            GUILayout.EndVertical();
        }