Implemented gamemode validation

This commit is contained in:
Anuken
2019-07-24 23:05:16 -04:00
parent c9bd253960
commit bf7803d554
8 changed files with 80 additions and 113 deletions
+26 -6
View File
@@ -1,15 +1,18 @@
package io.anuke.mindustry.game;
import io.anuke.arc.Core;
import io.anuke.arc.function.Consumer;
import io.anuke.arc.*;
import io.anuke.arc.function.*;
import io.anuke.mindustry.maps.*;
/** Defines preset rule sets.. */
import static io.anuke.mindustry.Vars.waveTeam;
/** Defines preset rule sets. */
public enum Gamemode{
survival(rules -> {
rules.waveTimer = true;
rules.waves = true;
rules.unitDrops = true;
}),
}, map -> map.spawns > 0),
sandbox(rules -> {
rules.infiniteResources = true;
rules.waves = true;
@@ -21,7 +24,7 @@ public enum Gamemode{
rules.unitDrops = true;
rules.waves = false;
rules.attackMode = true;
}),
}, map -> map.teams.contains(waveTeam.ordinal())),
pvp(rules -> {
rules.pvp = true;
rules.enemyCoreBuildRadius = 600f;
@@ -33,7 +36,7 @@ public enum Gamemode{
rules.unitBuildSpeedMultiplier = 3f;
rules.unitHealthMultiplier = 3f;
rules.attackMode = true;
}),
}, map -> map.teams.size > 1),
editor(true, rules -> {
rules.infiniteResources = true;
rules.editor = true;
@@ -44,15 +47,27 @@ public enum Gamemode{
});
private final Consumer<Rules> rules;
private final Predicate<Map> validator;
public final boolean hidden;
public final static Gamemode[] all = values();
Gamemode(Consumer<Rules> rules){
this(false, rules);
}
Gamemode(boolean hidden, Consumer<Rules> rules){
this(hidden, rules, m -> true);
}
Gamemode(Consumer<Rules> rules, Predicate<Map> validator){
this(false, rules, validator);
}
Gamemode(boolean hidden, Consumer<Rules> rules, Predicate<Map> validator){
this.rules = rules;
this.hidden = hidden;
this.validator = validator;
}
/** Applies this preset to this ruleset. */
@@ -61,6 +76,11 @@ public enum Gamemode{
return in;
}
/** @return whether this mode can be played on the specified map. */
public boolean valid(Map map){
return validator.test(map);
}
public String description(){
return Core.bundle.get("mode." + name() + ".description");
}