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); }
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); } } }
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); } }
// 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(); }
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; } }
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 (); } } } }
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)); } }
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(); }