Ejemplo n.º 1
0
    private IEnumerator VaultEnumerator()
    {
        spawnedIndicator = Instantiate(indicatorPrefab, transform.position, Quaternion.identity);
        GameController.instance.TimeScaleSlowDown(0.1f, frozenTime, 0.2f);

        CinemachineFramingTransposer vir = CameraManager.instance.currentCam.GetCinemachineComponent <CinemachineFramingTransposer>();
        Camera  main      = Camera.main;
        Vector2 direction = Vector2.right;

        float timer = 0;

        while (timer < frozenTime)
        {
            Vector3 worldMousePosition = main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, vir.m_CameraDistance));
            direction = new Vector2(worldMousePosition.x - transform.position.x, worldMousePosition.y - transform.position.y).normalized;

            if (spawnedIndicator != null)
            {
                float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;

                spawnedIndicator.transform.position = transform.position;
                spawnedIndicator.transform.rotation = Quaternion.Euler(0, 0, angle - 90f);
            }

            timer += Time.unscaledDeltaTime;
            yield return(null);
        }

        if (spawnedIndicator != null)
        {
            Destroy(spawnedIndicator);
        }

        Debug.DrawLine(transform.position, new Vector3(direction.x, direction.y, 0) + transform.position, Color.blue, 1f);


        basicSlashRef.noFullRecoil = false;
        onVaultSuccess?.Invoke();
        isVaulting = false; //Vault needs to end by this point or else it will be cancelled when Dash activates.


        dashRef.DashInitiate(direction, vaultSpeed, vaultTime, false);

        yield return(new WaitForSeconds(vaultTime + 0.25f));

        foreach (Collider2D col in lastHits)
        {
            if (aEntity.healthControl.ignoreColliders.Contains(col))
            {
                aEntity.healthControl.ignoreColliders.Remove(col);
            }
        }
        lastHits.Clear();
    }