130 lines
3.4 KiB
Java
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){
|
|
|
|
}
|
|
}
|
|
}
|