Example #1
0
    private void OnEnable()
    {
        _rb.useGravity = false;

        _rb.angularVelocity = Vector3.zero;
        _rb.velocity        = Vector3.zero;
        _tr.rotation        = _initialRotation;
        _tr.position        = _initialPosition - 500 * _tr.forward + 10 * Vector3.down;

        StartCoroutine(Coroutines.OneAfterTheOther(Lerper.Lerp(_tr, 3, _initialPosition, _initialRotation), Rock()));
    }
Example #2
0
    // private void OnMouseEnter()
    // {
    //     _initialColour = material.color;
    //     material.color = Color.yellow;
    // }
    //
    // private void OnMouseExit()
    // {
    //     material.color = _initialColour;
    // }

    private void Fire()
    {
        audioSource.PlayOneShot(fireSound);
        _primed = false;
        var cannonBall = Instantiate(cannonBallPrefab);

        cannonBall.transform.position = cannonBallSpawn.position;
        cannonBall.transform.rotation = transform.rotation;

        EventManager.Instance.cannonFired?.Invoke();
        var rb           = cannonBall.GetComponent <Rigidbody>();
        var goalsOutcome = GameManager.Instance.GoalsOutcome();

        var distanceToShip     = (GameManager.Instance.EnemyPosition - transform.position).magnitude;
        var velocityMultiplier = (float)Polynomial.QuadraticFormula(a, b, c - distanceToShip).Item1;

        rb.velocity = velocityMultiplier * (transform.forward * 5 + Vector3.up);
        switch (goalsOutcome)
        {
        case Outcome.Over:
            rb.velocity *= 2;
            break;

        case Outcome.Under:
            rb.velocity /= 2;
            break;

        case Outcome.Achieved:
            break;

        case Outcome.NotAchieved:
            rb.velocity *= 0;
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }
        explosionEffect.Play();
        StartCoroutine(Coroutines.OneAfterTheOther(
                           Lerper.Lerp(transform, 0.1f, transform.position - transform.forward * 0.7f - Vector3.down * 0.3f, transform.rotation * Quaternion.Euler(-5, 0, 10)),
                           Lerper.Lerp(transform, 0.5f, transform.position, transform.rotation)));
    }