Untitled

Fail NPC
 avatar
unknown
csharp
4 years ago
6.3 kB
7
Indexable
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    public float movingSpeed = 1;
    public LayerMask blockLayer;

    private Grid grid; 
    private CircleCollider2D cc;
    private Rigidbody2D rb;
    private Vector2[] moveDirections = {Vector2.left, Vector2.right, Vector2.down, Vector2.up };
    private Vector2 moveDirection;
    public bool lisenceToSwitchDirection = true;

    private void Start()
    {
        grid = GameObject.FindObjectOfType<Grid>();
        cc = GetComponent<CircleCollider2D>();
        rb = GetComponent<Rigidbody2D>();

        cc.radius = 0.45f;
        moveDirection = moveDirections[Random.Range(0,4)];
    }

    private void Update()
    {
        wallHitDirection();

        if (lisenceToSwitchDirection)
        {
            detectDirections();
        }

        Debug.DrawRay(new Vector2(transform.position.x + 0.35f, transform.position.y), Vector2.up * 0.5f, Color.green);
        Debug.DrawRay(new Vector2(transform.position.x - 0.35f, transform.position.y), Vector2.up * 0.5f, Color.green);
        Debug.DrawRay(new Vector2(transform.position.x + 0.35f, transform.position.y), Vector2.down * 0.5f, Color.blue);
        Debug.DrawRay(new Vector2(transform.position.x - 0.35f, transform.position.y), Vector2.down * 0.5f, Color.blue);
        Debug.DrawRay(new Vector2(transform.position.x, transform.position.y + 0.35f), Vector2.left * 0.5f, Color.red);
        Debug.DrawRay(new Vector2(transform.position.x, transform.position.y - 0.35f), Vector2.left * 0.5f, Color.red);
        Debug.DrawRay(new Vector2(transform.position.x, transform.position.y + 0.35f), Vector2.right * 0.5f, Color.yellow);
        Debug.DrawRay(new Vector2(transform.position.x, transform.position.y - 0.35f), Vector2.right * 0.5f, Color.yellow);
    }

    private void FixedUpdate()
    {
        Move();
    }

    void Move()
    {
        rb.velocity = moveDirection * Time.deltaTime * movingSpeed;
    }

    void wallHitDirection()
    {
        
        if (detectDirection)
        {
            grid.GetNearestPointOnGrid(transform.position);
            moveDirection = -moveDirection;
        }

       
    }
    void detectDirections()
    {
        //When going left or right
        if (moveDirection == moveDirections[0] || moveDirection == moveDirections[1])
        {
            if (!detectUp)
            {
                grid.GetNearestPointOnGrid(transform.position);
                moveDirection = moveDirections[3];
                StartCoroutine(holdIt());
            }
            else if (!detectDown)
            {
                grid.GetNearestPointOnGrid(transform.position);
                moveDirection = moveDirections[2];
                StartCoroutine(holdIt());
            }
        }

        //When going down or up
        else if (moveDirection == moveDirections[2] || moveDirection == moveDirections[3])
        {
            if (!detectLeft)
            {
                grid.GetNearestPointOnGrid(transform.position);
                moveDirection = moveDirections[0];
                StartCoroutine(holdIt());
            }
            else if (!detectRight)
            {
                grid.GetNearestPointOnGrid(transform.position);
                moveDirection = moveDirections[1];
                StartCoroutine(holdIt());
            }
        }

       
    }

    bool detectDirection
    {
        get
        {
           return Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y), moveDirection, 0.5f, blockLayer);
   
        }
    }

    bool detectUp
    {
        get
        {
           RaycastHit2D detectUpLeft = Physics2D.Raycast(new Vector2(transform.position.x - 0.35f, transform.position.y), Vector2.up, 0.6f, blockLayer);
           RaycastHit2D detectUpRight = Physics2D.Raycast(new Vector2(transform.position.x + 0.35f, transform.position.y), Vector2.up, 0.6f, blockLayer);


            if (detectUpLeft && detectUpRight)
            {
                return true;
            }

            else
            {
                return false;
            }
        }
    }
    bool detectDown
    {
        get
        {
            RaycastHit2D detectDownLeft = Physics2D.Raycast(new Vector2(transform.position.x - 0.35f, transform.position.y), Vector2.down, 0.6f, blockLayer);
            RaycastHit2D detectDownRight = Physics2D.Raycast(new Vector2(transform.position.x + 0.35f, transform.position.y), Vector2.down, 0.6f, blockLayer);


            if (detectDownLeft && detectDownRight)
            {
                return true;
            }

            else
            {
                return false;
            }
        }
    }
    bool detectLeft
    {
        get
        {
            RaycastHit2D detectLeftUp = Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y + 0.35f), Vector2.left, 0.6f, blockLayer);
            RaycastHit2D detectLeftDown = Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y - 0.35f), Vector2.left, 0.6f, blockLayer);


            if (detectLeftUp && detectLeftDown)
            {
                return true;
            }

            else
            {
                return false;
            }
        }
    }

    bool detectRight
    {
        get
        {
            RaycastHit2D detectRightUp = Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y + 0.35f), Vector2.right, 0.6f, blockLayer);
            RaycastHit2D detectRightDown = Physics2D.Raycast(new Vector2(transform.position.x, transform.position.y - 0.35f), Vector2.right, 0.6f, blockLayer);


            if (detectRightUp && detectRightDown)
            {
                return true;
            }

            else
            {
                return false;
            }
        }
    }

    IEnumerator holdIt()
    {
        lisenceToSwitchDirection = false;
        float delay = 0.5f;

        while(delay > 0)
        {
            delay -= Time.deltaTime;
            yield return null;
        }

        lisenceToSwitchDirection = true;
    }
}
Editor is loading...