Untitled
horrible NPCunknown
csharp
4 years ago
2.2 kB
15
Indexable
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public LayerMask blockLayer;
public float dist = 1;
private Vector2[] moveDirections = { Vector2.left, Vector2.up, Vector2.right, Vector2.down };
public List<Vector2> freeSpaces = new List<Vector2>();
private Grid grid;
private void Start()
{
grid = GameObject.FindObjectOfType<Grid>();
Invoke("checkFreeSpaces", 1.0f);
}
void checkFreeSpaces()
{
for(int i = 0; i < 4; i++)
{
RaycastHit2D detectDirection = Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y), moveDirections[i], 0.75f, blockLayer);
if(!detectDirection)
{
freeSpaces.Add(moveDirections[i]);
}
}
if(freeSpaces.Count > 1)
{
StartCoroutine(moveToPosition(new Vector2(transform.position.x, transform.position.y) + freeSpaces[Random.Range(0, freeSpaces.Count)] * 1.0f));
return;
}
else if (freeSpaces.Count == 1)
{
StartCoroutine(moveToPosition(new Vector2(transform.position.x, transform.position.y) + freeSpaces[0] * 1.0f));
return;
}
else
{
print("No space to move into");
}
}
IEnumerator moveToPosition(Vector2 newPosition)
{
Vector2 startPosition = new Vector2(transform.position.x, transform.position.y);
float startTime = Time.time;
float journeyLength = Vector2.Distance(startPosition, newPosition);
while(dist > 0)
{
dist = Vector2.Distance(new Vector2(transform.position.x, transform.position.y), newPosition);
float distCovered = (Time.time - startTime) * 1;
float fractionOfJourney = distCovered / journeyLength;
transform.position = Vector2.Lerp(startPosition, newPosition, fractionOfJourney);
yield return null;
}
freeSpaces.Clear();
dist = 1;
checkFreeSpaces();
}
}Editor is loading...