-
Notifications
You must be signed in to change notification settings - Fork 0
/
GameObject.java
162 lines (143 loc) · 3.83 KB
/
GameObject.java
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
package objects;
import static utilz.Constants.ANI_SPEED;
import static utilz.Constants.ObjectConstants.*;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;
import main.Game;
/**
* Representa um objeto genérico no jogo, como recipientes, poções, etc.
*/
public class GameObject {
protected int x, y, objType;
protected Rectangle2D.Float hitbox;
protected boolean doAnimation, active = true;
protected int aniTick, aniIndex;
protected int xDrawOffset, yDrawOffset;
/**
* Construtor da classe GameObject.
*
* @param x A posição X do objeto.
* @param y A posição Y do objeto.
* @param objType O tipo do objeto.
*/
public GameObject(int x, int y, int objType) {
this.x = x;
this.y = y;
this.objType = objType;
}
/**
* Atualiza a contagem de animação do objeto.
*/
protected void updateAnimationTick() {
aniTick++;
if (aniTick >= ANI_SPEED) {
aniTick = 0;
aniIndex++;
if (aniIndex >= GetSpriteAmount(objType)) {
aniIndex = 0;
if (objType == BARREL || objType == BOX) {
doAnimation = false;
active = false;
}
}
}
}
/**
* Reseta os valores relacionados à animação do objeto.
*/
public void reset() {
aniIndex = 0;
aniTick = 0;
active = true;
if (objType == BARREL || objType == BOX) {
doAnimation = false;
} else {
doAnimation = true;
}
}
/**
* Inicializa a hitbox do objeto.
*
* @param width A largura da hitbox.
* @param height A altura da hitbox.
*/
protected void initHitbox(int width, int height) {
hitbox = new Rectangle2D.Float(x, y, (int) (width * Game.SCALE), (int) (height * Game.SCALE));
}
/**
* Desenha a hitbox do objeto (usado para depuração).
*
* @param g O objeto Graphics para desenho.
* @param xLvlOffset O deslocamento horizontal do nível.
*/
public void drawHitbox(Graphics g, int xLvlOffset) {
g.setColor(Color.PINK);
g.drawRect((int) hitbox.x - xLvlOffset, (int) hitbox.y, (int) hitbox.width, (int) hitbox.height);
}
/**
* Obtém o tipo do objeto.
*
* @return O tipo do objeto.
*/
public int getObjType() {
return objType;
}
/**
* Obtém a hitbox do objeto.
*
* @return A hitbox do objeto.
*/
public Rectangle2D.Float getHitbox() {
return hitbox;
}
/**
* Verifica se o objeto está ativo.
*
* @return true se o objeto estiver ativo, false caso contrário.
*/
public boolean isActive() {
return active;
}
/**
* Define se o objeto está ativo.
*
* @param active O novo estado de ativação do objeto.
*/
public void setActive(boolean active) {
this.active = active;
}
/**
* Define se o objeto está em animação.
*
* @param doAnimation true se o objeto deve estar em animação, false caso
* contrário.
*/
public void setAnimation(boolean doAnimation) {
this.doAnimation = doAnimation;
}
/**
* Obtém o deslocamento horizontal para desenho.
*
* @return O deslocamento horizontal para desenho.
*/
public int getxDrawOffset() {
return xDrawOffset;
}
/**
* Obtém o deslocamento vertical para desenho.
*
* @return O deslocamento vertical para desenho.
*/
public int getyDrawOffset() {
return yDrawOffset;
}
/**
* Obtém o índice de animação do objeto.
*
* @return O índice de animação do objeto.
*/
public int getAniIndex() {
return aniIndex;
}
}