Merge branch 'questsort' into nut_test_brimhaven

This commit is contained in:
Gonk
2020-03-07 14:35:55 +01:00
3 changed files with 60 additions and 43 deletions

View File

@@ -116,43 +116,43 @@ public final class HeroinfoActivity_Quests extends Fragment {
groupList.clear();
childList.clear();
for (Quest q : world.quests.getAllQuests()) {
for (String questProgressID : player.getAllQuestProgressIDs()) {
Quest q = world.quests.getQuest(questProgressID);
if (q == null) continue; // This should not happen
if (!q.showInLog) continue; // Do not show
if (player.hasAnyQuestProgress(q.questID)) {
boolean isCompleted = q.isCompleted(player);
boolean isCompleted = q.isCompleted(player);
int v = world.model.uiSelections.selectedQuestFilter;
if (v == 0) { // Active quests
if (isCompleted) continue;
} else if (v == 1) { // All quests
// Always show.
} else if (v == 2) { // Completed quests
if (!isCompleted) continue;
}
int statusResId;
if (isCompleted) {
statusResId = R.string.questlog_queststatus_completed;
} else {
statusResId = R.string.questlog_queststatus_inprogress;
}
Map<String, Object> item = new HashMap<String, Object>();
item.put(mn_questName, q.name);
item.put(mn_questStatus, getString(R.string.questlog_queststatus, getString(statusResId)));
groupList.add(item);
List<Map<String, ?>> logItemList = new ArrayList<Map<String, ?>>();
for (QuestLogEntry e : q.stages) {
if (e.logtext.length() <= 0) continue; // Do not show if displaytext is empty.
if (player.hasExactQuestProgress(q.questID, e.progress)) {
item = new HashMap<String, Object>();
item.put(mn_logText, e.logtext);
logItemList.add(item);
}
}
childList.add(logItemList);
int v = world.model.uiSelections.selectedQuestFilter;
if (v == 0) { // Active quests
if (isCompleted) continue;
} else if (v == 1) { // All quests
// Always show.
} else if (v == 2) { // Completed quests
if (!isCompleted) continue;
}
int statusResId;
if (isCompleted) {
statusResId = R.string.questlog_queststatus_completed;
} else {
statusResId = R.string.questlog_queststatus_inprogress;
}
Map<String, Object> item = new HashMap<String, Object>();
item.put(mn_questName, q.name);
item.put(mn_questStatus, getString(R.string.questlog_queststatus, getString(statusResId)));
groupList.add(item);
List<Map<String, ?>> logItemList = new ArrayList<Map<String, ?>>();
for (QuestLogEntry e : q.stages) {
if (e.logtext.length() <= 0) continue; // Do not show if displaytext is empty.
if (player.hasExactQuestProgress(q.questID, e.progress)) {
item = new HashMap<String, Object>();
item.put(mn_logText, e.logtext);
logItemList.add(item);
}
}
childList.add(logItemList);
}
questlog_contents_adapter.notifyDataSetChanged();
}

View File

@@ -3,8 +3,12 @@ package com.gpl.rpg.AndorsTrail.model.actor;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.UUID;
@@ -19,6 +23,7 @@ import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
import com.gpl.rpg.AndorsTrail.model.item.DropListCollection;
import com.gpl.rpg.AndorsTrail.model.item.Inventory;
import com.gpl.rpg.AndorsTrail.model.item.Loot;
import com.gpl.rpg.AndorsTrail.model.quest.Quest;
import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress;
import com.gpl.rpg.AndorsTrail.savegames.LegacySavegameFormatReaderForPlayer;
import com.gpl.rpg.AndorsTrail.util.Coord;
@@ -42,7 +47,7 @@ public final class Player extends Actor {
public int totalExperience;
public final Range weaponDamage = new Range();
private final HashMap<String, HashSet<Integer> > questProgress = new HashMap<String, HashSet<Integer> >();
private final LinkedHashMap<String, HashSet<Integer> > questProgress = new LinkedHashMap<String, HashSet<Integer> >();
private String spawnMap;
private String spawnPlace;
private final HashMap<String, Integer> alignments = new HashMap<String, Integer>();
@@ -141,6 +146,9 @@ public final class Player extends Actor {
public boolean hasAnyQuestProgress(String questID) {
return questProgress.containsKey(questID);
}
public Collection<String> getAllQuestProgressIDs() {
return new ArrayList<>(this.questProgress.keySet());
}
public boolean isLatestQuestProgress(String questID, int progress) {
if (!questProgress.containsKey(questID)) return false;
if (!questProgress.get(questID).contains(progress)) return false;
@@ -345,16 +353,30 @@ public final class Player extends Actor {
this.spawnPlace = src.readUTF();
if (fileversion > 13) {
LinkedHashMap<String, HashSet<Integer> > questProgress = new LinkedHashMap<String, HashSet<Integer> >();
final int numQuests = src.readInt();
for(int i = 0; i < numQuests; ++i) {
final String questID = src.readUTF();
this.questProgress.put(questID, new HashSet<Integer>());
questProgress.put(questID, new HashSet<Integer>());
final int numProgress = src.readInt();
for(int j = 0; j < numProgress; ++j) {
int progress = src.readInt();
this.questProgress.get(questID).add(progress);
questProgress.get(questID).add(progress);
}
}
// questprogress is randomly sorted until 52 so sort it by quest order
if (fileversion < 52) {
for (Quest q : world.quests.getAllQuests()) {
final HashSet<Integer> questSteps = questProgress.get(q.questID);
if (questSteps != null) {
this.questProgress.put(q.questID, questSteps);
}
}
} else {
this.questProgress.putAll(questProgress);
}
}
this.availableSkillIncreases = 0;

View File

@@ -47,11 +47,6 @@ public final class Quest implements Comparable<Quest> {
@Override
public int compareTo(Quest q) {
int comp = name.compareTo(q.name);
if (comp == 0) {
comp = sortOrder - q.sortOrder;
}
return comp;
return sortOrder - q.sortOrder;
}
}