using UnityEngine.Pool; namespace UnityEngine.InputSystem.Samples.RebindUI { /// /// A simple enemy for the mini-game. /// public class Enemy : MonoBehaviour { [Tooltip("The rotation animation target")] public GameObject animationTarget; [Tooltip("The target that the enemy will seek, e.g. player transform")] public Transform target; [Tooltip("The rotation speed around the X-axis")] public float rotationSpeedX = 130.0f; [Tooltip("The rotation speed around the Y-axis")] public float rotationSpeedY = 100.0f; [Tooltip("The movement speed")] public float speed = 1.0f; [Tooltip("The explosion color")] public Color explosionColor = new Color(0.8711135f, 0.5424528f, 1.0f); public IObjectPool pool; [HideInInspector] public GameplayManager manager; private void OnCollisionEnter(Collision other) { // If we are hit by a bullet apply force if (other.gameObject.GetComponent()) { manager.KillEnemy(); manager.Explosion(animationTarget.transform, other.GetContact(0).point, 0.1f, explosionColor); pool.Release(this); } } // Update is called once per frame private void Update() { // Animate rotation if (animationTarget) { animationTarget.transform.Rotate(Vector3.up, rotationSpeedX * Time.deltaTime, Space.World); animationTarget.transform.Rotate(Vector3.right, rotationSpeedY * Time.deltaTime, Space.World); } // Animate movement towards target if (target) transform.position += (target.position - transform.position).normalized * (Time.deltaTime * speed); // Handle enemies getting lost in the world and make them wrap-around if (manager.TryTeleportOrthographicExtents(transform.position, out var result)) transform.position = result; } } }