private IEnumerator ApplyConditionEffect(ICharacterClass characterClass, IConditionConstant condition, Action <ICharacterClass, ICondition> conditionActionStart, Action <ICharacterClass, ICondition> conditionActionEnd)
        {
            characterClass.ApplyConditionEffect(condition);
            conditionActionStart.Invoke(characterClass, condition);

            yield return(new WaitForSeconds(condition.DurationTime));

            conditionActionEnd.Invoke(characterClass, condition);
            characterClass.RemoveConditionEffect(condition);
        }
        private IEnumerator ApplyConditionEffectOverTime(ICharacterClass characterClass, IConditionEffectOverTime condition, Action <ICharacterClass, ICondition> conditionAction)
        {
            characterClass.ApplyConditionEffect(condition);

            yield return(new WaitForSeconds(condition.InitializationTime));

            for (float i = default(float); i < condition.ConditionIterations; i++)
            {
                conditionAction.Invoke(characterClass, condition);
                yield return(new WaitForSeconds(condition.ConditionIntervalTime));
            }

            characterClass.RemoveConditionEffect(condition);
        }