示例#1
0
    public void Shoot()
    {
        PastaManager.Instance.pastaAmounts[currentSelectedPasta] -= 1;
        Pasta           shotPasta  = PastaManager.Instance.pastas[currentSelectedPasta];
        PastaShotConfig shotConfig = cookedReady ? shotPasta.config.cookedShot : shotPasta.config.crudeShot;

        reloadSpeed = shotConfig.reloadSpeed;
        reloadCount = reloadSpeed;

        if (SoundManager.Instance)
        {
            SoundManager.Instance.PlaySound(shotConfig.firingSound);
        }


        if (cookedReady)
        {
            cookedReady = false;
        }
        cooking      = false;
        cookingCount = 0f;

        for (int i = 0; i < shotConfig.missileAmount; i++)
        {
            PastaProjectile projectile = PastaManager.Instance.CreateProjectileAtPosition(shotConfig, (Vector2)transform.position +
                                                                                          (shootingLeft ? new Vector2(-shotLocalPosition.x, shotLocalPosition.y) : shotLocalPosition), shotPasta);

            if (PlayerController._instance)
            {
                projectile.transform.position += PlayerController._instance.transform.position;
            }

            FXPlayer.Instance.PlayFX("Shot", projectile.transform.position);

            if (shotConfig.missileAmount > 1)
            {
                int   addedAngle       = shootingLeft ? 0 : 0;
                float angleIncrement   = shotConfig.missileSpreadAngle / (shotConfig.missileAmount - 1);
                float maxPositiveAngle = addedAngle + (shotConfig.missileSpreadAngle / 2f);

                projectile.transform.eulerAngles = new Vector3(0, 0, maxPositiveAngle - (angleIncrement * i));
            }
            else
            {
                projectile.transform.eulerAngles = Vector3.zero;
            }

            projectile.shotByPlayer = true;
            projectile.SetDirection(shootingLeft);
            projectile.Shoot();
        }
    }
示例#2
0
    public void Initialize(PastaShotConfig _shotConfig)
    {
        gameObject.layer = LayerMask.NameToLayer("Projectiles");

        shotConfig = _shotConfig;

        sr.sprite = shotConfig.projectileSprite;
        sr.transform.localScale = shotConfig.spriteObjectScale;
        sr.enabled = false;

        col.size      = shotConfig.colliderSize;
        col.isTrigger = true;
    }
示例#3
0
    public PastaProjectile CreateProjectileAtPosition(PastaShotConfig shotConfig, Vector2 _position, Pasta pasta)
    {
        if (projectilePool.Count < 1)
        {
            FillProjectilePool();
        }
        PastaProjectile createdProjectile = projectilePool.Dequeue();

        createdProjectile.gameObject.SetActive(true);
        createdProjectile.transform.position = new Vector3(_position.x, _position.y, 0f);
        createdProjectile.Initialize(shotConfig);
        createdProjectile.pasta = pasta;
        return(createdProjectile);
    }