using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyPatrol : MonoBehaviour { [Header("Tambourine")] [HideInInspector] public bool pinned = false; [HideInInspector] public TambourineBehavior pinnedTambourine; [Header("Horizontal")] public bool isHorizontal; public float rangeHorizontal; public float xLeft; public float xRight; public Vector2 movementVectorHorizontal = Vector2.right; [Header("Vertical")] public bool isVertical; public float rangeVertical; public float yUp; public float yDown; public Vector2 movementVectorVertical = Vector2.up; [Header("General")] public float moveSpeed; Animator animator; public bool isPlayingDefeatAnimation = false; void Awake() { animator = GetComponent(); } // Start is called before the first frame update void Start() { xLeft = transform.position.x - rangeHorizontal; xRight = transform.position.x + rangeHorizontal; yDown = transform.position.y - rangeVertical; yUp = transform.position.y + rangeVertical; movementVectorHorizontal *= moveSpeed; movementVectorVertical *= moveSpeed; } // Update is called once per frame void Update() { if (!pinned) { if (isHorizontal) { if (transform.position.x >= xRight || transform.position.x <= xLeft) { movementVectorHorizontal = -movementVectorHorizontal; GetComponent().flipX = !GetComponent().flipX; } transform.position += new Vector3(movementVectorHorizontal.x, 0, 0) * Time.deltaTime; } if (isVertical) { if (transform.position.y >= yUp || transform.position.y <= yDown) { movementVectorVertical = -movementVectorVertical; } transform.position += new Vector3(0, movementVectorVertical.y, 0) * Time.deltaTime; } } } public void TogglePin(bool isPinned, TambourineBehavior tambourine) { this.pinned = isPinned; if (isPinned) { animator.speed = 0; this.pinnedTambourine = tambourine; } else { animator.speed = 1; this.pinnedTambourine = null; } } public void DefeatEnemy() { StartCoroutine(Defeat()); } IEnumerator Defeat() { isPlayingDefeatAnimation = true; if (pinned) { pinnedTambourine.DestroySelf(); TogglePin(false, this.pinnedTambourine); } this.gameObject.GetComponent().enabled = false; animator.Play("Explosion"); float explosionTime = .25f; // print("explosiontime: " + explosionTime); this.gameObject.GetComponent().Play(); // print("reached early point"); yield return new WaitForSeconds(explosionTime); // print("reached late point"); this.gameObject.GetComponent().enabled = true; isPlayingDefeatAnimation = false; this.gameObject.SetActive(false); } void OnDrawGizmos() { Gizmos.color = Color.green; if (isHorizontal){ Gizmos.DrawLine(new Vector3(transform.position.x - rangeHorizontal, transform.position.y, transform.position.z), new Vector3(transform.position.x + rangeHorizontal, transform.position.y, transform.position.z)); } if (isVertical) { Gizmos.DrawLine(new Vector3(transform.position.x, transform.position.y - rangeVertical, transform.position.z), new Vector3(transform.position.x, transform.position.y + rangeVertical, transform.position.z)); } } }