148 lines
4.1 KiB
C#
148 lines
4.1 KiB
C#
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<EnemyMovement>().isEnemyMovementSocket() && hitCollider.transform.root.GetComponent<Enemy>().Alive)
|
|
{
|
|
Socket socket = GetNextSocket();
|
|
if (socket != null)
|
|
{
|
|
hitCollider.transform.root.gameObject.GetComponent<EnemyMovement>().SetEnemySocket(socket);
|
|
socket.setIsSocketed(true);
|
|
socket.setEnemyGameobject(hitCollider.transform.root.gameObject.GetComponent<EnemyMovement>());
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool AnySocketHasEnnemy()
|
|
{
|
|
for (int i = 0; i < socketSlots.Length; i++)
|
|
{
|
|
if (socketSlots[i].GetComponent<Socket>().getIsSocketed())
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
Socket GetNextSocket()
|
|
{
|
|
for (int i = 0; i < socketSlots.Length; i++)
|
|
{
|
|
if (!socketSlots[i].GetComponent<Socket>().getIsSocketed())
|
|
{
|
|
return socketSlots[i].GetComponent<Socket>();
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
void getSpeedMultiplier()
|
|
{
|
|
int count = 0;
|
|
for (int i = 0; i < socketSlots.Length; i++)
|
|
{
|
|
if (socketSlots[i].GetComponent<Socket>().getIsSocketed() && socketSlots[i].GetComponent<Socket>().getEnemyVariablePushing())
|
|
{
|
|
count++;
|
|
}
|
|
}
|
|
|
|
speed = 0.1f * count;
|
|
}
|
|
}
|