// Update is called once per frame void Update() { var new_load = load; new_load += next_update_load * load_speed * Time.deltaTime; new_load -= load_recovery_speed * Time.deltaTime; if (new_load < 0) { new_load = 0; if (state == State.recovering) { state = State.stable; OverloadEvents.InvokeOnUnblock(); play_recovery_sound(); } } if (state != State.recovering) { if (new_load > load_limit) { state = State.recovering; new_load += overload_cost; play_overload_sound(); } else if (new_load > load) { state = State.overloading; } else { state = State.stable; } } load = new_load; next_update_load = 0; if (state == State.recovering) { var recover_percent = 1f - load / (load_limit + overload_cost); recover_percent = Mathf.Max(0f, recover_percent); recover_percent = Mathf.Min(1f, recover_percent); OverloadEvents.InvokeOnBlock(recover_percent); OverloadEvents.InvokeOnLoadChange(0); } else { OverloadEvents.InvokeOnLoadChange(Mathf.Min(1f, load / load_limit)); } }
// Use this for initialization void Start() { OverloadEvents.InvokeOnUnblock(); }