jimmy tremblay-Bernier 86fbe09b20 initial commit
2022-03-12 20:32:56 -05:00

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;
}
}