using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyController : MonoBehaviour, IPooledObject{ public float speed; public GameObject enemy; public GameObject spawnParticles; public Color level1Color; public Color level2Color; public Color level3Color; GameController gameController; Animator anim; bool ready; bool spawned; BoxCollider2D boxCol; Rigidbody2D rb2d; Transform target; Vector2 targetPos; public void OnObjectSpawn(){ gameController = FindObjectOfType(); if(gameController.level == 1 || gameController.level == 0){ GetComponentInChildren().color = level1Color; ParticleSystem ps = spawnParticles.GetComponent(); var main = ps.main; main.startColor = level1Color; } if (gameController.level == 2){ GetComponentInChildren().color = level2Color; ParticleSystem ps = spawnParticles.GetComponent(); var main = ps.main; main.startColor = level2Color; } if (gameController.level == 3){ GetComponentInChildren().color = level3Color; ParticleSystem ps = spawnParticles.GetComponent(); var main = ps.main; main.startColor = level3Color; } anim = GetComponent(); anim.SetBool("Spawned", false); target = GameObject.FindGameObjectWithTag("Player").GetComponent(); rb2d = GetComponent(); boxCol = GetComponentInChildren(); boxCol.enabled = false; spawnParticles.SetActive(true); spawnParticles.GetComponent().Play(); ready = false; spawned = false; Invoke(nameof(StopAnimation), 1f); Invoke(nameof(Ready), 2f); } // Update is called once per frame void Update(){ if (ready){ targetPos = target.position - transform.position; float rotZ = Mathf.Atan2(targetPos.y, targetPos.x) * Mathf.Rad2Deg; enemy.transform.rotation = Quaternion.Euler(0f, 0f, rotZ); }else if (spawned){ Vector2 targetPos = target.transform.position - transform.position; float rotZ = Mathf.Atan2(targetPos.y, targetPos.x) * Mathf.Rad2Deg; enemy.transform.rotation = Quaternion.Euler(0f, 0f, rotZ); } } void FixedUpdate(){ if (ready){ rb2d.MovePosition(rb2d.position + (targetPos.normalized * speed * Time.fixedDeltaTime)); } } void OnTriggerEnter2D(Collider2D col){ if (col.CompareTag("Bullet") || col.CompareTag("BigBullet")){ ScreenShake.Shake(1f, .15f); AudioManager.instance.Play("EnemyDeath"); ObjectPooler.Instance.SpawnFromPool("EnemyDeath", col.transform.position, Quaternion.identity); gameObject.SetActive(false); } } #region OnSpawn void StopAnimation(){ anim.SetBool("Spawned", true); } void Ready(){ spawned = true; Invoke(nameof(StartRunning), 0.5f); Invoke(nameof(EnableCollider), 0.25f); } void EnableCollider(){ boxCol.enabled = true; } void StartRunning(){ ready = true; } #endregion }