From 9445093d682c05ee8925cb98bec19525876b726e Mon Sep 17 00:00:00 2001 From: Chris H Date: Sat, 8 Feb 2025 22:25:58 -0500 Subject: [PATCH] Fix Wanderlust from breaking other quests --- .../util/AdventureQuestController.java | 115 +++++++++--------- 1 file changed, 57 insertions(+), 58 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/util/AdventureQuestController.java b/forge-gui-mobile/src/forge/adventure/util/AdventureQuestController.java index ed19393732f..dc21b20202f 100644 --- a/forge-gui-mobile/src/forge/adventure/util/AdventureQuestController.java +++ b/forge-gui-mobile/src/forge/adventure/util/AdventureQuestController.java @@ -146,64 +146,63 @@ public class AdventureQuestController implements Serializable { } private Map nextQuestDate = new HashMap<>(); private int maximumSideQuests = 5; //todo: move to configuration file - private transient boolean inDialog = false; + private transient MapDialog activeDialog = null; private transient Array allQuests = new Array<>(); - private transient Array allSideQuests = new Array<>(); + private final transient Array allSideQuests = new Array<>(); private Queue dialogQueue = new LinkedList<>(); private Map questAvailability = new HashMap<>(); public PointOfInterest mostRecentPOI; - private List enemySpriteList= new ArrayList<>(); + private final List enemySpriteList= new ArrayList<>(); private int nextQuestID = 0; public void showQuestDialogs(GameStage stage) { List finishedQuests = new ArrayList<>(); - - for (AdventureQuestData quest : Current.player().getQuests()) { - DialogData prologue = quest.getPrologue(); - if (prologue != null){ - dialogQueue.add(prologue); - } - for (AdventureQuestStage questStage : quest.stages) - { - if (questStage.getStatus() == INACTIVE) - continue; - if (questStage.prologue != null && !questStage.prologueDisplayed){ - questStage.prologueDisplayed = true; - dialogQueue.add(questStage.prologue); - } - - if (questStage.getStatus() == FAILED && questStage.failureDialog != null){ - dialogQueue.add(questStage.failureDialog); - continue; - } - - if (questStage.getStatus() == COMPLETE && questStage.epilogue != null && !questStage.epilogueDisplayed){ - questStage.epilogueDisplayed = true; - dialogQueue.add(questStage.epilogue); - } - } - - if (quest.failed){ - finishedQuests.add(quest); - if (quest.failureDialog != null){ - dialogQueue.add(quest.failureDialog); - } - } - - if (!quest.completed) + for (AdventureQuestData quest : Current.player().getQuests()) { + DialogData prologue = quest.getPrologue(); + if (prologue != null){ + dialogQueue.add(prologue); + } + for (AdventureQuestStage questStage : quest.stages) + { + if (questStage.getStatus() == INACTIVE) continue; - DialogData epilogue = quest.getEpilogue(); - if (epilogue != null){ - dialogQueue.add(epilogue); + if (questStage.prologue != null && !questStage.prologueDisplayed){ + questStage.prologueDisplayed = true; + dialogQueue.add(questStage.prologue); } - finishedQuests.add(quest); - updateQuestComplete(quest); - } - if (!inDialog){ - inDialog = true; - displayNextDialog((MapStage) stage); - } - for (AdventureQuestData toRemove : finishedQuests) { + if (questStage.getStatus() == FAILED && questStage.failureDialog != null){ + dialogQueue.add(questStage.failureDialog); + continue; + } + + if (questStage.getStatus() == COMPLETE && questStage.epilogue != null && !questStage.epilogueDisplayed){ + questStage.epilogueDisplayed = true; + dialogQueue.add(questStage.epilogue); + } + } + + if (quest.failed){ + finishedQuests.add(quest); + if (quest.failureDialog != null){ + dialogQueue.add(quest.failureDialog); + } + } + + if (!quest.completed) + continue; + DialogData epilogue = quest.getEpilogue(); + if (epilogue != null){ + dialogQueue.add(epilogue); + } + finishedQuests.add(quest); + updateQuestComplete(quest); + } + + if (activeDialog == null && !dialogQueue.isEmpty()){ + displayNextDialog((MapStage) stage); + } + + for (AdventureQuestData toRemove : finishedQuests) { if (!toRemove.failed && locationHasMoreQuests()){ nextQuestDate.remove(toRemove.sourceID); } @@ -219,32 +218,32 @@ public class AdventureQuestController implements Serializable { return new Random().nextFloat() <= 0.85f; } public void displayNextDialog(MapStage stage){ - if (dialogQueue.peek() == null) - { - inDialog = false; + if (dialogQueue.peek() == null) { + activeDialog = null; return; } DialogData data = dialogQueue.remove(); - MapDialog dialog = new MapDialog(data, stage, -1, null); - + activeDialog = new MapDialog(data, stage, -1, null); if (data.options == null || data.options.length == 0) { - dialog.setEffects(data.action); + activeDialog.setEffects(data.action); displayNextDialog(stage); return; } stage.showDialog(); - dialog.activate(); + activeDialog.activate(); ChangeListener listen = new ChangeListener() { @Override public void changed(ChangeEvent changeEvent, Actor actor) { + activeDialog = null; + displayNextDialog(stage); } }; - dialog.addDialogCompleteListener(listen); - if (data.options == null || data.options.length == 0) - { + activeDialog.addDialogCompleteListener(listen); + // Seems weird that data would be null here, but not null up there. Are we changingi these values inside activate? + if (data.options == null || data.options.length == 0) { displayNextDialog(stage); } }