Esempio n. 1
0
    public virtual AbstractEnemyControl getClosestPacingEnemyToPlayer()
    {
        if (enemiesPacing.Count <= 0)
        {
            // No enemies!
            return(null);
        }
        float lowestDistance = float.MaxValue;
        float testDistance;
        AbstractEnemyControl enemy = enemiesPacing[enemiesPacing.Count - 1] as AbstractEnemyControl;
        AbstractEnemyControl enemyPace;

        for (int i = enemiesPacing.Count - 1; i >= 0; i--)
        {
            enemyPace = enemiesPacing[i] as AbstractEnemyControl;
            if (enemyPace == null || enemyPace.Equals(null) || enemyPace.ToString() == "null")
            {
                enemiesPacing.RemoveAt(i);
                continue;
            }

            testDistance = Vector3.Distance(enemyPace.transform.position, player.transform.position);
            if (testDistance < lowestDistance)
            {
                lowestDistance = testDistance;
                enemy          = enemyPace;
            }
        }
        return(enemy);
    }
Esempio n. 2
0
    void OnTriggerEnter2D(Collider2D other)
    {
        Debug.Log("Hit a thing! " + other);
        if (hitSplat == null)
        {
            hitSplat = GameObject.Find("HitSplat");
            Debug.Log(this + " - needs HitSplat.");
        }

        AbstractEnemyControl enemy = other.GetComponent <AbstractEnemyControl> ();

        if (enemy)
        {
            // Hit an enemy! Do death!
            enemy.damage(damage, type, knockback);
            GameObject splat = Instantiate(hitSplat) as GameObject;
            splat.transform.parent   = enemy.transform;
            splat.transform.position = enemy.transform.position;
            splat.transform.Translate(0, 1, -1);
        }
        else
        {
            AbstractBossControl boss = other.GetComponent <AbstractBossControl> ();
            if (boss)
            {
                // Hit a boss! Do death!
                boss.damage(damage, type, knockback);
                GameObject splat = Instantiate(hitSplat) as GameObject;
                splat.transform.parent   = boss.transform;
                splat.transform.position = boss.transform.position;
                splat.transform.Translate(0, 1, -1);
            }
        }
    }
Esempio n. 3
0
 public virtual void EnemyGotStunned(AbstractEnemyControl enemy)
 {
     // Enemy got stunned. If he was active, return him to the pacing array. If he's still the closest, he'll get converted back in a heartbeat.
     if (enemiesAttacking.Contains(enemy))
     {
         enemiesPacing.Add(enemy);
         enemiesAttacking.Remove(enemy);
         AbstractEnemyControl.EnemyStates state = Random.value >= 0.5f ? AbstractEnemyControl.EnemyStates.paceBack : AbstractEnemyControl.EnemyStates.paceForth;
         enemy.setEnemyState(state);
         enemy.setBaseState(state);
     }
 }
Esempio n. 4
0
    // Update is called once per frame
    public virtual void Update()
    {
        if (enemyCount > 0)
        {
            for (var i = spawns.Length - 1; i >= 0; i--)
            {
                if (spawns [i].hasMissingEnemy)
                {
                    GameObject           newEnemy   = spawns [i].spawnEnemy();
                    AbstractEnemyControl newControl = newEnemy.GetComponent <AbstractEnemyControl>();
                    enemiesPacing.Add(newControl);
                    newControl.setBaseState(Random.value >= 0.5f ? AbstractEnemyControl.EnemyStates.paceBack : AbstractEnemyControl.EnemyStates.paceForth);
                    enemyCount--;
                    currentEnemyCount++;
                    if (enemyCount <= 0)
                    {
                        return;
                    }
                }
            }
        }
        else
        {
            bool hasEnemy = false;
            for (var i = spawns.Length - 1; i >= 0; i--)
            {
                if (!spawns [i].hasNoEnemy)
                {
                    hasEnemy = true;
                }
            }
            if (!hasEnemy)
            {
                _anim.SetTrigger("Complete");
                timer -= 1 * Time.deltaTime;
                if (timer <= 0)
                {
                    SavePlayerStats();
                    timer = 0;
                    Resources.UnloadUnusedAssets();
                    Application.LoadLevel(nextLevel);
                }
            }
        }

        UpdateEnemies();
    }
Esempio n. 5
0
    void OnTriggerExit2D(Collider2D other)
    {
        AbstractEnemyControl enemy = other.GetComponent <AbstractEnemyControl>();

        if (enemy && enemy.inMeleeRange)
        {
            if (other.transform.position.x > _pos.x)
            {
                inRangeRight = false;
            }
            if (other.transform.position.x < _pos.x)
            {
                inRangeLeft = false;
            }
            somethingInRange   = false;
            enemy.inMeleeRange = false;
        }
    }
Esempio n. 6
0
 public override void OnTriggerEnter2D(Collider2D collider)
 {
     if (state == MermaidState.fly)
     {
         Debug.Log("What Did I Hit? " + collider.tag);
         AbstractClass ac = collider.GetComponent <AbstractClass> ();
         if (ac != null)
         {
             AbstractEnemyControl ec = collider.GetComponent <AbstractEnemyControl> ();
             if (ec != null)
             {
                 // Give pain and bounce.
                 ec.damage(damage, AbstractDamageCollider.DamageType.heavy, knockback);
                 //state = MermaidState.explode;
                 //explode ();
             }
         }
     }
 }
Esempio n. 7
0
    public virtual void enemyDied(AbstractEnemyControl enemy)
    {
        Debug.Log("Remove Enemy: " + enemy);

        // Only works if this is a registered enemy.
        if (enemiesPacing.Contains(enemy) || enemiesAttacking.Contains(enemy))
        {
            // Increase charge bar.
            if (chargeBar != null && player.earnKills)
            {
                chargeBar.IncreaseChargePercentage(20);
            }
            killCount++;
            currentEnemyCount--;

            // Clean up enemies.
            enemiesPacing.Remove(enemy);
            enemiesAttacking.Remove(enemy);
        }
    }
    public override void enemyDied(AbstractEnemyControl enemy)
    {
        Debug.Log("Remove Enemy: " + enemy);

        // Increase charge bar.
        if (enemiesPacing.Contains(enemy) || enemiesAttacking.Contains(enemy))
        {
            if (chargeBar != null && player.earnKills)
            {
                chargeBar.IncreaseChargePercentage(20);
            }
            killCount++;
            currentEnemyCount--;

            // Clean up enemies.
            enemiesPacing.Remove(enemy);
            enemiesAttacking.Remove(enemy);

            StartCoroutine(phaseEnemyAway(enemy));
        }
    }
Esempio n. 9
0
    public virtual IEnumerator phaseEnemyAway(AbstractEnemyControl illusion)
    {
        float l = 1;

        SpriteRenderer[] sprites = illusion.GetComponentsInChildren <SpriteRenderer>();
        SpriteRenderer   sprite;

        for (float i = 0; i < l; i += .03f)
        {
            for (int j = sprites.Length - 1; j >= 0; j--)
            {
                sprite = sprites[j];
                if (sprite == null)
                {
                    continue;
                }
                sprite.transform.Translate(Random.Range(-i, i), Random.Range(-i, i), 0);
                sprite.GetComponent <Renderer>().material.color = new Color(0, 0, 0, l - i);
            }
            yield return(new WaitForSeconds(.01f));
        }
        Destroy(illusion.gameObject);
    }
    public override void Update()
    {
        if (_player != null && _player.playerHealth <= 0)
        {
            ActivateScreen();
        }

        // Just keep spawning enemies.
        if (currentEnemyCount < enemyCount)
        {
            // Spawn enemies one at a time, cycling through the index.
            int i = spawnIndex;
            spawnIndex = (spawnIndex + 1) % spawns.Length;

            // Only spawn if the spawner doesn't have the max.
            if (spawns[i].hasMissingEnemy)
            {
                currentEnemyCount++;
                GameObject           newEnemy   = spawns[i].spawnEnemy();
                AbstractEnemyControl newControl = newEnemy.GetComponent <AbstractEnemyControl>();
                enemiesPacing.Add(newControl);
                newControl.setBaseState(Random.value >= 0.5f ? AbstractEnemyControl.EnemyStates.paceBack : AbstractEnemyControl.EnemyStates.paceForth);

                // Make enemies go crazy upon spawning if dieToWin.
                if (dieToWin)
                {
                    GameObject[] enemies = spawns[i].getEnemies();
                    for (int j = enemies.Length - 1; j >= 0; j--)
                    {
                        if (enemies[j] != null)
                        {
                            Clown clown = (enemies[j] as GameObject).GetComponent <Clown>();
                            if (clown == null)
                            {
                                continue;
                            }
                            clown.setShudder(10);
                            clown.setPhaseChance(.3f);
                            clown.setEnemyDamage(10);
                            clown.setMoveSpeed(2f);
                        }
                    }
                }
            }
        }

        timePassed += Time.deltaTime;

        if (enemyCount >= 10)
        {
            // Boss time.
            if (!bossSpawned)
            {
                if (timePassed % timeToAdvance < timePassed)
                {
                    // Hit a 30-second mark. Spawn the boss.
                    GameObject bossObj = Instantiate(boss.gameObject);

                    // Boss is placed in GameController.
                    bossObj.transform.parent = transform;

                    // Boss has 2 spawn points. Spawn wherever it's farthest from the player.
                    if (Vector3.Distance(player.transform.position, bossSpawnCenter.position) > Vector3.Distance(player.transform.position, bossSpawnRight.position))
                    {
                        bossObj.transform.position = bossSpawnCenter.transform.position;
                    }
                    else
                    {
                        bossObj.transform.position = bossSpawnRight.transform.position;
                    }

                    timePassed  = 0;
                    bossSpawned = true;
                }
            }
            else
            {
                // Boss time update.
            }
        }
        else if (timePassed % timeToAdvance < timePassed)
        {
            // Hit a 30-second mark. Add one to the adCount.
            timePassed -= timeToAdvance;
            enemyCount++;
        }

        UpdateEnemies();
    }