Skip to content

Commit b610b4d

Browse files
committed
Code refactor of UI class.
1 parent 924fc95 commit b610b4d

5 files changed

Lines changed: 235 additions & 221 deletions

File tree

config.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
fullscreen=Off
2-
music_volume=0
2+
music_volume=1
33
se_volume=1

src/main/java/com/khomsi/game/enviroment/Lightning.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.khomsi.game.enviroment;
22

33
import com.khomsi.game.main.GameManager;
4-
import com.khomsi.game.main.tools.Tools;
54

65
import java.awt.*;
76
import java.awt.image.BufferedImage;
@@ -18,8 +17,6 @@ public class Lightning {
1817
public static final int NIGHT = 2;
1918
public static final int DAWN = 3;
2019
public int dayState = DAY;
21-
Tools tools = new Tools();
22-
2320
public Lightning(GameManager gameManager) {
2421
this.gameManager = gameManager;
2522
setLightSource();
@@ -129,7 +126,7 @@ public void draw(Graphics2D g2d) {
129126
}
130127
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1F));
131128
debugDayState(g2d);
132-
gameManager.ui.drawClock(dayState, filterAlfa);
129+
gameManager.ui.hud.drawClock(dayState, filterAlfa);
133130
}
134131

135132
private void debugDayState(Graphics2D g2d) {

src/main/java/com/khomsi/game/main/GameManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.khomsi.game.main.logic.EntityGenerator;
1313
import com.khomsi.game.main.logic.EventHandler;
1414
import com.khomsi.game.main.tools.*;
15+
import com.khomsi.game.main.tools.ui.UI;
1516
import com.khomsi.game.tiles.Map;
1617
import com.khomsi.game.tiles.TileManager;
1718
import com.khomsi.game.tilesinteractive.InteractiveTile;
Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
package com.khomsi.game.main.tools.ui;
2+
3+
import com.khomsi.game.entity.Entity;
4+
import com.khomsi.game.main.GameManager;
5+
import com.khomsi.game.objects.hud.ClockHud;
6+
import com.khomsi.game.objects.hud.HeartHud;
7+
import com.khomsi.game.objects.hud.ManaHud;
8+
import com.khomsi.game.objects.hud.WindowHud;
9+
import com.khomsi.game.objects.interact.KeyObject;
10+
11+
import java.awt.*;
12+
import java.awt.image.BufferedImage;
13+
14+
import static com.khomsi.game.enviroment.Lightning.*;
15+
16+
public class HUD {
17+
private final UI ui;
18+
private final GameManager gameManager;
19+
private BufferedImage heartHud1, heartHud2, heartHud3, heartHud4, heartHud5, heartHud6;
20+
private BufferedImage manaHud1, manaHud2, manaHud3, manaHud4, manaHud5, manaHud6;
21+
private BufferedImage arrow, sun, moon, line, nightFall;
22+
private BufferedImage coinHud, keyHud;
23+
24+
25+
public HUD(UI ui, GameManager gameManager) {
26+
this.ui = ui;
27+
this.gameManager = gameManager;
28+
}
29+
30+
public void initializeHudImages() {
31+
Entity clock = new ClockHud(gameManager);
32+
arrow = clock.image2;
33+
nightFall = clock.down;
34+
moon = clock.down1;
35+
sun = clock.image;
36+
line = clock.image3;
37+
38+
Entity heartHud = new HeartHud(gameManager);
39+
heartHud1 = heartHud.down;
40+
heartHud2 = heartHud.down1;
41+
heartHud3 = heartHud.down2;
42+
43+
heartHud4 = heartHud.image;
44+
heartHud5 = heartHud.image2;
45+
heartHud6 = heartHud.image3;
46+
47+
Entity manaHud = new ManaHud(gameManager);
48+
manaHud1 = manaHud.down;
49+
manaHud2 = manaHud.down1;
50+
manaHud3 = manaHud.down2;
51+
52+
manaHud4 = manaHud.image;
53+
manaHud5 = manaHud.image2;
54+
manaHud6 = manaHud.image3;
55+
56+
Entity windowHud = new WindowHud(gameManager);
57+
coinHud = windowHud.image;
58+
keyHud = windowHud.image2;
59+
}
60+
61+
void drawHudBars() {
62+
int clockWidth = (int) (GameManager.TILE_SIZE * 4.4);
63+
int clockHeight = (int) (GameManager.TILE_SIZE * 1.5);
64+
65+
int windowX = GameManager.TILE_SIZE / 3;
66+
int y = 10;
67+
// Draw the subwindow
68+
drawRoundUiWindow(windowX - 20, y - 4, clockWidth, clockHeight);
69+
70+
drawItemsOnHudWindow();
71+
int y1 = 34;
72+
int startX = GameManager.TILE_SIZE - 60;
73+
74+
drawBar(startX, 10, gameManager.player.maxHp, gameManager.player.hp, heartHud1,
75+
heartHud2, heartHud3, heartHud4, heartHud5, heartHud6);
76+
drawBar(startX, y1, gameManager.player.maxMana,
77+
gameManager.player.mana, manaHud1, manaHud2, manaHud3, manaHud4, manaHud5, manaHud6);
78+
}
79+
80+
private void drawItemsOnHudWindow() {
81+
// Draw coin image and number of coins
82+
int startX = GameManager.TILE_SIZE + 80;
83+
int startY = 3;
84+
drawImageWithText(coinHud, String.valueOf(gameManager.player.coin), startX, startY, 36);
85+
86+
// Draw key image and number of keys
87+
startY = 25;
88+
drawImageWithText(keyHud, searchItemForHud(KeyObject.OBJ_NAME), startX, startY, 67);
89+
}
90+
91+
private void drawImageWithText(BufferedImage image, String text, int startX, int startY, int textY) {
92+
ui.graphics2D.drawImage(image, startX, startY, null);
93+
ui.graphics2D.setFont(ui.graphics2D.getFont().deriveFont(Font.BOLD, 21F));
94+
ui.graphics2D.setColor(Color.WHITE);
95+
ui.graphics2D.drawString(text, (int) (GameManager.TILE_SIZE * 3.6), textY);
96+
}
97+
98+
99+
public String searchItemForHud(String name) {
100+
int counter = 0;
101+
for (int i = 0; i < gameManager.player.inventory.size(); i++) {
102+
if (gameManager.player.inventory.get(i).name.equals(name)) {
103+
counter++;
104+
}
105+
}
106+
return String.valueOf(counter);
107+
}
108+
109+
private void drawBar(int startX, int startY, int max, int current, BufferedImage beginningImage, BufferedImage middleImage,
110+
BufferedImage endImage, BufferedImage emptyStartImage,
111+
BufferedImage middleEmptyImage, BufferedImage emptyEndImage) {
112+
// Calculate the number of beginning, middle, and end sections based on current value
113+
int beginningCount = (current < 1) ? 0 : 1;
114+
int endCount = (current == max) ? 1 : 0;
115+
int i = 0;
116+
// Calculate the number of middle sections
117+
int middleCount = Math.max(0, current - beginningCount - endCount);
118+
int defaultX = startX;
119+
// Draw empty bar start
120+
ui.graphics2D.drawImage(emptyStartImage, startX, startY, null);
121+
startX += 12;
122+
123+
// Draw middle
124+
while (i < max - 2) {
125+
ui.graphics2D.drawImage(middleEmptyImage, startX, startY, null);
126+
i++;
127+
startX += 9;
128+
}
129+
130+
// Draw empty end section
131+
ui.graphics2D.drawImage(emptyEndImage, startX + 3, startY, null);
132+
133+
// Draw current bar
134+
startX = defaultX;
135+
i = 0;
136+
137+
// Draw beginning section (if current value is greater than or equal to 1)
138+
if (beginningCount > 0) {
139+
ui.graphics2D.drawImage(beginningImage, startX, startY, null);
140+
startX += 12;
141+
}
142+
143+
// Draw middle sections
144+
while (i < middleCount) {
145+
ui.graphics2D.drawImage(middleImage, startX, startY, null);
146+
i++;
147+
startX += 9;
148+
}
149+
150+
// Draw end section (if current value is equal to max)
151+
if (endCount > 0) {
152+
ui.graphics2D.drawImage(endImage, startX + 3, startY, null);
153+
}
154+
}
155+
156+
public void drawClock(int dayState, float filterAlfa) {
157+
int clockX = 730;
158+
int clockY = 10;
159+
int clockGap = 42;
160+
int clockWidth = GameManager.TILE_SIZE * 6;
161+
int clockHeight = (int) (GameManager.TILE_SIZE * 1.3);
162+
final int LINE_COUNT = 5;
163+
final int WINDOW_OFFSET_X = 20;
164+
final int WINDOW_OFFSET_Y = 4;
165+
int startX = clockX - WINDOW_OFFSET_X - 1;
166+
int endX = clockX + (clockGap * 4 + 1) + WINDOW_OFFSET_X;
167+
168+
if (gameManager.gameState != GameManager.CHARACTER_STATE) {
169+
//Draw window for clocks
170+
drawRoundUiWindow(clockX - WINDOW_OFFSET_X, clockY - WINDOW_OFFSET_Y, clockWidth, clockHeight);
171+
// Draw lines
172+
for (int i = 0; i < LINE_COUNT; i++) {
173+
int xPos = clockX + (clockGap * i);
174+
ui.graphics2D.drawImage(line, xPos, clockY + WINDOW_OFFSET_Y, null);
175+
}
176+
int xPos = clockX + (clockGap * 4 + 1);
177+
int yPos = (int) (clockY - WINDOW_OFFSET_Y * 3.2);
178+
ui.graphics2D.drawImage(moon, xPos + WINDOW_OFFSET_X, yPos, null);
179+
180+
xPos = (xPos - clockGap * 2);
181+
yPos = yPos - WINDOW_OFFSET_Y;
182+
ui.graphics2D.drawImage(nightFall, xPos, yPos, null);
183+
184+
xPos = startX + 1;
185+
ui.graphics2D.drawImage(sun, xPos, yPos, null);
186+
187+
// Calculate arrow position based on dayState and filterAlfa
188+
int arrowX;
189+
int arrowY = clockY + WINDOW_OFFSET_Y * 6;
190+
191+
if (dayState == DAY) {
192+
arrowX = startX;
193+
} else if (dayState == NIGHTFALL || dayState == NIGHT) {
194+
arrowX = (int) (startX + (endX - startX) * filterAlfa);
195+
} else { // DAWN
196+
arrowX = endX - (int) ((endX - startX) * filterAlfa);
197+
198+
// Reverse the arrow movement during the dawn phase
199+
arrowX = endX - (arrowX - startX);
200+
201+
if (arrowX < startX) {
202+
arrowX = startX;
203+
}
204+
}
205+
ui.graphics2D.drawImage(arrow, arrowX, arrowY, null);
206+
}
207+
}
208+
209+
public void drawRoundUiWindow(int x, int y, int width, int height) {
210+
//Less %, more transparent
211+
int alpha = 120; // % transparent
212+
Color color = new Color(36, 36, 36, alpha);
213+
ui.graphics2D.setColor(color);
214+
ui.graphics2D.fillRoundRect(x, y, width, height, 8, 8);
215+
}
216+
}

0 commit comments

Comments
 (0)