public void OnCardPlayStatusUpdate()
 {
     if (isDead)
     {
         return;
     }
     for (int i = 0; i < statuses.Count; i++)
     {
         statuses[i].status.OnCardPlayEvent(this, GetOpponent(this), statuses[i].duration);
         if (isDead || i >= statuses.Count)
         {
             return;
         }
         if (statuses[i].status.TickOnCardPlay)
         {
             StatusAndDuration tempStatus = statuses[i];
             if (statuses[i].status.oneTurnOnly)
             {
                 tempStatus.duration = 0;
             }
             else
             {
                 tempStatus.duration -= 1;
             }
             if (tempStatus.duration == 0 || tempStatus.duration < 0 && !tempStatus.status.canBeNegative)
             {
                 statuses[i].status.OnStatusEnd(this, GetOpponent(this), statuses[i].duration);
                 if (isDead)
                 {
                     return;
                 }
                 statuses.Remove(statuses[i]);
                 i--;
             }
             else
             {
                 statuses[i] = tempStatus;
             }
         }
     }
     statusDisplayer.DisplayStatusList(statuses);
 }
    public void TakeStatus(Status status, int duration)
    {
        if (isDead)
        {
            return;
        }
        bool applyedStatus = false;

        for (int i = 0; i < statuses.Count; i++)
        {
            if (status == statuses[i].status)
            {
                StatusAndDuration tempStatus = statuses[i];
                tempStatus.duration += duration;
                if (tempStatus.duration == 0 || tempStatus.duration < 0 && !tempStatus.status.canBeNegative)
                {
                    statuses[i].status.OnStatusEnd(this, GetOpponent(this), statuses[i].duration);
                    if (isDead)
                    {
                        return;
                    }
                    statuses[i].status.OnDurationChangeEvent(this, GetOpponent(this), tempStatus.duration);
                    statuses.Remove(statuses[i]);
                    i--;
                }
                else
                {
                    statuses[i] = tempStatus;
                    statuses[i].status.OnDurationChangeEvent(this, GetOpponent(this), tempStatus.duration);
                }
                applyedStatus = true;
            }
        }
        if (!applyedStatus)
        {
            statuses.Add(new StatusAndDuration(status, duration));
            status.OnStatusStart(this, GetOpponent(this), duration);
            status.OnDurationChangeEvent(this, GetOpponent(this), duration);
        }
        statusDisplayer.DisplayStatusList(statuses);
    }