From 43c9f4ce9ecd0a407aeb8b31c9142607b553ebe4 Mon Sep 17 00:00:00 2001 From: Siphalor Date: Fri, 10 Jul 2020 10:41:00 +0200 Subject: [PATCH] Add direct quest resolving --- .../java/de/siphalor/was/WhatAStorage.java | 38 ++++++++++++++++++- .../was/visual/jfx/QuestController.java | 13 +++++++ src/main/resources/content/quests/test.csv | 6 +++ 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/content/quests/test.csv diff --git a/src/main/java/de/siphalor/was/WhatAStorage.java b/src/main/java/de/siphalor/was/WhatAStorage.java index c707510..8c14ab7 100644 --- a/src/main/java/de/siphalor/was/WhatAStorage.java +++ b/src/main/java/de/siphalor/was/WhatAStorage.java @@ -19,6 +19,7 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; public class WhatAStorage { @@ -100,8 +101,8 @@ public class WhatAStorage { } public void loadGame() { - //questGenerator = questManager.get("normal"); - questGenerator = new RandomQuestGenerator(); + questGenerator = questManager.get("test"); + //questGenerator = new RandomQuestGenerator(); quests.clear(); storage = new Storage(GRID_SIZE, GRID_SIZE, GRID_SIZE); balance = new Balance(); @@ -198,6 +199,39 @@ public class WhatAStorage { return false; } + public boolean canQuestsResolve(int in, int out) { + int s = quests.size(); + if (in < s && in >= 0 && out < s && out >= 0) { + if (quests.get(in).getType() == Quest.Type.IN && quests.get(out).getType() == Quest.Type.OUT) { + Product product = quests.get(in).getProduct(); + return product.equals(quests.get(out).getProduct()); + } + } + return false; + } + + public boolean resolveQuests(int in, int out) { + int s = quests.size(); + if (in < s && in >= 0 && out < s && out >= 0) { + if (quests.get(in).getType() == Quest.Type.IN && quests.get(out).getType() == Quest.Type.OUT) { + Product product = quests.get(in).getProduct(); + if (product.equals(quests.get(out).getProduct())) { + addTransaction(Balance.Transaction.STORE, quests.get(in).getReward()); + addTransaction(Balance.Transaction.DELIVER, quests.get(out).getReward()); + + if (out > in) out--; + quests.remove(in); + quests.remove(out); + + visual.onQuestRemoved(in); + visual.onQuestRemoved(out); + return true; + } + } + } + return false; + } + public void moveProduct(int x1, int y1, int x2, int y2) { Product product = storage.get(x1, y1).front(); if (product != null && product.testY(y2)) { diff --git a/src/main/java/de/siphalor/was/visual/jfx/QuestController.java b/src/main/java/de/siphalor/was/visual/jfx/QuestController.java index b67a1c4..829eaee 100644 --- a/src/main/java/de/siphalor/was/visual/jfx/QuestController.java +++ b/src/main/java/de/siphalor/was/visual/jfx/QuestController.java @@ -55,6 +55,12 @@ public class QuestController { dragEvent.acceptTransferModes(TransferMode.MOVE); dragEvent.consume(); } + } else if (product instanceof DraggedProduct.Quest) { + DraggedProduct.Quest quest = (DraggedProduct.Quest) product; + if ((WhatAStorage.getInstance().canQuestsResolve(quest.index, getIndex()))) { + dragEvent.acceptTransferModes(TransferMode.MOVE); + dragEvent.consume(); + } } } } @@ -71,6 +77,13 @@ public class QuestController { dragEvent.consume(); return; } + } else if (product instanceof DraggedProduct.Quest) { + DraggedProduct.Quest quest = (DraggedProduct.Quest) product; + if (WhatAStorage.getInstance().resolveQuests(quest.index, getIndex())) { + dragEvent.setDropCompleted(true); + dragEvent.consume(); + return; + } } } dragEvent.setDropCompleted(false); diff --git a/src/main/resources/content/quests/test.csv b/src/main/resources/content/quests/test.csv new file mode 100644 index 0000000..8c37114 --- /dev/null +++ b/src/main/resources/content/quests/test.csv @@ -0,0 +1,6 @@ +in,paper,200,blue,a5 +out,paper,200,blue,a5 +in,paper,200,blue,a5 +out,paper,200,blue,a5 +in,paper,200,blue,a5 +out,paper,200,blue,a5