Untitled

horrible NPC
 avatar
unknown
csharp
4 years ago
2.2 kB
9
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...