using System.Configuration;
using System.Security.Cryptography;
using System.Threading;
using UnityEngine;
public class FollowPlayer : MonoBehaviour
{
private Vector2 playerPos;
private Vector2 leftplayerPos;
private Vector2 newPos;
private Vector2 RandomRange;
private float RandomX;
private float RRayDist;
private float LRayDist;
public float Xpos;
public float Ypos;
public Vector2 WallCheck;
private int leftLayer;
private int rightLayer;
public Health healthScript;
private Vector3 playerposition;
public GameObject player;
private float hitCheck;
public int health;
public int numOfHearts;
public bool GetHit;
public GameObject enemy;
public float PunchForce;
private ParticleSystem part;
public List<ParticleCollisionEvent> collisionEvents;
Rigidbody2D rb;
void Start()
{
InvokeRepeating("PlayerSearch", 1f, 1f);
InvokeRepeating("DamagePlayer", 1.5f, 1.5f);
RandomRange = new Vector2(Mathf.Clamp(Xpos + Random.Range(-30f, 30f), 18.67f, 91f), Ypos);
rb = GetComponent<Rigidbody2D>();
}
void PlayerSearch ()
{
RaycastHit2D leftSearch = Physics2D.Raycast(this.gameObject.transform.position, Vector2.left);
RaycastHit2D rightSearch = Physics2D.Raycast(this.gameObject.transform.position, Vector2.right);
RRayDist = rightSearch.distance;
LRayDist = leftSearch.distance;
rightLayer = rightSearch.transform.gameObject.layer;
leftLayer = leftSearch.transform.gameObject.layer;
playerPos = new Vector2(rightSearch.point.x, this.gameObject.transform.position.y);
leftplayerPos = new Vector2(leftSearch.point.x, this.gameObject.transform.position.y);
}
void RandomMovement()
{
if(transform.position.x > RandomRange.x)
{
transform.rotation = Quaternion.Euler(transform.rotation.x, 0, transform.rotation.z);
} else
{
transform.rotation = Quaternion.Euler(transform.rotation.x, 180, transform.rotation.z);
}
transform.position = Vector2.MoveTowards(this.gameObject.transform.position, RandomRange, 6f * Time.deltaTime);
if (new Vector2(transform.position.x, transform.position.y) == RandomRange)
{
RandomX = Mathf.Clamp(Xpos - Random.Range(-30f, 30f), 18.67f, 91f);
RandomRange = new Vector2(RandomX, Ypos);
}
}
void Update()
{
playerposition = GameObject.FindGameObjectWithTag("Player").transform.position;
if (rightLayer == LayerMask.NameToLayer("Player"))
{
if (RRayDist <= 10f)
{
newPos = Vector2.MoveTowards(this.gameObject.transform.position, playerPos, 6f * Time.deltaTime);
transform.position = newPos;
transform.rotation = Quaternion.Euler(transform.rotation.x, 180, transform.rotation.z);
} else
{
RandomMovement();
}
}
else if (leftLayer == LayerMask.NameToLayer("Player"))
{
if (LRayDist <= 10f)
{
newPos = Vector2.MoveTowards(this.gameObject.transform.position, leftplayerPos, 6f * Time.deltaTime);
transform.position = newPos;
transform.rotation = Quaternion.Euler(transform.rotation.x, 0, transform.rotation.z);
} else
{
RandomMovement();
}
}
else if (leftLayer != LayerMask.NameToLayer("Player") && rightLayer != LayerMask.NameToLayer("Player"))
{
RandomMovement();
}
if (health > numOfHearts)
{
health = numOfHearts;
}
if(health <= 0)
{
Destroy(this.gameObject);
// Add force Animation
// Add Death Animation
}
}
void DamagePlayer()
{
hitCheck = Mathf.Abs(playerposition.x - transform.position.x);
if (hitCheck < 0.9f)
{
healthScript.Damage();
}
}
public void DamageEnemy()
{
health -= 1;
if(player.transform.rotation.eulerAngles.y != 180f)
{
rb.AddForce(new Vector2(5, 4), ForceMode2D.Impulse);
}
else if (player.transform.rotation.eulerAngles.y == 180f)
{
rb.AddForce(new Vector2(-5, 4), ForceMode2D.Impulse);
}
}
public void DamageEnemySecondary()
{
health -= 1;
if (player.transform.rotation.eulerAngles.y != 180f)
{
rb.AddForce(new Vector2(10, 4), ForceMode2D.Impulse);
}
else if (player.transform.rotation.eulerAngles.y == 180f)
{
rb.AddForce(new Vector2(-10, 4), ForceMode2D.Impulse);
}
}
private void OnParticleCollision(GameObject enemy)
{
health -= 1;
}
}