-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEnemy_behaviour.cs
132 lines (106 loc) · 2.93 KB
/
Enemy_behaviour.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy_behaviour : MonoBehaviour
{
#region Public Variables
public Transform rayCast;
public LayerMask rayCastMask;
public float rayCastLength;
public float attackDistance; //distancia minima pro ataque
public float moveSpeed;
public float timer; // tempo entre os ataques
#endregion
#region Private Variables
private RaycastHit2D hit;
private GameObject target;
private Animator anim;
private float distance;
private bool attackMode;
private bool inRange;
private bool cooling;
private float intTimer;
#endregion
void awake()
{
intTimer = timer;
anim = GetComponent<Animator>();
}
void Update()
{
if(inRange)
{
hit = Physics2D.Raycast (rayCast.position, Vector2.left, rayCastLength, rayCastMask);
RaycastDebugger();
}
//animation
if(hit.collider != null)
{
EnemyLogic();
}
else if(hit.collider == null)
{
inRange = false;
}
if(inRange == false)
{
anim.SetBool("canWalk", false);
StopAttack();
}
}
void OnTriggerEnter2D(Collider2D trig)
{
if(trig.gameObject.tag == "Player")
{
target = trig.gameObject;
inRange = true;
}
}
void EnemyLogic()
{
distance = Vector2.Distance(transform.position, target.transform.position);
if(distance > attackDistance)
{
move();
StopAttack();
}
else if(attackDistance >= distance && cooling == false)
{
Attack();
}
if (cooling)
{
anim.SetBool("Attack", false);
}
}
void move()
{
anim.SetBool("CanWalk", true);
if(!anim.GetCurrentAnimatorStateInfo(0).IsName("Skel_attack"))
{
Vector2 targetPosition = new Vector2(target.transform.position.x, transform.position.y);
transform.position = Vector2.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime);
}
}
void Attack()
{
timer = intTimer;
attackMode = true;
anim.SetBool("CanWalk", false);
anim.SetBool("Attack", true);
}
void StopAttack()
{
cooling = false;
attackMode = false;
anim.SetBool("Attack", false);
}
void RaycastDebugger()
{
if(distance > attackDistance)
{
Debug.DrawRay(rayCast.position, Vector2.left * rayCastLength, Color.red);
}
Debug.DrawRay(rayCast.position, Vector2.left * rayCastLength, Color.green);
}
}