Skip to content

Commit 7fc5d7a

Browse files
committed
Finish main game mechanics
1 parent 38d1f40 commit 7fc5d7a

File tree

20 files changed

+374
-291
lines changed

20 files changed

+374
-291
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package nl.hsleiden.joshuabloch;
2+
3+
import com.almasb.fxgl.animation.Interpolators;
4+
import com.almasb.fxgl.dsl.FXGL;
5+
import javafx.geometry.Point2D;
6+
import javafx.util.Duration;
7+
import nl.hsleiden.joshuabloch.game.EntityType;
8+
import nl.hsleiden.joshuabloch.menu.SceneManager;
9+
10+
import static com.almasb.fxgl.dsl.FXGL.*;
11+
12+
public class Collisions {
13+
14+
private final ScoreCounter scoreCounter;
15+
private final LevelManager levelManager;
16+
private final SceneManager sceneManager;
17+
18+
public Collisions(ScoreCounter scoreCounter, LevelManager levelManager, SceneManager sceneManager) {
19+
this.levelManager = levelManager;
20+
this.scoreCounter = scoreCounter;
21+
this.sceneManager = sceneManager;
22+
setCollisions();
23+
}
24+
25+
private void setCollisions() {
26+
onCollisionOneTimeOnly(EntityType.PLAYER, EntityType.COIN, (player, coin) -> {
27+
coin.removeFromWorld();
28+
scoreCounter.increment(1);
29+
FXGL.play("coin.wav");
30+
});
31+
32+
onCollisionOneTimeOnly(EntityType.PLAYER, EntityType.SACK, (player, coin) -> {
33+
coin.removeFromWorld();
34+
scoreCounter.increment(5);
35+
FXGL.play("coinSack.wav");
36+
});
37+
38+
onCollisionBegin(EntityType.PLAYER, EntityType.SCALPER, (player, scalper) -> {
39+
System.out.println("register");
40+
System.out.println("Hit");
41+
scoreCounter.decrement(1);
42+
//TODO play scalper hit sound here
43+
});
44+
45+
onCollisionOneTimeOnly(EntityType.PLAYER, EntityType.PART, (player, part) -> {
46+
System.out.println("part hit");
47+
if(geti("coin") >= Integer.parseInt(levelManager.getCurrentLevel().getProperties().getString("cost"))) {
48+
FXGL.animationBuilder()
49+
.interpolator(Interpolators.SMOOTH.EASE_OUT())
50+
.duration(Duration.seconds(1.6))
51+
.scale(part)
52+
.from(new Point2D(1, 1))
53+
.to(new Point2D(0,0))
54+
.buildAndPlay();
55+
FXGL.animationBuilder()
56+
.interpolator(Interpolators.SMOOTH.EASE_OUT())
57+
.onFinished(() -> {
58+
Integer highscore = levelManager.getHighScore(levelManager.currentLevelID);
59+
getDialogService().showMessageBox(highscore != null ? (highscore < geti("coin") ? "You beat the highscore, good job!" : "You didn't beat the highscore, better luck next time." ): "You got the pc part. On to the next level!", () -> {
60+
getGameController().gotoMainMenu();
61+
levelManager.finished(geti("coin"));
62+
sceneManager.getMainMenu().lockButtons(levelManager.levelProgress);
63+
sceneManager.getMainMenu().showHighscores();
64+
part.removeFromWorld();
65+
});
66+
})
67+
.duration(Duration.seconds(1.6))
68+
.rotate(part)
69+
.from(0)
70+
.to(180)
71+
.buildAndPlay();
72+
} else {
73+
getDialogService().showMessageBox("You do not have enough coins to buy this part, try again!", getGameController()::startNewGame);
74+
}
75+
});
76+
}
77+
78+
}
Lines changed: 76 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,134 @@
11
package nl.hsleiden.joshuabloch;
22

3+
import com.almasb.fxgl.app.scene.Viewport;
34
import com.almasb.fxgl.core.serialization.Bundle;
5+
import com.almasb.fxgl.dsl.FXGL;
46
import com.almasb.fxgl.entity.level.Level;
57
import com.almasb.fxgl.profile.DataFile;
6-
import com.almasb.fxgl.profile.SaveFile;
78
import com.almasb.fxgl.profile.SaveLoadHandler;
89
import nl.hsleiden.joshuabloch.game.EntityManager;
910
import org.jetbrains.annotations.NotNull;
1011

1112
import java.util.HashMap;
13+
import java.util.function.Function;
1214

1315
import static com.almasb.fxgl.dsl.FXGL.*;
1416

1517
public class LevelManager {
1618

1719
public int levelProgress = 0;
20+
public int currentLevelID = 0;
1821
private String name;
1922
private Level currentLevel;
2023
private HashMap<Integer, Integer> highscores = new HashMap<>();
2124

22-
public void addHandler() {
25+
private final ScoreCounter scoreCounter;
26+
private final Main main;
27+
28+
public LevelManager(ScoreCounter scoreCounter, Main main) {
29+
this.scoreCounter = scoreCounter;
30+
this.main = main;
31+
}
32+
33+
public void addSaveHandler() {
2334
getSaveLoadService().addHandler(new SaveLoadHandler() {
2435
@Override
2536
public void onSave(@NotNull DataFile data) {
2637
Bundle bundle;
2738
try {
28-
bundle = data.getBundle(name);
29-
} catch(IllegalArgumentException e) {
3039
bundle = new Bundle(name);
40+
bundle.put("progress", levelProgress);
41+
bundle.put("highscores", highscores);
42+
data.putBundle(bundle);
43+
} catch(IllegalArgumentException e) {
44+
bundle = data.getBundle(name);
45+
bundle.put("progress", levelProgress);
46+
bundle.put("highscores", highscores);
47+
data.putBundle(bundle);
3148
}
32-
System.out.println(bundle.getName());
33-
bundle.put("progress", levelProgress);
34-
bundle.put("highscores", highscores);
35-
data.putBundle(bundle);
3649
}
3750

3851
@Override
3952
public void onLoad(@NotNull DataFile data) {
40-
Bundle bundle = data.getBundle(name);
41-
levelProgress = bundle.get("progress");
42-
highscores = bundle.get("highscores");
43-
System.out.println((int) data.getBundle(name).get("progress"));
53+
Bundle bundle;
54+
try {
55+
bundle = data.getBundle(name);
56+
levelProgress = bundle.get("progress");
57+
highscores = bundle.get("highscores");
58+
} catch (Exception e) {
59+
System.out.println("Standard values");
60+
levelProgress = 0;
61+
highscores = new HashMap<>();
62+
}
4463
}
4564
});
4665
}
4766

48-
public void setName(String name) {
67+
public void setName(String name, Function<Void, Void> callback) {
4968
this.name = name;
69+
loadSave(r -> callback.apply(null));
70+
}
71+
72+
public String getName() {
73+
return name;
5074
}
5175

52-
public int getHighScore(int levelID) {
53-
return highscores.getOrDefault(levelID, 0);
76+
public Integer getHighScore(int levelID) {
77+
return highscores.getOrDefault(levelID, null);
5478
}
5579

56-
public void loadSave() {
57-
getSaveLoadService().readAndLoadTask("highscores.sav").run();
80+
public void loadSave(Function<Void, Void> callback) {
81+
if(getFileSystemService().exists("highscores.sav")) {
82+
System.out.println("exists");
83+
getSaveLoadService().readAndLoadTask("highscores.sav").thenWrap(n -> callback.apply(null)).run();
84+
} else {
85+
System.out.println("no exist");
86+
levelProgress = 0;
87+
highscores = new HashMap<>();
88+
writeSave();
89+
System.out.println("Standard values");
90+
callback.apply(null);
91+
}
5892
}
5993

6094
public void writeSave() {
6195
getSaveLoadService().saveAndWriteTask("highscores.sav").run();
6296
}
6397

6498
public void finished(int coins) {
65-
highscores.put(levelProgress, coins);
66-
levelProgress++;
99+
if(getHighScore(currentLevelID) != null && getHighScore(currentLevelID) < coins) {
100+
highscores.put(currentLevelID, coins);
101+
} else if(getHighScore(currentLevelID) == null) {
102+
highscores.put(currentLevelID, coins);
103+
}
104+
if(currentLevelID == levelProgress && levelProgress != 3) levelProgress++; //Do not increment when playing already unlocked levels
105+
writeSave();
67106
}
68107

69108
public Level getCurrentLevel() {
70109
return currentLevel;
71110
}
72111

73-
public void start() {
112+
public void start(int levelID) {
113+
currentLevelID = levelID;
114+
FXGL.getGameController().startNewGame();
115+
}
116+
117+
public void initGame() {
74118
getGameWorld().addEntityFactory(new EntityManager(this));
75-
currentLevel = setLevelFromMap("tmx/level_" + (levelProgress + 1) + ".tmx");
119+
currentLevel = setLevelFromMap("tmx/level_" + (currentLevelID + 1) + ".tmx");
120+
//currentLevel = setLevelFromMap("tmx/level_1.tmx");
121+
122+
main.player = spawn("player", 50, 50);
123+
124+
scoreCounter.showCost(Integer.parseInt(currentLevel.getProperties().getString("cost")));
125+
76126
spawn("background");
127+
128+
Viewport viewport = getGameScene().getViewport();
129+
viewport.setBounds(-1500, 0, 130 * 32, getAppHeight());
130+
viewport.bindToEntity(main.player, getAppWidth() / 2f, getAppHeight() /2f);
131+
viewport.setLazy(true);
77132
}
78133

79134
}

src/main/java/nl/hsleiden/joshuabloch/Main.java

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,47 @@
33
import com.almasb.fxgl.app.GameApplication;
44
import com.almasb.fxgl.app.GameSettings;
55
import com.almasb.fxgl.app.scene.Viewport;
6-
import com.almasb.fxgl.core.serialization.Bundle;
76
import com.almasb.fxgl.entity.Entity;
8-
import com.almasb.fxgl.entity.level.Level;
97
import com.almasb.fxgl.input.UserAction;
10-
import com.almasb.fxgl.profile.DataFile;
11-
import com.almasb.fxgl.profile.SaveLoadHandler;
8+
import com.almasb.fxgl.physics.PhysicsComponent;
129
import javafx.scene.input.KeyCode;
13-
import nl.hsleiden.joshuabloch.game.EntityManager;
14-
import nl.hsleiden.joshuabloch.game.EntityType;
1510
import nl.hsleiden.joshuabloch.game.PlayerComponent;
16-
import nl.hsleiden.joshuabloch.menu.MySceneFactory;
11+
import nl.hsleiden.joshuabloch.menu.SceneManager;
1712

18-
import java.util.HashMap;
1913
import java.util.Map;
2014

2115
import static com.almasb.fxgl.dsl.FXGL.*;
2216

2317
public class Main extends GameApplication {
2418

25-
private Entity player;
19+
public Entity player;
2620
private ScoreCounter scoreCounter;
2721
private LevelManager levelManager;
22+
private SceneManager sceneManager;
2823

2924
public static void main(String[] args) {
3025
launch(args);
3126
}
3227

3328
@Override
3429
protected void initSettings(GameSettings settings) {
30+
scoreCounter = new ScoreCounter();
31+
levelManager = new LevelManager(scoreCounter, this);
32+
sceneManager = new SceneManager(levelManager);
3533
settings.setWidth(1280);
3634
settings.setHeight(720);
3735
settings.setAppIcon("icon.png");
3836
settings.setTitle("PC builder : 2021");
3937
settings.setVersion("1.0");
4038
settings.setMainMenuEnabled(true);
41-
settings.setSceneFactory(new MySceneFactory());
39+
settings.setSceneFactory(sceneManager);
4240
settings.setFullScreenAllowed(true);
4341
settings.setDeveloperMenuEnabled(true);
4442
}
4543

4644
@Override
4745
protected void onPreInit() {
48-
scoreCounter = new ScoreCounter();
49-
levelManager = new LevelManager();
46+
levelManager.addSaveHandler();
5047
}
5148

5249
@Override
@@ -85,30 +82,17 @@ protected void onActionBegin() {
8582

8683
@Override
8784
protected void initGameVars(Map<String, Object> vars) {
88-
vars.put("coin", 100);
85+
vars.put("coin", 0);
8986
}
9087

9188
@Override
9289
protected void initGame() {
93-
levelManager.addHandler();
94-
levelManager.setName("jelle");
95-
//TODO ask and set the player name
96-
levelManager.addHandler();
97-
levelManager.start();
98-
levelManager.finished(10);
99-
levelManager.writeSave();
100-
101-
player = spawn("player", 50, 50);
102-
103-
Viewport viewport = getGameScene().getViewport();
104-
viewport.setBounds(-1500, 0, 130 * 32, getAppHeight());
105-
viewport.bindToEntity(player, getAppWidth() / 2f, getAppHeight() /2f);
106-
viewport.setLazy(true);
90+
levelManager.initGame();
10791
}
10892

10993
@Override
11094
protected void initPhysics() {
111-
new Physics(scoreCounter);
95+
new Collisions(scoreCounter, levelManager, sceneManager);
11296
}
11397

11498
@Override

src/main/java/nl/hsleiden/joshuabloch/Physics.java

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)