164 lines
4.5 KiB
Java
164 lines
4.5 KiB
Java
package mindustry.service;
|
|
|
|
import arc.util.*;
|
|
|
|
import static mindustry.Vars.*;
|
|
|
|
public enum Achievement{
|
|
kill1kEnemies(SStat.unitsDestroyed, 1000),
|
|
kill100kEnemies(SStat.unitsDestroyed, 100_000),
|
|
launch100kItems(SStat.itemsLaunched, 100_000),
|
|
|
|
produce5kMin(SStat.maxProduction, 5000),
|
|
produce50kMin(SStat.maxProduction, 50_000),
|
|
win10Attack(SStat.attacksWon, 10),
|
|
win10PvP(SStat.pvpsWon, 10),
|
|
defeatAttack5Waves,
|
|
launch30Times(SStat.timesLaunched, 30),
|
|
captureBackground,
|
|
survive100Waves(SStat.maxWavesSurvived, 100),
|
|
researchAll, //TODO - remake/change?
|
|
shockWetEnemy,
|
|
killEnemyPhaseWall,
|
|
researchRouter,
|
|
place10kBlocks(SStat.blocksBuilt, 10_000),
|
|
destroy1kBlocks(SStat.blocksDestroyed, 1000),
|
|
overheatReactor(SStat.reactorsOverheated, 1),
|
|
make10maps(SStat.mapsMade, 10),
|
|
downloadMapWorkshop,
|
|
publishMap(SStat.mapsPublished, 1),
|
|
defeatBoss(SStat.bossesDefeated, 1),
|
|
captureAllSectors,
|
|
control10Sectors(SStat.sectorsControlled, 10),
|
|
drop10kitems,
|
|
powerupImpactReactor,
|
|
obtainThorium,
|
|
obtainTitanium,
|
|
suicideBomb,
|
|
buildGroundFactory,
|
|
issueAttackCommand, //TODO - test
|
|
active100Units(SStat.maxUnitActive, 100),
|
|
build1000Units(SStat.unitsBuilt, 1000),
|
|
buildAllUnits(SStat.unitTypesBuilt, 30),
|
|
buildT5,
|
|
pickupT5,
|
|
active10Polys,
|
|
dieExclusion,
|
|
drown,
|
|
fillCoreAllCampaign,
|
|
hostServer10(SStat.maxPlayersServer, 10),
|
|
buildMeltdownSpectre, //technically inaccurate
|
|
launchItemPad,
|
|
chainRouters,
|
|
circleConveyor,
|
|
becomeRouter,
|
|
create20Schematics(SStat.schematicsCreated, 20),
|
|
create500Schematics(SStat.schematicsCreated, 500), //TODO - test
|
|
survive10WavesNoBlocks,
|
|
captureNoBlocksBroken,
|
|
useFlameAmmo,
|
|
coolTurret,
|
|
enablePixelation,
|
|
openWiki,
|
|
|
|
//TODO new ones
|
|
|
|
allTransportOneMap, //TODO - test
|
|
buildOverdriveProjector, //TODO - test
|
|
buildMendProjector, //TODO - test
|
|
buildWexWater, //TODO - test
|
|
|
|
have10mItems(SStat.totalCampaignItems, 10_000_000), //TODO - test
|
|
killEclipseDuo, //TODO - test
|
|
|
|
completeErekir, //TODO - test
|
|
completeSerpulo, //TODO - test
|
|
|
|
launchCoreSchematic, //TODO - test
|
|
nucleusGroundZero, //TODO - test
|
|
|
|
neoplasmWater, //TODO - test
|
|
blastFrozenUnit, //TODO - test
|
|
|
|
allBlocksSerpulo, //TODO - test
|
|
allBlocksErekir, //TODO - test
|
|
|
|
//TODO are these necessary?
|
|
//allTurretsSerpulo, //TODO
|
|
//allTurretsErekir, //TODO
|
|
//allTechSerpulo, //TODO
|
|
//allTechErekir, //TODO
|
|
|
|
breakForceProjector, //TODO - test
|
|
researchLogic, //TODO - Steam - test
|
|
|
|
negative10kPower, //TODO - test
|
|
positive100kPower, //TODO - test
|
|
store1milPower, //TODO - test
|
|
|
|
blastGenerator, //TODO - test
|
|
neoplasiaExplosion, //TODO - test
|
|
|
|
installMod, //TODO - test
|
|
routerLanguage, //TODO - test
|
|
joinCommunityServer, //TODO - test
|
|
openConsole, //TODO - test
|
|
|
|
controlTurret, //TODO - Steam - icon done
|
|
dropUnitsCoreZone, //TODO - Steam - icon done
|
|
destroyScatterFlare, //TODO - Steam - icon done
|
|
boostUnit, //TODO - Steam - icon done
|
|
boostBuildingFloor, //TODO - Steam - icon done
|
|
|
|
hoverUnitLiquid, //TODO - Steam - icon done
|
|
|
|
break100Boulders(SStat.bouldersDeconstructed, 100), //TODO - Steam - icon done
|
|
break10000Boulders(SStat.bouldersDeconstructed, 10_000), //TODO - Steam - icon done
|
|
|
|
shockwaveTowerUse, //TODO - Steam - icon done
|
|
|
|
useAnimdustryEmoji, //TODO - Steam - icon done
|
|
|
|
;
|
|
|
|
private final SStat stat;
|
|
private final int statGoal;
|
|
private boolean completed = false;
|
|
|
|
public static final Achievement[] all = values();
|
|
|
|
/** Creates an achievement that is triggered when this stat reaches a number.*/
|
|
Achievement(SStat stat, int goal){
|
|
this.stat = stat;
|
|
this.statGoal = goal;
|
|
}
|
|
|
|
Achievement(){
|
|
this(null, 0);
|
|
}
|
|
|
|
public void complete(){
|
|
if(!isAchieved()){
|
|
//can't complete achievements with the dev console shown.
|
|
if(ui != null && ui.consolefrag != null && ui.consolefrag.shown() && !OS.username.equals("anuke")) return;
|
|
|
|
service.completeAchievement(name());
|
|
service.storeStats();
|
|
completed = true;
|
|
}
|
|
}
|
|
|
|
public void checkCompletion(){
|
|
if(!isAchieved() && stat != null && stat.get() >= statGoal){
|
|
complete();
|
|
}
|
|
}
|
|
|
|
public boolean isAchieved(){
|
|
if(completed){
|
|
return true;
|
|
}
|
|
return (completed = service.isAchieved(name()));
|
|
}
|
|
}
|