Skip to content

Commit b7ed447

Browse files
zamojtelmhawrylukkkafar
authored
feat: add equipment
* chore: add simple equipment system for the player Collected collectibles are now displayed if we click on a non-collectible item * feat: Improve equipment system * add InventoryPopup * Update src/main/java/io/rpg/controller/PopupController.java Co-authored-by: Marcin Hawryluk <70582973+mhawryluk@users.noreply.github.com> * Update src/main/java/io/rpg/model/data/Inventory.java Co-authored-by: Marcin Hawryluk <70582973+mhawryluk@users.noreply.github.com> * Update src/main/java/io/rpg/model/object/CollectibleGameObject.java Co-authored-by: Marcin Hawryluk <70582973+mhawryluk@users.noreply.github.com> * Update src/main/java/io/rpg/view/InventoryPopup.java Co-authored-by: Marcin Hawryluk <70582973+mhawryluk@users.noreply.github.com> * Update src/main/java/io/rpg/viewmodel/InventoryPopupViewModel.java Co-authored-by: Marcin Hawryluk <70582973+mhawryluk@users.noreply.github.com> * Update src/main/java/io/rpg/view/InventoryGameObjectView.java Co-authored-by: Marcin Hawryluk <70582973+mhawryluk@users.noreply.github.com> * fix: make equipment work on current arch Co-authored-by: Marcin Hawryluk <70582973+mhawryluk@users.noreply.github.com> Co-authored-by: Kacper Kafara <kacperkafara@gmail.com>
1 parent 741d924 commit b7ed447

File tree

17 files changed

+242
-9
lines changed

17 files changed

+242
-9
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"tag": "object-2",
3-
"onLeftClick": {"tag": "dialogue-action", "type": "dialogue", "statements": ["A key.,A, keyA, key.A, key.A, key.A, key.A, key.A, key.A key."], "assetPath": "assets/key.png"}
3+
"onLeftClick": {"tag": "dialogue-action", "type": "collect"}
44
}

src/main/java/io/rpg/config/model/ActionConfigBundle.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,10 @@ Result<Void, Exception> validateForBattle() {
252252
return Result.ok();
253253
}
254254

255+
Result<Void, Exception> validateForCollectAction() {
256+
return Result.ok();
257+
}
258+
255259
Result<Void, Exception> validateBasic() {
256260
ErrorMessageBuilder builder = new ErrorMessageBuilder();
257261
if (tag == null) {

src/main/java/io/rpg/controller/Controller.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,30 @@
55
import io.rpg.model.data.MouseClickedEvent;
66
import io.rpg.model.data.Position;
77
import io.rpg.model.location.LocationModel;
8+
import io.rpg.model.object.CollectibleGameObject;
89
import io.rpg.model.object.GameObject;
910
import io.rpg.model.object.Player;
1011
import io.rpg.model.object.Question;
1112
import io.rpg.util.BattleResult;
1213
import io.rpg.util.Result;
1314
import io.rpg.view.GameEndView;
1415
import io.rpg.view.GameObjectView;
16+
import io.rpg.view.InventoryPopup;
1517
import io.rpg.view.LocationView;
18+
1619
import java.lang.reflect.InvocationTargetException;
1720
import java.lang.reflect.Method;
1821
import java.util.LinkedHashMap;
1922
import java.util.List;
23+
2024
import javafx.geometry.Point2D;
2125
import javafx.scene.Scene;
26+
import javafx.scene.image.Image;
2227
import javafx.scene.input.KeyEvent;
2328
import javafx.scene.input.MouseButton;
2429
import javafx.stage.Stage;
30+
import javafx.stage.StageStyle;
31+
import io.rpg.view.popups.TextPopup;
2532
import org.apache.logging.log4j.LogManager;
2633
import org.apache.logging.log4j.Logger;
2734
import org.jetbrains.annotations.NotNull;
@@ -36,10 +43,8 @@ public class Controller implements KeyboardEvent.Observer, MouseClickedEvent.Obs
3643
private PlayerController playerController;
3744
private Stage mainStage;
3845

39-
4046
public Controller() {
4147
logger = LogManager.getLogger(Controller.class);
42-
4348
tagToLocationModelMap = new LinkedHashMap<>();
4449
tagToLocationViewMap = new LinkedHashMap<>();
4550
}
@@ -168,7 +173,13 @@ private void onAction(BattleAction action) {
168173
}
169174
popupController.openTextPopup(result.getMessage(), getWindowCenterX(), getWindowCenterY());
170175
}
171-
176+
177+
private void onAction(CollectAction action) {
178+
popupController.openTextImagePopup("Picked up an item!", new Image("file:assets/key.png"), getWindowCenterX(), getWindowCenterY());
179+
// objectView.setVisible(false);
180+
playerController.getPlayer().getInventory().add(action.getOwner());
181+
}
182+
172183
public Scene getView() {
173184
return currentView;
174185
}
@@ -215,6 +226,7 @@ public void onKeyboardEvent(KeyboardEvent event) {
215226
case Q -> popupController.openQuestionPopup(new Question("How many bits are there in one byte?", new String[]{"1/8", "1024", "8", "256"}, 'C'), getWindowCenterX(), getWindowCenterY());
216227
case L -> consumeAction(new LocationChangeAction("location-2", new Position(1, 2)));
217228
case U -> consumeAction(new GameEndAction("You have pressed the forbidden button"));
229+
case E -> popupController.openInventoryPopup(playerController.getPlayer().getInventory(), getWindowCenterX(), getWindowCenterY());
218230
}
219231
}
220232
// } else if (payload.getEventType() == KeyEvent.KEY_RELEASED) {
@@ -236,7 +248,7 @@ public void onMouseClickedEvent(MouseClickedEvent event) {
236248
GameObjectView objectView = event.source();
237249
Position position = new Position(objectView.getPosition());
238250
GameObject object = currentModel.getObject(position)
239-
.orElseThrow(() -> new RuntimeException("No object present at position " + position));
251+
.orElseThrow(() -> new RuntimeException("No object present at position " + position));
240252

241253
double distance = playerPos.distance(objectView.getPosition());
242254

src/main/java/io/rpg/controller/PopupController.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import io.rpg.model.object.Question;
44
import io.rpg.view.popups.DialoguePopup;
55
import io.rpg.view.popups.QuestionPopup;
6+
import io.rpg.model.data.Inventory;
7+
import io.rpg.view.InventoryPopup;
68
import io.rpg.view.popups.TextImagePopup;
79
import io.rpg.view.popups.TextPopup;
810
import javafx.scene.image.Image;
@@ -50,6 +52,19 @@ public void openTextImagePopup(String text, Image image, int x, int y){
5052
public void openPointsPopup(int pointsCount, int x, int y) {
5153
openTextImagePopup("You earned " + pointsCount + " points!", coinImage, x, y);
5254
}
55+
public void openInventoryPopup(Inventory inventory,int x, int y) {
56+
// InventoryPopup inventoryPopup=new InventoryPopup();
57+
// final Stage popupStage = new Stage(StageStyle.TRANSPARENT);
58+
59+
InventoryPopup popupScene = new InventoryPopup(inventory);
60+
popupStage.setScene(popupScene);
61+
62+
popupStage.show();
63+
64+
popupStage.setX(x - popupScene.getWidth() / 2);
65+
popupStage.setY(y - popupScene.getHeight() / 2);
66+
67+
}
5368

5469
public void openQuestionPopup(Question question, int x, int y, Runnable successCallback, Runnable failureCallback) {
5570
QuestionPopup popupScene = new QuestionPopup(question);

src/main/java/io/rpg/model/actions/ActionType.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ public enum ActionType {
2121
Dialogue("dialogue"),
2222

2323
@SerializedName("battle")
24-
Battle("battle");
24+
Battle("battle"),
25+
26+
@SerializedName("collect")
27+
Collect("collect");
2528

2629
private final String asString;
2730

@@ -41,6 +44,7 @@ public static Optional<ActionType> fromString(String action) {
4144
case "show-description" -> { return Optional.of(ShowDescription); }
4245
case "dialogue" -> { return Optional.of(Dialogue); }
4346
case "battle" -> { return Optional.of(Battle); }
47+
case "collect" -> { return Optional.of(Collect); }
4448
default -> { return Optional.empty(); }
4549
}
4650
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.rpg.model.actions;
2+
3+
import io.rpg.model.object.GameObject;
4+
5+
public class CollectAction implements Action {
6+
private GameObject owner;
7+
8+
public void setOwner(GameObject owner) {
9+
this.owner = owner;
10+
}
11+
12+
public GameObject getOwner() {
13+
return owner;
14+
}
15+
}
16+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.rpg.model.data;
2+
3+
import io.rpg.model.object.GameObject;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class Inventory {
9+
10+
public List<GameObject> items;
11+
12+
public Inventory() {
13+
items = new ArrayList<>();
14+
}
15+
16+
public void add(GameObject object) {
17+
items.add(object);
18+
}
19+
}

src/main/java/io/rpg/model/object/CollectibleGameObject.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import org.jetbrains.annotations.NotNull;
55

66
public final class CollectibleGameObject extends InteractiveGameObject {
7-
public CollectibleGameObject(@NotNull String tag, @NotNull Position position) {
8-
super(tag, position);
7+
public CollectibleGameObject(@NotNull String tag, @NotNull Position position, String assetPath) {
8+
super(tag, position, assetPath);
99
}
1010

1111
@Override

src/main/java/io/rpg/model/object/GameObject.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,5 @@ public void onLeftClick() {
130130
public int getStrength() {
131131
return strength;
132132
}
133+
133134
}

src/main/java/io/rpg/model/object/InteractiveGameObject.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import org.jetbrains.annotations.NotNull;
55

66
public abstract class InteractiveGameObject extends GameObject {
7+
public InteractiveGameObject(@NotNull String tag, @NotNull Position position,String assetPath) {
8+
super(tag, position);
9+
}
710
public InteractiveGameObject(@NotNull String tag, @NotNull Position position) {
811
super(tag, position);
912
}

0 commit comments

Comments
 (0)