Skip to content

Commit 6cc6a5d

Browse files
committed
feat(client): login + register + logout account
1 parent 9efff49 commit 6cc6a5d

File tree

13 files changed

+592
-53
lines changed

13 files changed

+592
-53
lines changed

client/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@
6262
<version>1.7.4</version>
6363
</dependency>
6464

65+
<!-- https://mvnrepository.com/artifact/pl.kotcrab.vis/vis-ui -->
66+
<dependency>
67+
<groupId>pl.kotcrab.vis</groupId>
68+
<artifactId>vis-ui</artifactId>
69+
<version>0.3.1</version>
70+
</dependency>
6571
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
6672
<dependency>
6773
<groupId>com.fasterxml.jackson.core</groupId>

client/src/main/java/io/exterminator3618/client/Exterminator3618.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package io.exterminator3618.client;
22

33
import com.badlogic.gdx.*;
4+
import io.exterminator3618.client.api.ApiClient;
45
import io.exterminator3618.client.utils.SoundManager;
56
import io.exterminator3618.client.screens.SplashScreen;
67
import io.exterminator3618.client.utils.Assets;
78
import io.exterminator3618.client.utils.Renderer;
89
import org.slf4j.Logger;
910
import org.slf4j.LoggerFactory;
11+
import pl.kotcrab.vis.ui.VisUI;
1012

1113
import java.util.Stack;
1214

@@ -18,16 +20,21 @@ public class Exterminator3618 extends Game {
1820
private Preferences preferences = null;
1921
private Renderer renderer = null;
2022
private SoundManager soundManager = null;
23+
private ApiClient apiClient = null;
2124

2225
@Override
2326
public void create() {
2427
Assets.load();
28+
VisUI.load();
2529
launchScreen(new SplashScreen(this));
2630
}
2731

2832
@Override
2933
public void dispose() {
3034
// save game preferences before exit
35+
if (apiClient != null) {
36+
apiClient.saveAuthToken();
37+
}
3138
if (preferences != null) {
3239
log.info("Saving preferences");
3340
preferences.flush();
@@ -40,6 +47,7 @@ public void dispose() {
4047
soundManager.dispose();
4148
}
4249
Assets.dispose();
50+
VisUI.dispose();
4351
super.dispose();
4452
}
4553

@@ -71,7 +79,7 @@ public SoundManager getSoundManager() {
7179
public void launchScreen(Screen screen) {
7280
log.info("Launching screen: {}", screen.getClass().getSimpleName());
7381
screenStack.push(screen);
74-
super.setScreen(screen);
82+
// super.setScreen(screen);
7583
}
7684

7785
/*
@@ -86,6 +94,13 @@ public void backToPreviousScreen() {
8694
}
8795
}
8896
*/
97+
@Override
98+
public void render() {
99+
if (screenStack.peek() != super.getScreen()) {
100+
super.setScreen(screenStack.peek());
101+
}
102+
super.render();
103+
}
89104

90105
public void backToPreviousScreen () {
91106
super.getScreen().dispose();
@@ -95,34 +110,29 @@ public void backToPreviousScreen () {
95110
return;
96111
}
97112
screenStack.pop();
98-
screenStack.peek().show();
113+
// screenStack.peek().show();
99114
if (screenStack.isEmpty()) {
100115
log.warn("Popped the last screen, quiting game.");
101116
Gdx.app.exit();
102117
} else {
103118
log.info("Returning to screen: {}", screenStack.peek().getClass().getSimpleName());
104-
super.setScreen(screenStack.peek());
119+
// super.setScreen(screenStack.peek());
105120
}
106121
}
107122

108123
public void replaceCurrentScreen(Screen screen) {
109124
super.getScreen().dispose();
110125
screenStack.pop();
111126
screenStack.push(screen);
112-
super.setScreen(screen);
113-
// launchScreen(screen);
127+
// super.setScreen(screen);
114128
}
115129

116-
@Override
117-
@Deprecated
118-
public Screen getScreen() {
119-
throw new UnsupportedOperationException("Calling this method is prohibited.");
130+
public ApiClient getApiClient() {
131+
return apiClient;
120132
}
121133

122-
@Override
123-
@Deprecated
124-
public void setScreen(Screen screen) {
125-
throw new UnsupportedOperationException("Calling this method is prohibited.");
134+
public void setApiClient(ApiClient apiClient) {
135+
this.apiClient = apiClient;
126136
}
127137

128138
}

client/src/main/java/io/exterminator3618/client/api/ApiClient.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
public class ApiClient implements FriendsApi, MatchApi, UserApi {
1717

18+
public static final String AUTHTOKEN_KEY = "auth";
19+
1820
private static final Logger logger = LoggerFactory.getLogger(ApiClient.class);
1921

2022
protected final Exterminator3618 game;
@@ -66,6 +68,7 @@ public static ApiClient login(Exterminator3618 game, String loginUsername, Strin
6668
if (!client.fetchUserInfo()) {
6769
throw new IOException("Failed to fetch user info after login");
6870
}
71+
client.saveAuthToken();
6972
return client;
7073
}
7174

@@ -87,6 +90,7 @@ public static ApiClient register(Exterminator3618 game, String registerName, Str
8790
if (!client.fetchUserInfo()) {
8891
throw new IOException("Failed to fetch user info after registration");
8992
}
93+
client.saveAuthToken();
9094
return client;
9195
}
9296

@@ -118,6 +122,7 @@ public String exportAuthToken() {
118122
for (HttpCookie cookie : cookieManager.getCookieStore().getCookies()) {
119123
if (cookie.getName().equals("auth")) {
120124
authToken.set(cookie.getValue());
125+
logger.debug("Exported auth token from cookies");
121126
break;
122127
}
123128
}
@@ -130,7 +135,7 @@ public void saveAuthToken() {
130135
String authToken = exportAuthToken();
131136
if (authToken != null) {
132137
logger.info("Saving auth token to preferences");
133-
game.getPreferences().putString("auth", authToken);
138+
game.getPreferences().putString(AUTHTOKEN_KEY, authToken);
134139
} else {
135140
logger.warn("No auth token found, removing from preferences");
136141
game.getPreferences().remove("auth");

client/src/main/java/io/exterminator3618/client/api/UserApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ default boolean fetchUserInfo() {
2828
return false;
2929
}
3030

31-
default boolean saveUserInfo() {
31+
default boolean updateUserInfo() {
3232
HttpRequest req = createJsonPatchRequest("/user/info", new Object() {
3333
public final String name = getUserInfo().getName();
3434
public final String username = getUserInfo().getUsername();

client/src/main/java/io/exterminator3618/client/components/Box.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ public Box(int width, int height, String title) {
4141
}
4242

4343
public void draw(Renderer renderer) {
44-
renderer.drawUi("tile_1",x,y,width,height);
44+
renderer.drawUi("tile_1", x, y, width, height);
4545
renderer.drawTextMiddle(title, x + width / 2, y + height - 50);
46+
if (content != null) {
47+
renderer.drawTextMiddle(content, x + width / 2, y + height / 2 + 20);
48+
}
4649
}
4750

4851
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package io.exterminator3618.client.screens;
2+
3+
import com.badlogic.gdx.Gdx;
4+
import com.badlogic.gdx.Screen;
5+
import com.badlogic.gdx.graphics.GL20;
6+
import com.badlogic.gdx.graphics.OrthographicCamera;
7+
import com.badlogic.gdx.math.Vector3;
8+
import com.badlogic.gdx.utils.viewport.FitViewport;
9+
import com.badlogic.gdx.utils.viewport.Viewport;
10+
import io.exterminator3618.client.Constants;
11+
import io.exterminator3618.client.Exterminator3618;
12+
import io.exterminator3618.client.components.Box;
13+
import io.exterminator3618.client.components.TextButton;
14+
15+
import static io.exterminator3618.client.Constants.*;
16+
17+
public class AlertScreen extends OverlayScreen {
18+
19+
private final OrthographicCamera camera = new OrthographicCamera();
20+
private final Viewport viewport = new FitViewport(Constants.WINDOW_WIDTH, Constants.WINDOW_HEIGHT, camera);
21+
private final Vector3 touchPos = new Vector3();
22+
private final Box box;
23+
private final TextButton button;
24+
25+
private Runnable onConfirm = game::backToPreviousScreen;
26+
27+
protected AlertScreen(Exterminator3618 game, Screen backScreen, String title, String message, String buttonText) {
28+
super(game, backScreen);
29+
box = new Box(800, 400, title, message);
30+
button = new TextButton(buttonText, WINDOW_WIDTH / 2f - 100, WINDOW_HEIGHT / 2f - 140, 200, 60, true);
31+
32+
}
33+
34+
@Override
35+
public void show() {
36+
Gdx.gl.glEnable(GL20.GL_BLEND);
37+
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
38+
camera.position.set(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, 0);
39+
}
40+
41+
@Override
42+
public void render(float delta) {
43+
backScreen.render(0);
44+
45+
game.getRenderer().drawOverlay(camera, 0.7f);
46+
viewport.apply();
47+
camera.update();
48+
game.getRenderer().begin(camera);
49+
box.draw(game.getRenderer());
50+
button.draw(game.getRenderer());
51+
game.getRenderer().end();
52+
53+
if (delta <= 0) return;
54+
55+
if (Gdx.input.justTouched()) {
56+
touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
57+
viewport.unproject(touchPos);
58+
59+
if (button.isClicked(touchPos.x, touchPos.y)) {
60+
onConfirm.run();
61+
}
62+
}
63+
64+
}
65+
66+
@Override
67+
public void resize(int width, int height) {
68+
viewport.update(width, height);
69+
}
70+
71+
@Override
72+
public void pause() {
73+
74+
}
75+
76+
@Override
77+
public void resume() {
78+
79+
}
80+
81+
@Override
82+
public void hide() {
83+
Gdx.gl.glDisable(GL20.GL_BLEND);
84+
}
85+
86+
@Override
87+
public void dispose() {
88+
}
89+
90+
public void setOnConfirm(Runnable onConfirm) {
91+
this.onConfirm = onConfirm;
92+
}
93+
94+
}

client/src/main/java/io/exterminator3618/client/screens/GameScreen.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,12 @@ public GameScreen(Exterminator3618 game) {
9494
this.currentLevel = 0;
9595
loadLevel(currentLevel, null);
9696
soundManager = game.getSoundManager();
97-
soundManager.play("sound/gameplay_bgm.mp3", true);
97+
98+
camera = new OrthographicCamera();
99+
viewport = new FitViewport(Constants.WINDOW_WIDTH, Constants.WINDOW_HEIGHT, camera);
100+
camera.position.set(Constants.WINDOW_WIDTH / 2, Constants.WINDOW_HEIGHT / 2, 0);
101+
touchPos = new Vector3();
102+
pauseButton = new TextButton("Pause", 1545, 900, 300, 75, true);
98103
}
99104

100105
public void loadLevel(int levelNumber, Ball oldball) {
@@ -303,11 +308,8 @@ private PowerUp createPowerUpByType(String type) {
303308

304309
@Override
305310
public void show() {
306-
camera = new OrthographicCamera();
307-
viewport = new FitViewport(Constants.WINDOW_WIDTH, Constants.WINDOW_HEIGHT, camera);
308-
camera.position.set(Constants.WINDOW_WIDTH / 2, Constants.WINDOW_HEIGHT / 2, 0);
309-
touchPos = new Vector3();
310-
pauseButton = new TextButton("Pause", 1545, 900, 300, 75, true);
311+
soundManager.play("sound/gameplay_bgm.mp3", true);
312+
311313
}
312314

313315
@Override

0 commit comments

Comments
 (0)