Files
Mindustry/core/src/mindustry/game/Objectives.java
2022-04-09 13:03:51 -04:00

130 lines
3.4 KiB
Java

package mindustry.game;
import arc.*;
import arc.scene.ui.layout.*;
import mindustry.ctype.*;
import mindustry.type.*;
/** Holds objective classes. */
public class Objectives{
public static class Research implements Objective{
public UnlockableContent content;
public Research(UnlockableContent content){
this.content = content;
}
protected Research(){}
@Override
public boolean complete(){
return content.unlocked();
}
@Override
public String display(){
return Core.bundle.format("requirement.research",
(content.techNode == null || content.techNode.parent == null || content.techNode.parent.content.unlocked()) && !(content instanceof Item) ?
(content.emoji() + " " + content.localizedName) : "???");
}
}
public static class Produce implements Objective{
public UnlockableContent content;
public Produce(UnlockableContent content){
this.content = content;
}
protected Produce(){}
@Override
public boolean complete(){
return content.unlocked();
}
@Override
public String display(){
return Core.bundle.format("requirement.produce",
content.unlocked() ? (content.emoji() + " " + content.localizedName) : "???");
}
}
public static class SectorComplete implements Objective{
public SectorPreset preset;
public SectorComplete(SectorPreset zone){
this.preset = zone;
}
protected SectorComplete(){}
@Override
public boolean complete(){
return preset.sector.save != null && preset.sector.isCaptured() && preset.sector.hasBase();
}
@Override
public String display(){
return Core.bundle.format("requirement.capture", preset.localizedName);
}
}
public static class OnSector implements Objective{
public SectorPreset preset;
public OnSector(SectorPreset zone){
this.preset = zone;
}
protected OnSector(){}
@Override
public boolean complete(){
return preset.sector.hasBase();
}
@Override
public String display(){
return Core.bundle.format("requirement.onsector", preset.localizedName);
}
}
public static class OnPlanet implements Objective{
public Planet planet;
public OnPlanet(Planet planet){
this.planet = planet;
}
protected OnPlanet(){}
@Override
public boolean complete(){
return planet.sectors.contains(Sector::hasBase);
}
@Override
public String display(){
return Core.bundle.format("requirement.onplanet", planet.localizedName);
}
}
/** Defines a specific objective for a game. */
public interface Objective{
/** @return whether this objective is met. */
boolean complete();
/** @return the string displayed when this objective is completed, in imperative form.
* e.g. when the objective is 'complete 10 waves', this would display "complete 10 waves". */
String display();
/** Build a display for this zone requirement.*/
default void build(Table table){
}
}
}