v0.9.0a: Added a check for replaced badges when badges are loaded/saved

This commit is contained in:
Evan Debenham 2020-10-08 21:52:24 -04:00
parent d14cafa190
commit 714349f769

View File

@ -212,10 +212,14 @@ public class Badges {
} }
} }
addReplacedBadges(badges);
return badges; return badges;
} }
public static void store( Bundle bundle, HashSet<Badge> badges ) { public static void store( Bundle bundle, HashSet<Badge> badges ) {
addReplacedBadges(badges);
int count = 0; int count = 0;
String names[] = new String[badges.size()]; String names[] = new String[badges.size()];
@ -239,16 +243,6 @@ public class Badges {
Bundle bundle = FileUtils.bundleFromFile( BADGES_FILE ); Bundle bundle = FileUtils.bundleFromFile( BADGES_FILE );
global = restore( bundle ); global = restore( bundle );
//fixes a bug with challenge badges in pre-0.9.0 saves
if (global.contains(Badge.CHAMPION_3)){
saveNeeded = !global.contains(Badge.CHAMPION_2) || global.contains(Badge.CHAMPION_1);
global.add(Badge.CHAMPION_2);
global.add(Badge.CHAMPION_1);
} else if (global.contains(Badge.CHAMPION_2)){
saveNeeded = !global.contains(Badge.CHAMPION_1);
global.add(Badge.CHAMPION_1);
}
} catch (IOException e) { } catch (IOException e) {
global = new HashSet<>(); global = new HashSet<>();
} }
@ -896,6 +890,36 @@ public class Badges {
} }
private static final Badge[][] tierBadgeReplacements = new Badge[][]{
{Badge.MONSTERS_SLAIN_1, Badge.MONSTERS_SLAIN_2, Badge.MONSTERS_SLAIN_3, Badge.MONSTERS_SLAIN_4},
{Badge.GOLD_COLLECTED_1, Badge.GOLD_COLLECTED_2, Badge.GOLD_COLLECTED_3, Badge.GOLD_COLLECTED_4},
{Badge.ITEM_LEVEL_1, Badge.ITEM_LEVEL_2, Badge.ITEM_LEVEL_3, Badge.ITEM_LEVEL_4},
{Badge.LEVEL_REACHED_1, Badge.LEVEL_REACHED_2, Badge.LEVEL_REACHED_3, Badge.LEVEL_REACHED_4},
{Badge.STRENGTH_ATTAINED_1, Badge.STRENGTH_ATTAINED_2, Badge.STRENGTH_ATTAINED_3, Badge.STRENGTH_ATTAINED_4},
{Badge.FOOD_EATEN_1, Badge.FOOD_EATEN_2, Badge.FOOD_EATEN_3, Badge.FOOD_EATEN_4},
{Badge.POTIONS_COOKED_1, Badge.POTIONS_COOKED_2, Badge.POTIONS_COOKED_3, Badge.POTIONS_COOKED_4 },
{Badge.BOSS_SLAIN_1, Badge.BOSS_SLAIN_2, Badge.BOSS_SLAIN_3, Badge.BOSS_SLAIN_4},
{Badge.GAMES_PLAYED_1, Badge.GAMES_PLAYED_2, Badge.GAMES_PLAYED_3, Badge.GAMES_PLAYED_4},
{Badge.CHAMPION_1, Badge.CHAMPION_2, Badge.CHAMPION_3}
};
private static final Badge[][] metaBadgeReplacements = new Badge[][]{
{Badge.DEATH_FROM_FIRE, Badge.YASD},
{Badge.DEATH_FROM_GAS, Badge.YASD},
{Badge.DEATH_FROM_HUNGER, Badge.YASD},
{Badge.DEATH_FROM_POISON, Badge.YASD},
{Badge.DEATH_FROM_GLYPH, Badge.YASD},
{Badge.DEATH_FROM_FALLING, Badge.YASD },
{Badge.ALL_WEAPONS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED},
{Badge.ALL_ARMOR_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED},
{Badge.ALL_WANDS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED},
{Badge.ALL_RINGS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED},
{Badge.ALL_ARTIFACTS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED},
{Badge.ALL_POTIONS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED},
{Badge.ALL_SCROLLS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED}
};
public static List<Badge> filterReplacedBadges( List<Badge> badges ) { public static List<Badge> filterReplacedBadges( List<Badge> badges ) {
leaveBest( badges, Badge.MONSTERS_SLAIN_1, Badge.MONSTERS_SLAIN_2, Badge.MONSTERS_SLAIN_3, Badge.MONSTERS_SLAIN_4 ); leaveBest( badges, Badge.MONSTERS_SLAIN_1, Badge.MONSTERS_SLAIN_2, Badge.MONSTERS_SLAIN_3, Badge.MONSTERS_SLAIN_4 );
@ -906,22 +930,17 @@ public class Badges {
leaveBest( badges, Badge.FOOD_EATEN_1, Badge.FOOD_EATEN_2, Badge.FOOD_EATEN_3, Badge.FOOD_EATEN_4 ); leaveBest( badges, Badge.FOOD_EATEN_1, Badge.FOOD_EATEN_2, Badge.FOOD_EATEN_3, Badge.FOOD_EATEN_4 );
leaveBest( badges, Badge.ITEM_LEVEL_1, Badge.ITEM_LEVEL_2, Badge.ITEM_LEVEL_3, Badge.ITEM_LEVEL_4 ); leaveBest( badges, Badge.ITEM_LEVEL_1, Badge.ITEM_LEVEL_2, Badge.ITEM_LEVEL_3, Badge.ITEM_LEVEL_4 );
leaveBest( badges, Badge.POTIONS_COOKED_1, Badge.POTIONS_COOKED_2, Badge.POTIONS_COOKED_3, Badge.POTIONS_COOKED_4 ); leaveBest( badges, Badge.POTIONS_COOKED_1, Badge.POTIONS_COOKED_2, Badge.POTIONS_COOKED_3, Badge.POTIONS_COOKED_4 );
leaveBest( badges, Badge.DEATH_FROM_FIRE, Badge.YASD );
leaveBest( badges, Badge.DEATH_FROM_GAS, Badge.YASD );
leaveBest( badges, Badge.DEATH_FROM_HUNGER, Badge.YASD );
leaveBest( badges, Badge.DEATH_FROM_POISON, Badge.YASD );
leaveBest( badges, Badge.DEATH_FROM_GLYPH, Badge.YASD );
leaveBest( badges, Badge.DEATH_FROM_FALLING, Badge.YASD );
leaveBest( badges, Badge.ALL_WEAPONS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED );
leaveBest( badges, Badge.ALL_ARMOR_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED );
leaveBest( badges, Badge.ALL_WANDS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED );
leaveBest( badges, Badge.ALL_RINGS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED );
leaveBest( badges, Badge.ALL_ARTIFACTS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED );
leaveBest( badges, Badge.ALL_POTIONS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED );
leaveBest( badges, Badge.ALL_SCROLLS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED );
leaveBest( badges, Badge.GAMES_PLAYED_1, Badge.GAMES_PLAYED_2, Badge.GAMES_PLAYED_3, Badge.GAMES_PLAYED_4 ); leaveBest( badges, Badge.GAMES_PLAYED_1, Badge.GAMES_PLAYED_2, Badge.GAMES_PLAYED_3, Badge.GAMES_PLAYED_4 );
leaveBest( badges, Badge.CHAMPION_1, Badge.CHAMPION_2, Badge.CHAMPION_3 ); leaveBest( badges, Badge.CHAMPION_1, Badge.CHAMPION_2, Badge.CHAMPION_3 );
for (Badge[] tierReplace : tierBadgeReplacements){
leaveBest( badges, tierReplace );
}
for (Badge[] metaReplace : metaBadgeReplacements){
leaveBest( badges, metaReplace );
}
return badges; return badges;
} }
@ -938,16 +957,9 @@ public class Badges {
public static List<Badge> filterHigherIncrementalBadges(List<Badges.Badge> badges ) { public static List<Badge> filterHigherIncrementalBadges(List<Badges.Badge> badges ) {
leaveWorst( badges, Badge.MONSTERS_SLAIN_1, Badge.MONSTERS_SLAIN_2, Badge.MONSTERS_SLAIN_3, Badge.MONSTERS_SLAIN_4 ); for (Badge[] tierReplace : tierBadgeReplacements){
leaveWorst( badges, Badge.GOLD_COLLECTED_1, Badge.GOLD_COLLECTED_2, Badge.GOLD_COLLECTED_3, Badge.GOLD_COLLECTED_4 ); leaveWorst( badges, tierReplace );
leaveWorst( badges, Badge.BOSS_SLAIN_1, Badge.BOSS_SLAIN_2, Badge.BOSS_SLAIN_3, Badge.BOSS_SLAIN_4 ); }
leaveWorst( badges, Badge.LEVEL_REACHED_1, Badge.LEVEL_REACHED_2, Badge.LEVEL_REACHED_3, Badge.LEVEL_REACHED_4 );
leaveWorst( badges, Badge.STRENGTH_ATTAINED_1, Badge.STRENGTH_ATTAINED_2, Badge.STRENGTH_ATTAINED_3, Badge.STRENGTH_ATTAINED_4 );
leaveWorst( badges, Badge.FOOD_EATEN_1, Badge.FOOD_EATEN_2, Badge.FOOD_EATEN_3, Badge.FOOD_EATEN_4 );
leaveWorst( badges, Badge.ITEM_LEVEL_1, Badge.ITEM_LEVEL_2, Badge.ITEM_LEVEL_3, Badge.ITEM_LEVEL_4 );
leaveWorst( badges, Badge.POTIONS_COOKED_1, Badge.POTIONS_COOKED_2, Badge.POTIONS_COOKED_3, Badge.POTIONS_COOKED_4 );
leaveWorst( badges, Badge.GAMES_PLAYED_1, Badge.GAMES_PLAYED_2, Badge.GAMES_PLAYED_3, Badge.GAMES_PLAYED_4 );
leaveWorst( badges, Badge.CHAMPION_1, Badge.CHAMPION_2, Badge.CHAMPION_3 );
Collections.sort( badges ); Collections.sort( badges );
@ -964,4 +976,28 @@ public class Badges {
} }
} }
} }
public static Collection<Badge> addReplacedBadges(Collection<Badges.Badge> badges ) {
for (Badge[] tierReplace : tierBadgeReplacements){
addLower( badges, tierReplace );
}
for (Badge[] metaReplace : metaBadgeReplacements){
addLower( badges, metaReplace );
}
return badges;
}
private static void addLower( Collection<Badge> list, Badge...badges ) {
for (int i=badges.length-1; i > 0; i--) {
if (list.contains( badges[i])) {
for (int j=0; j < i; j++) {
list.add( badges[j] );
}
break;
}
}
}
} }