public int fireWeapon()
    {
        Debug.Log(upgradeStates[0] + "  " + upgradeStates[1] + "  " + upgradeStates[2]);
        Debug.Log(weaponRateOfFire() + "  " + weaponDamage() + "  " + weaponCapacity());

        /*if(fireTimer.timerTick()){
         *      fireTimer.TimerValue = weaponRateOfFire();
         *      fireTimer.resetTimer();
         */
        //if(fireTimer.timerTick())
        if (canShoot)
        {
            //	fireTimer.TimerValue = weaponRateOfFire();
            //	fireTimer.resetTimer();
            StartCoroutine(Shoot(weaponRateOfFire()));
            audio.PlayOneShot(fireExplosion);
            GameObject newShot = (GameObject)Object.Instantiate(Resources.Load(ammoType));
            newShot.tag   = "PlayerProjectile";
            newShot.layer = LayerMask.NameToLayer("PlayerProjectile");
            Projectile_Base script = newShot.GetComponent <Projectile_Base>();
            script.setProjectileDamage(weaponDamage());
            newShot.transform.position = barrelEnd.position;
            newShot.transform.rotation = barrelEnd.rotation;
            return(1);
        }
        else
        {
            return(0);
        }
    }
Esempio n. 2
0
    void SnapProjectileDirectionXZ(Projectile_Base p, float threshold)
    {
        Vector3 d = p.MoveDirection;

        if (Vector3.Angle(d, Vector3.left) < threshold)
        {
            d = Vector3.left;
            SnapProjectilePositionZ(p);
        }
        if (Vector3.Angle(d, Vector3.right) < threshold)
        {
            d = Vector3.right;
            SnapProjectilePositionZ(p);
        }

        if (Vector3.Angle(d, Vector3.back) < threshold)
        {
            d = Vector3.back;
            SnapProjectilePositionX(p);
        }
        if (Vector3.Angle(d, Vector3.forward) < threshold)
        {
            d = Vector3.forward;
            SnapProjectilePositionX(p);
        }

        if (d != p.MoveDirection)
        {
            p.PointInDirection(d);
            p.MoveDirection = d;
        }
    }
Esempio n. 3
0
    override protected Projectile_Base FireProjectile(Vector3 dir)
    {
        Projectile_Base p = base.FireProjectile(dir);

        MoveProjectileToDropPosition(p);
        return(p);
    }
Esempio n. 4
0
    void AttackMultipleEnemies(int amount)
    {
        List <Enemy> enemyInRange = radarSystem.GetEnemyList();

        for (int i = 0; i < enemyInRange.Count; i++)
        {
            float dist1 = (enemyInRange[i].transform.position - transform.position).sqrMagnitude;
            for (int j = i + 1; j < enemyInRange.Count; j++)
            {
                float dist2 = (enemyInRange[j].transform.position - transform.position).sqrMagnitude;
                if (dist1 > dist2)
                {
                    Enemy temp = enemyInRange[i];
                    enemyInRange[i] = enemyInRange[j];
                    enemyInRange[j] = temp;
                }
            }
        }

        for (int i = 0; i < amount; i++)
        {
            if (i < enemyInRange.Count)
            {
                Projectile_Base projectile = EntityManager.S.GetEntity(projectileType) as Projectile_Base;
                projectile.transform.position = transform.position;
                projectile.transform.rotation = transform.rotation; // becuase the tower is already looking at the enemy
                projectile.FireProjectile(enemyInRange[i].transform, cur_damage, cur_attkRange);
            }
        }
        SetAnimation_Attack();
    }
Esempio n. 5
0
    virtual protected Projectile_Base FireProjectile(Vector3 dir)
    {
        GameObject g = Instantiate(_projectilePrefab) as GameObject;

        Projectile_Base p = g.GetComponent <Projectile_Base>();

        p.onProjectileWillBeDestroyed_Callback = OnProjectileWillBeDestroyed;


        Transform t = p.transform;

        t.SetParent(CommonObjects.ProjectilesContainer);

        Vector3 offset = p.Length * 0.5f * dir;

        t.position = MuzzlePosition + offset;


        p.PointInDirection(dir);
        p.MoveDirection = dir;

        if (_snapFireDirectionToXZ)
        {
            SnapProjectileDirectionXZ(p, SNAP_PROJECTILE_DIR_THRESHOLD);
        }


        _firedProjectiles.Add(p);

        return(p);
    }
Esempio n. 6
0
    public override void Attack(BaseGameEntity target)
    {
        Projectile_Base projectile = EntityManager.S.GetEntity(projectileType) as Projectile_Base;

        projectile.transform.position = transform.position;
        projectile.transform.rotation = transform.rotation; // becuase the tower is already looking at the enemy
        projectile.FireProjectile(target.transform, cur_damage, cur_attkRange);
        SetAnimation_Attack();
    }
Esempio n. 7
0
    override protected void OnProjectileWillBeDestroyed(Projectile_Base sender)
    {
        base.OnProjectileWillBeDestroyed(sender);

        if (spawnFlame)
        {
            DoSpawnFlame(sender.transform.position);
        }
    }
Esempio n. 8
0
    IEnumerator StartCharge()
    {
        lookAtTarget = false;

        audioSource.Play();
        charge1.Play();
        charge2.Play();

        float endTime = Time.time + chargeTime;

        while (true)
        {
            if (endTime < Time.time)
            {
                break;
            }

            yield return(null);
        }

        charge1.Stop();
        charge2.Stop();

        Enemy target = radarSystem.GetTarget();

        if (target != null)
        {
            fire.Play();
            SetAnimation_Attack();

            endTime = Time.time + laserDuration;
            while (true)
            {
                if (endTime < Time.time)
                {
                    break;
                }

                Projectile_Base projectile = EntityManager.S.GetEntity(projectileType) as Projectile_Base;
                Vector3         pos        = transform.position;
                pos.y += 0.5f;                                                                                  // increase Y pos, so the laser is above the ground
                projectile.transform.position = pos;
                projectile.transform.rotation = transform.rotation;                                             // becuase the tower is already looking at the enemy
                projectile.FireProjectile(target.transform, cur_damage / laserBulletsPerAttack, cur_attkRange); // Laser projectile doesn't use target, so we don't need to check null
                yield return(new WaitForSeconds(laserFrequency));
            }
        }
        else
        {
            audioSource.Stop();
        }
        yield return(new WaitForSeconds(chargeTime));

        audioSource.Stop();
        lookAtTarget = true;
    }
Esempio n. 9
0
    void MoveProjectileToDropPosition(Projectile_Base p)
    {
        float actualDropDistance = dropDistance;

        if (modifyDropDistIfRaycastHit)
        {
            float halfLength = p.Length * 0.5f;

            Ray        ray = new Ray(p.transform.position, p.MoveDirection);
            RaycastHit hitInfo;
            bool       hit = Physics.Raycast(ray, out hitInfo, dropDistance + halfLength);

            actualDropDistance = hit ? (hitInfo.distance - halfLength) : dropDistance;
        }

        p.transform.position += p.MoveDirection * actualDropDistance;
    }
Esempio n. 10
0
 virtual protected void OnProjectileWillBeDestroyed(Projectile_Base sender)
 {
     _firedProjectiles.Remove(sender);
 }
Esempio n. 11
0
    void SnapProjectilePositionZ(Projectile_Base p)
    {
        Transform t = p.transform;

        t.SetZ(Mathf.Floor(t.position.z + 0.5f));
    }