SavePoge/Assets/Scripts/Enemy.cs
2023-02-05 19:14:04 +05:30

77 lines
2.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float moveSpeed = 0.1f;
public bool canSeePlayer = false;
public float distanceThreshold = 0.1f;
public float playerDistanceThreshold = 0.1f;
public float dodgeTime = 0.2f;
float dodgeTimer = 0;
public LayerMask linecastLayer;
private void Awake()
{
dodgeTimer = dodgeTime;
}
Color debugColor = Color.white;
void FixedUpdate()
{
if (GameManager.Player == null) { return; }
RaycastHit2D hit = Physics2D.Linecast(transform.position, GameManager.Player.position, linecastLayer);
if (hit.collider == null) {
canSeePlayer = true;
} else if (hit.collider.transform == GameManager.Player.transform)
{
canSeePlayer = true;
}
else if(hit.collider.tag == "Obstacle")
{
canSeePlayer = false;
float distanceToBarrier = Vector2.Distance(transform.position, hit.point);
if (distanceToBarrier < distanceThreshold)
{
dodgeTimer = 0;
}
Debug.DrawLine(transform.position, hit.point, debugColor);
}
if (canSeePlayer)
{
if (Vector2.Distance(GameManager.Player.position, transform.position) < playerDistanceThreshold)
{
GameManager.GameOver();
return;
}
}
Vector3 direction = (GameManager.Player.position - new Vector3(0,0.5f,0) - transform.position).normalized;
float rot_z = Mathf.Atan2(direction.y,direction.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0,0,rot_z+180);
if (dodgeTimer < dodgeTime)
{
dodgeTimer += Time.deltaTime;
if (dodgeTimer > dodgeTime/100f || true)
{
debugColor = Color.red;
transform.Translate(new Vector3(-direction.x, direction.y) * moveSpeed * 1.2f, Space.World);
return;
}
}
transform.Translate(direction * moveSpeed, Space.World);
debugColor = Color.white;
}
}