using System.Collections; using System.Collections.Generic; using UnityEngine; public class BelierMovement : MonoBehaviour { public float speed = 0f; public float triggerRadius = 5f; private Transform target; private int wavepointIndex = 0; private bool isAnimationOnGoing = false; public Socket[] socketSlots; public Transform waypointEnd; public Transform waypointLerpStart; public Transform waypointLerpEnd; public GrandePorteState grandePorte; public int damageWeight = 1; public int timeBetweenAttack = 5; private Vector3 lerpStart = new Vector3(0,-7.45f,6.57f); private Vector3 lerpEnd = new Vector3(0,-7.45f,5.35f); private Vector3 startPos; void Start() { target = waypointEnd; } void Update() { Vector3 dir = target.position - transform.position; if(Vector3.Distance(transform.position, target.position) <= 0.8f && AnySocketHasEnnemy()) { StartCoroutine(StartBellierAnimation()); } else { transform.Translate(dir.normalized * speed * Time.deltaTime, Space.World); NearEnemy(); getSpeedMultiplier(); } } IEnumerator StartBellierAnimation() { if (!isAnimationOnGoing) { isAnimationOnGoing = true; float time = 0; startPos = new Vector3(transform.position.x, transform.position.y, transform.position.z); while(time < timeBetweenAttack) { Debug.Log("Time: " + time); if (time < 2.5f) { transform.position = Vector3.Lerp(startPos, waypointLerpEnd.position, Time.deltaTime); } else if (time < 7.5f) { transform.position = Vector3.Lerp(waypointLerpEnd.position, waypointLerpStart.position, Time.deltaTime); } else { transform.position = Vector3.Lerp(waypointLerpStart.position, startPos, Time.deltaTime); } time += Time.deltaTime; } grandePorte.TakeDamage(damageWeight); Debug.Log("START WAIT"); yield return new WaitForSeconds(timeBetweenAttack); isAnimationOnGoing = false; } } void NearEnemy() { Collider[] hitColliders = Physics.OverlapSphere(this.transform.position, triggerRadius); foreach (var hitCollider in hitColliders) { if (hitCollider.transform.root.tag == "Enemy" && !hitCollider.transform.root.GetComponent().isEnemyMovementSocket() && hitCollider.transform.root.GetComponent().Alive) { Socket socket = GetNextSocket(); if (socket != null) { hitCollider.transform.root.gameObject.GetComponent().SetEnemySocket(socket); socket.setIsSocketed(true); socket.setEnemyGameobject(hitCollider.transform.root.gameObject.GetComponent()); } return; } } } private bool AnySocketHasEnnemy() { for (int i = 0; i < socketSlots.Length; i++) { if (socketSlots[i].GetComponent().getIsSocketed()) { return true; } } return false; } Socket GetNextSocket() { for (int i = 0; i < socketSlots.Length; i++) { if (!socketSlots[i].GetComponent().getIsSocketed()) { return socketSlots[i].GetComponent(); } } return null; } void getSpeedMultiplier() { int count = 0; for (int i = 0; i < socketSlots.Length; i++) { if (socketSlots[i].GetComponent().getIsSocketed() && socketSlots[i].GetComponent().getEnemyVariablePushing()) { count++; } } speed = 0.1f * count; } }