private void OnTriggerEnter(Collider other) { var rigidbody = other.gameObject.GetComponent <Rigidbody>(); if (rigidbody) { animator.Play("Boing"); gm.audioManager.PlayOneShot(gm.audioManager.boing, transform.position); var playerController = other.GetComponent <PlayerControllerRB>(); if (playerController) { Vector3 forward = transform.up; PlayerControllerExternalForce force = new PlayerControllerExternalForce { force = transform.up * power, mode = ForceMode.Impulse, resetVelocity = true, resetVelocityDirection = forward }; playerController.AddExternalForce(force); } else { Minion m = other.gameObject.GetComponent <Minion>(); if (m) { gm.audioManager.PlayOneShot(gm.audioManager.thrownMinion[Random.Range(0, gm.audioManager.thrownMinion.Length)], transform.position); } rigidbody.AddForce(transform.up * 0.1f * power, ForceMode.Impulse); if (transform.up == Vector3.up) { rigidbody.AddForce(transform.right * 0.01f * power, ForceMode.Impulse); } } } }
public void Explode(Vector3 explosionPos) { Collider[] colliders = Physics.OverlapSphere(explosionPos, explosionRadius); for (int i = 0; i < colliders.Length; i++) { if (colliders[i].gameObject.GetInstanceID() == playerTransform.gameObject.GetInstanceID()) { PlayerControllerRB rb = colliders[i].GetComponent <PlayerControllerRB>(); if (rb != null) { Vector3 dir = (playerTransform.position - explosionPos).normalized; float distance = Vector3.Distance(playerTransform.position, explosionPos); float appliedForce = 0.2f * explosionForce * (1.0f - Mathf.Clamp01(distance / explosionRadius)); PlayerControllerExternalForce force = new PlayerControllerExternalForce { force = appliedForce * dir, mode = ForceMode.Impulse }; // rb.AddExternalForce(force); } } else { Rigidbody rb = colliders[i].GetComponent <Rigidbody>(); if (rb != null) { rb.AddExplosionForce(explosionForce, explosionPos, explosionRadius, 3.0F); } } } gm.audioManager.PlayOneShot(gm.audioManager.poof, transform.position); ParticleSystemManager.Instance.Play(ps, _transform); MinionsPool.Instance.Put(this); }
private void OnTriggerStay(Collider other) { var rigidbody = other.GetComponent <Rigidbody>(); if (rigidbody) { var playerController = other.GetComponent <PlayerControllerRB>(); if (playerController) { PlayerControllerExternalForce force = new PlayerControllerExternalForce { force = transform.forward * Random.Range(minPower, maxPower) * Time.deltaTime, mode = ForceMode.Force, scale = true }; playerController.AddExternalForce(force); } else { rigidbody.AddForce(transform.forward * Random.Range(minPower, maxPower) * Time.deltaTime, ForceMode.Force); } } }
public void AddExternalForce(PlayerControllerExternalForce force) { externalForces.Add(force); }