public void add_func(perk_func func, List <perk_func> tab) { if (!tab.Any(s => s.nm == func.nm)) { tab.Add(func); tab.OrderBy(s => s.priority); } }
public void add_dot_perk(Func<float, float> func, int prio, float time, string type, string id) { List<perk_func> funcc; switch (type) { case "h": funcc = dc.func_health; break; case "hm": funcc = dc.func_health_malus; break; case "d": funcc = dc.func_damages; break; case "dm": funcc = dc.func_damages_malus; break; case "ms": funcc = dc.func_speed; break; case "msm": funcc = dc.func_speed_malus; break; default: return; } perk_func f = new perk_func(id, func, 1); dc.add_func(f, funcc); if (time > 0) { if (dots.ContainsKey(f.nm)) { Coroutine to_stop = null; if (dots.TryGetValue(f.nm, out to_stop)) { StopCoroutine(to_stop); dots[f.nm] = StartCoroutine(perk_cooldown(f, funcc, time)); } } else { dots.Add(f.nm, StartCoroutine(perk_cooldown(f, funcc, time))); } } }
IEnumerator perk_cooldown(perk_func func, List<perk_func> tab, float time) { yield return new WaitForSeconds(time); dc.remove_func(func.func, tab); }