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); }