Esempio n. 1
0
    void Explode()
    {
        Collider[] colliders = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider nearbyObject in colliders)
        {
            Rigidbody rb = nearbyObject.GetComponent <Rigidbody>();
            if (rb != null)
            {
                rb.AddExplosionForce(force, transform.position, radius);
            }

            Destructible ds = nearbyObject.GetComponent <Destructible>();
            if (ds != null && (Random.Range(1, 100) < 40))
            {
                ds.Break();
            }

            PlayerHealth ph = nearbyObject.GetComponent <PlayerHealth>();
            if (ph != null)
            {
                ph.TakeDamage(20);
            }

            SC_NPCEnemy eh = nearbyObject.GetComponent <SC_NPCEnemy>();
            if (eh != null)
            {
                eh.ApplyDamage(100);
            }
        }
        foreach (GameObject gmObj in particleSystems)
        {
            Instantiate(gmObj, gameObject.transform.position, gameObject.transform.rotation);
            Destroy(gmObj, 5);
        }
    }
Esempio n. 2
0
    void Shot()
    {
        muzzleFlash.Play();
        GameObject cartrige = Instantiate(cartrigePrefab, cartrigeEjector.position, cartrigeEjector.rotation);

        Destroy(cartrige, 2f);
        Rigidbody rb = cartrige.GetComponent <Rigidbody>();

        rb.AddForce(cartrigeEjector.right * (cartrigeForce + Random.Range(0, 0.2f)), ForceMode.Impulse);
        rb.AddTorque(Random.Range(-15, 15), Random.Range(-15, 15), 0, ForceMode.Impulse);
        Shoot.pitch = Random.Range(1.3f, 1.5f);
        Shoot.Play();
        RaycastHit hit;

        if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
        {
            Destructible target       = hit.transform.GetComponent <Destructible>();
            PlayerHealth targetPlayer = hit.transform.GetComponent <PlayerHealth>();    //Optimize******************************************************
            SC_NPCEnemy  targetEnemy  = hit.transform.GetComponent <SC_NPCEnemy>();
            ButtonScript button       = hit.transform.GetComponent <ButtonScript>();
            if (target != null)
            {
                target.TakeDamage(damage);
            }
            if (targetPlayer != null)
            {
                targetPlayer.TakeDamage(damage);
            }
            if (targetEnemy != null)
            {
                targetEnemy.ApplyDamage(damage);
            }
            if (hit.rigidbody != null)
            {
                hit.rigidbody.AddForce(-hit.normal * impactForce);
            }
            if (button != null)
            {
                button.ClickButton();
            }

            Instantiate(impactEffect1, hit.point, Quaternion.LookRotation(hit.normal));
            Instantiate(impactEffect2, hit.point, Quaternion.LookRotation(hit.normal));
            Instantiate(impactEffect3, hit.point, Quaternion.LookRotation(hit.normal));
            GameObject bulletHole = Instantiate(bulletHolePrefab, hit.point, Quaternion.LookRotation(hit.normal));
            bulletHole.transform.parent = hit.transform;

            Collider[] colliders = Physics.OverlapSphere(hit.point, radius);
            foreach (Collider nearbyObject in colliders)
            {
                Rigidbody rd = nearbyObject.GetComponent <Rigidbody>();
                if (rd != null)
                {
                    rd.AddExplosionForce(force, hit.point, radius);
                }
            }
        }
    }
Esempio n. 3
0
    // Update is called once per frame
    void Update()
    {
        if (startingGame)
        {
            if (waitingForWave)
            {
                if (newWaveTimer >= 0)
                {
                    newWaveTimer -= Time.deltaTime;
                }
                else
                {
                    WaveStart.Play(0);
                    //Initialize new wave
                    enemiesToEliminate  = waveNumber * enemiesPerWave;
                    enemiesEliminated   = 0;
                    totalEnemiesSpawned = 0;
                    waitingForWave      = false;
                }
            }
            else
            {
                if (Time.time > nextSpawnTime)
                {
                    nextSpawnTime = Time.time + spawnInterval;

                    //Spawn enemy
                    if (totalEnemiesSpawned < enemiesToEliminate)
                    {
                        Transform   randomPoint = spawnPoints[Random.Range(0, spawnPoints.Length)];
                        GameObject  enemy       = Instantiate(enemyPrefab, randomPoint.position, Quaternion.identity);
                        SC_NPCEnemy npc         = enemy.GetComponent <SC_NPCEnemy>();
                        npc.playerTransform = player.transform;
                        npc.es = this;
                        totalEnemiesSpawned++;
                    }
                }
            }
        }

        if (player.playerHP <= 0)
        {
            startingGame = false;
            gameOver     = true;
            if (isDead == false)
            {
                GameAudio.Stop();
                GameOverAudio.Play();
                RestartBox.Show();
                isDead = true;
            }
            if (Input.GetKeyDown(KeyCode.Space))
            {
                restart();
            }
        }
    }
Esempio n. 4
0
    public void EnemyEliminated(SC_NPCEnemy enemy)
    {
        enemiesEliminated++;

        if (enemiesToEliminate - enemiesEliminated <= 0)
        {
            //Start next wave
            newWaveTimer   = 10;
            waitingForWave = true;
            waveNumber++;
        }
    }
Esempio n. 5
0
    // Update is called once per frame
    void Update()
    {
        if (waitingForWave)
        {
            if (newWaveTimer >= 0)
            {
                newWaveTimer -= Time.deltaTime;
            }
            else
            {
                //Initialize new wave
                enemiesToEliminate  = waveNumber * enemiesPerWave;
                enemiesEliminated   = 0;
                totalEnemiesSpawned = 0;
                waitingForWave      = false;
            }
        }
        else
        {
            if (Time.time > nextSpawnTime)
            {
                nextSpawnTime = Time.time + spawnInterval;

                //Spawn enemy
                if (totalEnemiesSpawned < enemiesToEliminate)
                {
                    Transform randomPoint = spawnPoints[Random.Range(0, spawnPoints.Length)];

                    GameObject  enemy = Instantiate(enemyPrefab, randomPoint.position, Quaternion.identity);
                    SC_NPCEnemy npc   = enemy.GetComponent <SC_NPCEnemy>();
                    npc.playerTransform = player.transform;
                    //npc.es = this;
                    totalEnemiesSpawned++;
                }
            }
        }

        if (playerHealth.currentHealth <= 0)
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                Scene scene = SceneManager.GetActiveScene();
                SceneManager.LoadScene(scene.name);
            }
        }
    }