Hello everyone, I’ve been working on an equipment system that uses scriptable objects to apply different stats to the player and need help with simplifying it if possible. Here is the script:
public class PlayerStats : CharacterStats
{
EquipmentSlot _slot;
void Start()
{
EquipmentManager.instance.onEquipmentChanged += OnEquipmentChanged;
}
void OnEquipmentChanged(Equipment newItem, Equipment oldItem)
{
_slot = newItem.equipSlot;
if (newItem != null && _slot == EquipmentSlot.LeftHand)
{
poorArmorL.AddModifier(newItem.poorArmorModHand);
goodArmorL.AddModifier(newItem.goodArmorModHand);
greatArmorL.AddModifier(newItem.greatArmorModHand);
poorPowerL.AddModifier(newItem.poorPowerModHand);
goodPowerL.AddModifier(newItem.goodPowerModHand);
greatPowerL.AddModifier(newItem.greatPowerModHand);
}
if (newItem != null && _slot == EquipmentSlot.RightHand)
{
poorArmorR.AddModifier(newItem.poorArmorModHand);
goodArmorR.AddModifier(newItem.goodArmorModHand);
greatArmorR.AddModifier(newItem.greatArmorModHand);
poorPowerR.AddModifier(newItem.poorPowerModHand);
goodPowerR.AddModifier(newItem.goodPowerModHand);
greatPowerR.AddModifier(newItem.greatPowerModHand);
}
if (newItem != null && _slot == EquipmentSlot.Chestplate)
{
poorArmorC.AddModifier(newItem.poorArmorModChest);
goodArmorC.AddModifier(newItem.goodArmorModChest);
greatArmorC.AddModifier(newItem.greatArmorModChest);
}
if (oldItem != null)
{
poorArmorL.RemoveModifier(newItem.poorArmorModHand);
goodArmorL.RemoveModifier(newItem.goodArmorModHand);
greatArmorL.RemoveModifier(newItem.greatArmorModHand);
poorPowerL.RemoveModifier(newItem.poorPowerModHand);
goodPowerL.RemoveModifier(newItem.goodPowerModHand);
greatPowerL.RemoveModifier(newItem.greatPowerModHand);
poorArmorR.RemoveModifier(newItem.poorArmorModHand);
goodArmorR.RemoveModifier(newItem.goodArmorModHand);
greatArmorR.RemoveModifier(newItem.greatArmorModHand);
poorPowerR.RemoveModifier(newItem.poorPowerModHand);
goodPowerR.RemoveModifier(newItem.goodPowerModHand);
greatPowerR.RemoveModifier(newItem.greatPowerModHand);
poorArmorC.RemoveModifier(newItem.poorArmorModChest);
goodArmorC.RemoveModifier(newItem.goodArmorModChest);
greatArmorC.RemoveModifier(newItem.greatArmorModChest);
}
}
}
Currently, “EquipmentSlot” is referencing the enums (RightHand, LeftHand, Chestplate, Belt) of my Scriptable Object equipment. Long story short, this is sorting where the attack and defense values go for my other script to randomize the outcome.
And as you can see, it’s a repetitive mess to navigate in the inspector and it feels like there is a simpler way of doing this anyway. Any suggestions are welcome, but understand I am still well within the learning stage of unity coding and may need some clarification from time to time.