Ejemplo n.º 1
0
    // ====================================================
    private IEnumerator FireCoroutine(Vector2 direction)
    {
        direction.Normalize();
        if (currentProjectile != null)
        {
            yield break;
        }

        if (nextFireTime > MinigameTimeManager.instance.time)
        {
            yield break;
        }
        nextFireTime = MinigameTimeManager.instance.time + attackDelay;
        isAttacking  = true;

        ProjectileDirection projectileDirection = ProjectileDirection.FORWARD;

        if (direction == Vector2.zero)
        {
            direction           = Vector3.right * Mathf.Sign(transform.localScale.x);
            projectileDirection = ProjectileDirection.FORWARD;
        }
        if (isGrabbingToWall)
        {
            //TODO: check
            direction           = Vector3.right * Mathf.Sign(transform.localScale.x);
            projectileDirection = ProjectileDirection.FORWARD;
        }
        else
        {
            float oldHorizontalDir = Mathf.Sign(transform.localScale.x);
            direction.x *= oldHorizontalDir;

            /*float maxValue = float.MinValue;
             * foreach( ProjectileDirection key in directionsCache.Keys ) {
             *      float value = Vector2.Dot( direction, directionsCache[key] );
             *      if( value < maxValue ) {
             *              continue;
             *      }
             *      maxValue = value;
             *      projectileDirection = key;
             * }*/

            if (direction.y > 0.4f)
            {
                projectileDirection = ProjectileDirection.UP;
            }
            else if (direction.y < -0.4f)
            {
                projectileDirection = ProjectileDirection.DOWN;
            }
            direction = directionsCache[projectileDirection];
            // return to old direction
            direction.x *= oldHorizontalDir;
        }
        SoundManager.instance.PlaySound(SoundManager.SoundType.Throw);
        currentProjectile = Instantiate <ProjectileController>(projectilePrefab);
        foreach (ProjectileSpawnPointInfo info in projectileSpawnPointInfos)
        {
            if (info.direction == projectileDirection)
            {
                currentProjectile.transform.position = info.spawnPoint.position;
                currentProjectile.transform.right    = direction;
            }
        }
        shootVfxAnimator.SetTrigger("shootTrigger");
        currentProjectile.Configure(direction, this);
        isAttacking = false;
    }