Exemplo n.º 1
0
    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);
                }
            }
        }
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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);
            }
        }
    }
Exemplo n.º 4
0
 public void AddExternalForce(PlayerControllerExternalForce force)
 {
     externalForces.Add(force);
 }