Skip to content

Commit

Permalink
A Better Way to Manage Lists
Browse files Browse the repository at this point in the history
  • Loading branch information
Mnemoth42 committed Oct 4, 2020
1 parent 400af3f commit 75a2e9a
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 7 deletions.
Expand Up @@ -39,7 +39,9 @@ public override void DrawCustomInspector()
base.DrawCustomInspector();
drawEquipableItem = EditorGUILayout.Foldout(drawEquipableItem, "EquipableItem Data", foldoutStyle);
if (!drawEquipableItem) return;
EditorGUILayout.BeginVertical(contentStyle);
SetAllowedEquipLocation((EquipLocation)EditorGUILayout.EnumPopup(new GUIContent("Equip Location"),allowedEquipLocation,IsLocationSelectable,false));
EditorGUILayout.EndVertical();
}

/// <summary>
Expand Down
Expand Up @@ -213,19 +213,23 @@ public void SetStackable(bool newStackable)


bool drawInventoryItem = true;
public GUIStyle foldoutStyle;
[NonSerialized] protected GUIStyle foldoutStyle;
[NonSerialized] protected GUIStyle contentStyle;
public virtual void DrawCustomInspector()
{
foldoutStyle = new GUIStyle(EditorStyles.foldout);
foldoutStyle.fontStyle = FontStyle.Bold;
contentStyle = new GUIStyle {padding = new RectOffset(15, 15, 0, 0)};

foldoutStyle = new GUIStyle(EditorStyles.foldout) {fontStyle = FontStyle.Bold};
drawInventoryItem = EditorGUILayout.Foldout(drawInventoryItem, "InventoryItem Data", foldoutStyle);
if (!drawInventoryItem) return;
EditorGUILayout.BeginVertical(contentStyle);
SetItemID(EditorGUILayout.TextField("ItemID (clear to reset", GetItemID()));
SetDisplayName(EditorGUILayout.TextField("Display name", GetDisplayName()));
SetDescription(EditorGUILayout.TextField("Description", GetDescription()));
SetIcon((Sprite)EditorGUILayout.ObjectField("Icon", GetIcon(), typeof(Sprite), false));
SetPickup((Pickup)EditorGUILayout.ObjectField("Pickup", pickup, typeof(Pickup), false));
SetStackable(EditorGUILayout.Toggle("Stackable", IsStackable()));
EditorGUILayout.EndVertical();
}

#endif
Expand Down
Expand Up @@ -22,4 +22,10 @@ MonoBehaviour:
additiveModifiers:
- stat: 0
value: 20
percentageModifiers: []
- stat: 3
value: 0
percentageModifiers:
- stat: 3
value: 1
- stat: 0
value: 20
2 changes: 2 additions & 0 deletions RPG Project/Assets/Scripts/Combat/WeaponConfig.cs
Expand Up @@ -182,13 +182,15 @@ public override void DrawCustomInspector()
base.DrawCustomInspector();
drawWeaponConfigData = EditorGUILayout.Foldout(drawWeaponConfigData, "WeaponConfig Data",foldoutStyle);
if (!drawWeaponConfigData) return;
EditorGUILayout.BeginVertical(contentStyle);
SetEquippedPrefab((Weapon)EditorGUILayout.ObjectField("Equipped Prefab", equippedPrefab,typeof(Object), false));
SetWeaponDamage(EditorGUILayout.Slider("Weapon Damage", weaponDamage, 0, 100));
SetWeaponRange(EditorGUILayout.Slider("Weapon Range", weaponRange, 1,40));
SetPercentageBonus(EditorGUILayout.IntSlider("Percentage Bonus", (int)percentageBonus, -10, 100));
SetIsRightHanded(EditorGUILayout.Toggle("Is Right Handed", isRightHanded));
SetAnimatorOverride((AnimatorOverrideController)EditorGUILayout.ObjectField("Animator Override", animatorOverride, typeof(AnimatorOverrideController), false));
SetProjectile((Projectile)EditorGUILayout.ObjectField("Projectile", projectile, typeof(Projectile), false));
EditorGUILayout.EndVertical();
}

#endif
Expand Down
104 changes: 101 additions & 3 deletions RPG Project/Assets/Scripts/Inventories/StatsEquipableItem.cs
Expand Up @@ -3,17 +3,21 @@
using System.Collections.Generic;
using GameDevTV.Inventories;
using RPG.Stats;
using UnityEditor;
using UnityEngine;

namespace RPG.Inventories
{
[CreateAssetMenu(menuName = ("RPG/Inventory/Equipable Item"))]
public class StatsEquipableItem : EquipableItem, IModifierProvider
{
/// <summary>
/// Changed from Array[Modifier] to a List of Modifiers to make editing the list easier in the custom inspector
/// </summary>
[SerializeField]
Modifier[] additiveModifiers;
List<Modifier> additiveModifiers= new List<Modifier>();
[SerializeField]
Modifier[] percentageModifiers;
List<Modifier> percentageModifiers = new List<Modifier>();

[System.Serializable]
struct Modifier
Expand Down Expand Up @@ -46,8 +50,102 @@ public IEnumerable<float> GetPercentageModifiers(Stat stat)

#region InventoryItemEditor Changes
#if UNITY_EDITOR

void AddModifier(List<Modifier> modifierList)
{
SetUndo("Add Modifier");
modifierList?.Add(new Modifier());
Dirty();
}

void RemoveModifier(List<Modifier>modifierList, int index)
{
SetUndo("Remove Modifier");
modifierList?.RemoveAt(index);
Dirty();
}

void SetStat(List<Modifier> modifierList, int i, Stat stat)
{
if (modifierList[i].stat == stat) return;
SetUndo("Change Modifier Stat");
Modifier mod = modifierList[i];
mod.stat = stat;
modifierList[i] = mod;
Dirty();
}

void SetValue(List<Modifier> modifierList, int i, float value)
{
if (modifierList[i].value == value) return;
SetUndo("Change Modifier Value");
Modifier mod = modifierList[i];
mod.value= value;
modifierList[i] = mod;
Dirty();
}

bool drawStatsEquipableItemData = true;
bool drawAdditive = true;
bool drawPercentage = true;

public override void DrawCustomInspector()
{
base.DrawCustomInspector();
drawStatsEquipableItemData =
EditorGUILayout.Foldout(drawStatsEquipableItemData, "StatsEquipableItemData", foldoutStyle);
if (!drawStatsEquipableItemData) return;
EditorGUILayout.BeginVertical(contentStyle);
drawAdditive=EditorGUILayout.Foldout(drawAdditive, "Additive Modifiers");
if (drawAdditive)
{
DrawModifierList(additiveModifiers);
}
drawPercentage = EditorGUILayout.Foldout(drawPercentage, "Percentage Modifiers");
if (drawPercentage)
{
DrawModifierList(percentageModifiers);
}
EditorGUILayout.EndVertical();
}

void DrawModifierList(List<Modifier> modifierList)
{
int modifierToDelete = -1;
GUIContent statLabel = new GUIContent("Stat");
for (int i = 0; i < modifierList.Count; i++)
{
Modifier modifier = modifierList[i];
EditorGUILayout.BeginHorizontal();
SetStat(modifierList, i, (Stat) EditorGUILayout.EnumPopup(statLabel, modifier.stat, IsStatSelectable, false));
SetValue(modifierList, i, EditorGUILayout.IntSlider("Value", (int) modifier.value, -20, 100));
if (GUILayout.Button("-"))
{
modifierToDelete = i;
}

EditorGUILayout.EndHorizontal();
}

if (modifierToDelete > -1)
{
RemoveModifier(modifierList, modifierToDelete);
}

if (GUILayout.Button("Add Modifier"))
{
AddModifier(modifierList);
}
}

bool IsStatSelectable(Enum candidate)
{
Stat stat = (Stat) candidate;
if (stat == Stat.ExperienceReward || stat == Stat.ExperienceToLevelUp) return false;
return true;
}

#endif

#endregion

}
Expand Down

0 comments on commit 75a2e9a

Please sign in to comment.