Skip to content

Commit 33f1267

Browse files
committed
Merge branch 'master' into 'menu'
# Conflicts: # src/main/java/nl/hsleiden/joshuabloch/Main.java
2 parents 48ec117 + 6cb06fb commit 33f1267

33 files changed

+760
-267
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package nl.hsleiden.joshuabloch;
2+
3+
import com.almasb.fxgl.core.serialization.Bundle;
4+
import com.almasb.fxgl.entity.level.Level;
5+
import com.almasb.fxgl.profile.DataFile;
6+
import com.almasb.fxgl.profile.SaveFile;
7+
import com.almasb.fxgl.profile.SaveLoadHandler;
8+
import nl.hsleiden.joshuabloch.game.EntityManager;
9+
import org.jetbrains.annotations.NotNull;
10+
11+
import java.util.HashMap;
12+
13+
import static com.almasb.fxgl.dsl.FXGL.*;
14+
15+
public class LevelManager {
16+
17+
public int levelProgress = 0;
18+
private String name;
19+
private Level currentLevel;
20+
private HashMap<Integer, Integer> highscores = new HashMap<>();
21+
22+
public void addHandler() {
23+
getSaveLoadService().addHandler(new SaveLoadHandler() {
24+
@Override
25+
public void onSave(@NotNull DataFile data) {
26+
Bundle bundle;
27+
try {
28+
bundle = data.getBundle(name);
29+
} catch(IllegalArgumentException e) {
30+
bundle = new Bundle(name);
31+
}
32+
System.out.println(bundle.getName());
33+
bundle.put("progress", levelProgress);
34+
bundle.put("highscores", highscores);
35+
data.putBundle(bundle);
36+
}
37+
38+
@Override
39+
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"));
44+
}
45+
});
46+
}
47+
48+
public void setName(String name) {
49+
this.name = name;
50+
}
51+
52+
public int getHighScore(int levelID) {
53+
return highscores.getOrDefault(levelID, 0);
54+
}
55+
56+
public void loadSave() {
57+
getSaveLoadService().readAndLoadTask("highscores.sav").run();
58+
}
59+
60+
public void writeSave() {
61+
getSaveLoadService().saveAndWriteTask("highscores.sav").run();
62+
}
63+
64+
public void finished(int coins) {
65+
highscores.put(levelProgress, coins);
66+
levelProgress++;
67+
}
68+
69+
public Level getCurrentLevel() {
70+
return currentLevel;
71+
}
72+
73+
public void start() {
74+
getGameWorld().addEntityFactory(new EntityManager(this));
75+
currentLevel = setLevelFromMap("tmx/level_" + (levelProgress + 1) + ".tmx");
76+
spawn("background");
77+
}
78+
79+
}
Lines changed: 24 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
package nl.hsleiden.joshuabloch;
22

3-
import com.almasb.fxgl.animation.Interpolators;
43
import com.almasb.fxgl.app.GameApplication;
54
import com.almasb.fxgl.app.GameSettings;
65
import com.almasb.fxgl.app.scene.Viewport;
76
import com.almasb.fxgl.core.serialization.Bundle;
8-
import com.almasb.fxgl.dsl.FXGL;
97
import com.almasb.fxgl.entity.Entity;
108
import com.almasb.fxgl.entity.level.Level;
119
import com.almasb.fxgl.input.UserAction;
1210
import com.almasb.fxgl.profile.DataFile;
1311
import com.almasb.fxgl.profile.SaveLoadHandler;
14-
import com.almasb.fxgl.ui.FontType;
15-
import javafx.geometry.Point2D;
1612
import javafx.scene.input.KeyCode;
17-
import javafx.scene.paint.Color;
18-
import javafx.scene.text.Font;
19-
import javafx.scene.text.Text;
20-
import javafx.util.Duration;
2113
import nl.hsleiden.joshuabloch.game.EntityManager;
2214
import nl.hsleiden.joshuabloch.game.EntityType;
2315
import nl.hsleiden.joshuabloch.game.PlayerComponent;
@@ -31,6 +23,12 @@
3123
public class Main extends GameApplication {
3224

3325
private Entity player;
26+
private ScoreCounter scoreCounter;
27+
private LevelManager levelManager;
28+
29+
public static void main(String[] args) {
30+
launch(args);
31+
}
3432

3533
@Override
3634
protected void initSettings(GameSettings settings) {
@@ -41,12 +39,16 @@ protected void initSettings(GameSettings settings) {
4139
settings.setVersion("1.0");
4240
settings.setMainMenuEnabled(true);
4341
settings.setSceneFactory(new MySceneFactory());
44-
//settings.setEnabledMenuItems(EnumSet.allOf(MenuItem.class));
4542
settings.setFullScreenAllowed(true);
46-
//settings.setProfilingEnabled(true);
4743
settings.setDeveloperMenuEnabled(true);
4844
}
4945

46+
@Override
47+
protected void onPreInit() {
48+
scoreCounter = new ScoreCounter();
49+
levelManager = new LevelManager();
50+
}
51+
5052
@Override
5153
protected void initInput() {
5254
getInput().addAction(new UserAction("Left") {
@@ -79,135 +81,39 @@ protected void onActionBegin() {
7981
player.getComponent(PlayerComponent.class).jump(250);
8082
}
8183
}, KeyCode.W);
82-
8384
}
8485

8586
@Override
8687
protected void initGameVars(Map<String, Object> vars) {
87-
HashMap<Integer, Integer> highscores = new HashMap<>();
88-
//highscores.put("")
89-
vars.put("highscores", new HashMap<Integer, Integer>());
90-
vars.put("progress", 0);
91-
vars.put("coin", 0);
88+
vars.put("coin", 100);
9289
}
9390

94-
@Override
95-
protected void onPreInit() {
96-
getSaveLoadService().addHandler(new SaveLoadHandler() {
97-
@Override
98-
public void onSave(DataFile data) {
99-
// create a new bundle to store your data
100-
Bundle bundle = new Bundle("username");
101-
102-
// store some data
103-
int progress = geti("progress");
104-
bundle.put("progress", progress);
105-
106-
// give the bundle to data file
107-
data.putBundle(bundle);
108-
}
109-
110-
@Override
111-
public void onLoad(DataFile data) {
112-
// get your previously saved bundle
113-
var bundle = data.getBundle("username");
114-
115-
// retrieve some data
116-
double time = bundle.get("time");
117-
118-
// update your game with saved data
119-
set("time", time);
120-
}
121-
});
122-
}
123-
124-
12591
@Override
12692
protected void initGame() {
127-
getGameWorld().addEntityFactory(new EntityManager());
128-
129-
Level level = setLevelFromMap("tmx/level2.tmx");
130-
131-
System.out.println(level.getProperties().getString("menuName"));
132-
133-
player = spawn("player", 550, 50);
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();
134100

135-
spawn("background");
101+
player = spawn("player", 50, 50);
136102

137103
Viewport viewport = getGameScene().getViewport();
138-
viewport.setBounds(-1500, 0, 250 * 70, getAppHeight());
104+
viewport.setBounds(-1500, 0, 130 * 32, getAppHeight());
139105
viewport.bindToEntity(player, getAppWidth() / 2f, getAppHeight() /2f);
140106
viewport.setLazy(true);
141107
}
142108

143109
@Override
144110
protected void initPhysics() {
145-
onCollisionOneTimeOnly(EntityType.PLAYER, EntityType.COIN, (player, coin) -> {
146-
coin.removeFromWorld();
147-
inc("coin", 1);
148-
//TODO play coin pick up sound here
149-
});
150-
151-
onCollisionOneTimeOnly(EntityType.PLAYER, EntityType.SACK, (player, coin) -> {
152-
coin.removeFromWorld();
153-
inc("coin", 5);
154-
//TODO play sack pick up sound here
155-
});
156-
157-
onCollisionOneTimeOnly(EntityType.PLAYER, EntityType.SCALPER, (player, scalper) -> {
158-
System.out.println("register");
159-
if(player.getComponent(PlayerComponent.class).isInvincible()) return; //Don't register hits when the player has just respawned
160-
System.out.println("Hit");
161-
inc("coin", -2);
162-
if(geti("coin") < 0) set("coin", 0);
163-
//TODO play scalper hit sound here
164-
});
111+
new Physics(scoreCounter);
165112
}
166113

167114
@Override
168115
protected void initUI() {
169-
Font font = getUIFactoryService().newFont(FontType.GAME, 28);
170-
Text moneyText = new Text();
171-
Text moneyDesc = new Text();
172-
moneyDesc.setFont(font);
173-
moneyText.setFont(font);
174-
moneyDesc.setTranslateY(100);
175-
moneyDesc.setTranslateX(30);
176-
moneyText.setTranslateX(100);
177-
moneyText.setTranslateY(100);
178-
moneyDesc.textProperty().set("Coins:");
179-
moneyText.textProperty().bind(getWorldProperties().intProperty("coin").asString());
180-
getGameScene().addUINode(moneyText);
181-
getGameScene().addUINode(moneyDesc);
182-
183-
184-
getGameWorld().getProperties().addListener("coin", (old, value) -> {
185-
int change = (int)value - (int) old;
186-
System.out.println(change);
187-
Text changeText = getUIFactoryService().newText((change > 0 ? "+" : "") + change, change > 0 ? Color.GREEN : Color.RED, 28);
188-
changeText.setTranslateY(180);
189-
changeText.setTranslateX(30);
190-
getGameScene().addUINode(changeText);
191-
FXGL.animationBuilder()
192-
.interpolator(Interpolators.LINEAR.EASE_IN())
193-
.duration(Duration.seconds(3))
194-
.autoReverse(true)
195-
.translate(changeText)
196-
.from(new Point2D(30, 180))
197-
.to(new Point2D(30, 140))
198-
.buildAndPlay();
199-
FXGL.animationBuilder()
200-
.interpolator(Interpolators.SMOOTH.EASE_IN_OUT())
201-
.delay(Duration.seconds(3))
202-
.duration(Duration.seconds(2))
203-
.onCycleFinished(() -> { getGameScene().removeUINode(changeText); })
204-
.autoReverse(true)
205-
.fadeOut(changeText)
206-
.buildAndPlay();
207-
});
116+
scoreCounter.init();
208117
}
209118

210-
public static void main(String[] args) {
211-
launch(args);
212-
}
213119
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package nl.hsleiden.joshuabloch;
2+
3+
import nl.hsleiden.joshuabloch.game.EntityType;
4+
import nl.hsleiden.joshuabloch.game.PlayerComponent;
5+
6+
import static com.almasb.fxgl.dsl.FXGL.onCollisionBegin;
7+
import static com.almasb.fxgl.dsl.FXGL.onCollisionOneTimeOnly;
8+
9+
public class Physics {
10+
11+
private final ScoreCounter scoreCounter;
12+
13+
public Physics(ScoreCounter scoreCounter) {
14+
this.scoreCounter = scoreCounter;
15+
setCollisions();
16+
}
17+
18+
private void setCollisions() {
19+
onCollisionOneTimeOnly(EntityType.PLAYER, EntityType.COIN, (player, coin) -> {
20+
coin.removeFromWorld();
21+
scoreCounter.increment(1);
22+
//TODO play coin pick up sound here
23+
});
24+
25+
onCollisionOneTimeOnly(EntityType.PLAYER, EntityType.SACK, (player, coin) -> {
26+
coin.removeFromWorld();
27+
scoreCounter.increment(5);
28+
//TODO play sack pick up sound here
29+
});
30+
31+
onCollisionBegin(EntityType.PLAYER, EntityType.SCALPER, (player, scalper) -> {
32+
System.out.println("register");
33+
if(player.getComponent(PlayerComponent.class).isInvincible()) return; //Don't register hits when the player has just respawned
34+
System.out.println("Hit");
35+
scoreCounter.decrement(1);
36+
//TODO play scalper hit sound here
37+
});
38+
}
39+
40+
}

0 commit comments

Comments
 (0)