Untitled

 avatar
unknown
plain_text
2 years ago
5.2 kB
17
Indexable
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.Mathematics;
using UnityEditor;
using UnityEngine;
public class Enemy : MonoBehaviour
{
    [SerializeField] private Rigidbody2D _rigidbody2D;
    [SerializeField] private float m_Seepd;
    [SerializeField] private Animator m_Animator;
    [SerializeField] private Transform m_Homego;
    [SerializeField] private float Maxrange;
    [SerializeField] private float Minrange;
    
    private Transform target;
    private bool m_Gethit;
    private int m_ChangeParamHash;
    private int m_StateParamHash;
    private Vector3 m_StartPosition;
    private State m_CurrentState;
    private int m_Direction = 1;
    
    public enum State
    {
        idie,
        run,
        die,
        die2,
        attack1,
        attack2,
        perry,
    }
    
    public void GoHomeEnemy()
    {
        transform.position = Vector3.MoveTowards(transform.position, m_Homego.transform.position, m_Seepd * Time.deltaTime);
        var dir = m_Homego.position - transform.position;
        transform.localScale = new Vector3(-dir.x >= 0 ? (float)-4.5 : (float)4.5, (float)4.5, 1);
        
        if(Vector3.Distance(transform.position, m_Homego.position) == 0)
        {
            SetState(State.idie);
        }
        
    }
    
    public void FollowPlayer()
    {

        transform.position = Vector3.MoveTowards(transform.position, target.transform.position, m_Seepd * Time.deltaTime);
        var dir = target.position - transform.position ;
        transform.localScale = new Vector3(-dir.x >= 0 ? (float)-4.5 : (float)4.5, (float)4.5, 1);
        SetState(State.run);

    }
    
    void Start()
    {
        m_ChangeParamHash = Animator.StringToHash("Changer");
        m_StateParamHash = Animator.StringToHash("State");
        m_StartPosition = transform.position;
        SetState(State.idie);
        target = FindObjectOfType<Player>().transform;
        StartCoroutine(UpdateAI());
    }
    
    private void Update()
    {
        if (Vector3.Distance(target.position, transform.position) <= Maxrange && Vector3.Distance(target.position, transform.position) >= Minrange)
        {
            FollowPlayer();
       }
        else if(Vector3.Distance(target.position, transform.position) >= Maxrange)
        {
            GoHomeEnemy();
        }
    }
    
    private IEnumerator UpdateAI()
    {
        while (true)
        {
            
            if (m_CurrentState == State.die)
            {
               yield return new WaitForSeconds(0.5f);
                SetState(State.run);
                m_Gethit = false;
                Debug.Log("fdjfjdfdfdf");
               
                  
                
            }
            
            yield return  null;
        }
    }
    private void OnTriggerEnter2D(Collider2D col)
    {
        if (m_Gethit)
        {
            return;   
        }
        
        if (col.CompareTag("AttackPlayer1"))
        {
            SetState(State.die);
            m_Gethit = true;
        }
    }
    
    private void SetState(State state)
    {
        m_CurrentState = state;

        switch (state)
        {
            case State.idie:
                EnemyIdie();
                break;
            case State.run:
                EnemyRun();
                break;
            case State.die:
                EnemyDie();
                break;
            case State.die2:
                EnemyDie2();
                break;
            case State.perry:
                EnemyPerry();
                break;
            case State.attack1:
                EnemyAttack1();
                break;
            case State.attack2:
                EnemyAttack2();
                break;
        }
    }
    [ContextMenu("idie")]
    private void EnemyIdie()
    {
        m_Animator.SetTrigger(m_ChangeParamHash);
        m_Animator.SetInteger(m_StateParamHash, 7);
    }
    [ContextMenu("die1")]
    private void EnemyDie()
    {
        m_Animator.SetTrigger(m_ChangeParamHash);
        m_Animator.SetInteger(m_StateParamHash, 6);
    }
    [ContextMenu("die2")]
    private void EnemyDie2()
    {
        m_Animator.SetTrigger(m_ChangeParamHash);
        m_Animator.SetInteger(m_StateParamHash, 3);
    }
    [ContextMenu("attack1")]
    private void EnemyAttack1()
    {
        m_Animator.SetTrigger(m_ChangeParamHash);
        m_Animator.SetInteger(m_StateParamHash,2 );
    }
    [ContextMenu("attack2")]
    private void EnemyAttack2()
    {
        m_Animator.SetTrigger(m_ChangeParamHash);
        m_Animator.SetInteger(m_StateParamHash,5 );
    }
    [ContextMenu("run")]
    private void EnemyRun()
    {
        m_Animator.SetTrigger(m_ChangeParamHash);
        m_Animator.SetInteger(m_StateParamHash,1 );
    }
    
    [ContextMenu("perry")]
    private void EnemyPerry()
    {
        m_Animator.SetTrigger(m_ChangeParamHash);
        m_Animator.SetInteger(m_StateParamHash,4 );
    }
}
Editor is loading...