IEnumerator repairTimeEnum(float repairTime, repairDelegate repairAction, string actionButton) { velocity = Vector3.zero; healtbar?.ShowSlider(); float t = 0; canMove = false; anim?.setBoolean("repair", true); float soundtime = 0; while (t < repairTime && Input.GetButton(actionButton)) { healtbar?.UpdateSlider(t / repairTime); if (t > soundtime) { AudioManager.instance.Play("repair"); soundtime += repairTime / 3; } t += Time.deltaTime; yield return(null); } healtbar?.HideSlider(); if (t >= repairTime) { repairAction.Invoke(); } anim?.setBoolean("repair", false); currentRepair = null; canMove = true; }
private void OnTrigger(Transform other) { if (other.GetComponent <Asteroid>() != null) { anim?.setTrigger("punch"); burstForce(Vector2.up * 15, false); } if (canMove && heldObject == null) { if (other.GetComponent <Machine>() != null && other.GetComponent <Machine>().health <= 0 && Input.GetButtonDown("Fire1") && currentRepair == null) { repairDelegate repairPart = (() => { other.GetComponent <Machine>().repair(); }); currentRepair = repairTimeEnum(2, repairPart, "Fire1"); StartCoroutine(currentRepair); } else if (other.GetComponent <ShieldLayer>() != null && Input.GetButtonDown("Fire1") && currentRepair == null) { repairDelegate repairShip = (() => { other.GetComponent <ShieldLayer>().RepairLayer(); transform.position += transform.up * 2; }); currentRepair = repairTimeEnum(2, repairShip, "Fire1"); StartCoroutine(currentRepair); } else if (other.GetComponent <Machine>() != null && Input.GetButtonDown("Fire1")) { pickUpObject(other); } } }