public void AddStatusEffect(GameInfo.StatusEffect effectName, int duration, int magnitude, int addMagnitude, int removeMagnitude)
    {
        bool         hasDuplicate    = false;
        GameObject   duplicate       = null;
        StatusEffect duplicateEffect = null;

        for (int i = 0; i < statusEffectList.Count; i++)
        {
            if (statusEffectList[i].GetComponent <StatusEffect>().GetEffectName() == effectName)
            {
                hasDuplicate    = true;
                duplicate       = statusEffectList[i];
                duplicateEffect = duplicate.GetComponent <StatusEffect>();
                break;
            }
        }
        if (hasDuplicate && duplicateEffect.maxStacks > 0 && (duplicateEffect.GetNumberOfStacks() < duplicateEffect.GetMaxStacks()))
        {
            duplicateEffect.AddStack(duration, magnitude);
        }

        else
        {
            GameObject newEffect = (GameObject)Instantiate(gameInfo.statusEffectList[(int)effectName], transform.position, Quaternion.identity);
            newEffect.GetComponent <StatusEffect>().Initialize(duration, magnitude, addMagnitude, removeMagnitude);
            newEffect.transform.parent = transform;
            statusEffectList.Add(newEffect);
            newEffect.GetComponent <StatusEffect>().AddStatusEffect();
        }
    }