Files
Mindustry/core/src/mindustry/game/Gamemode.java

88 lines
2.2 KiB
Java
Raw Normal View History

2019-12-25 01:39:38 -05:00
package mindustry.game;
2019-01-12 16:55:24 -05:00
2019-12-25 01:39:38 -05:00
import arc.*;
import arc.func.*;
2021-06-02 11:08:08 -04:00
import arc.util.*;
2019-12-25 01:39:38 -05:00
import mindustry.maps.*;
2019-01-12 16:55:24 -05:00
2019-07-24 23:05:16 -04:00
/** Defines preset rule sets. */
public enum Gamemode{
2019-05-12 10:32:08 -04:00
survival(rules -> {
rules.waveTimer = true;
rules.waves = true;
2019-07-24 23:05:16 -04:00
}, map -> map.spawns > 0),
2019-05-12 10:32:08 -04:00
sandbox(rules -> {
rules.infiniteResources = true;
rules.waves = true;
rules.waveTimer = false;
}),
attack(rules -> {
rules.attackMode = true;
//TODO waves is now a bad idea
//rules.waves = true;
2020-06-05 22:38:27 -04:00
rules.waveTimer = true;
2020-06-16 16:04:25 -04:00
2021-07-28 17:28:01 -04:00
rules.waveSpacing = 2f * Time.toMinutes;
2022-09-25 07:11:21 -04:00
rules.waveTeam.rules().infiniteResources = true;
2021-08-18 11:41:38 -04:00
}, map -> map.teams.size > 1),
2019-05-12 10:32:08 -04:00
pvp(rules -> {
rules.pvp = true;
rules.enemyCoreBuildRadius = 600f;
rules.buildCostMultiplier = 1f;
rules.buildSpeedMultiplier = 1f;
rules.unitBuildSpeedMultiplier = 2f;
2019-05-12 10:32:08 -04:00
rules.attackMode = true;
2019-07-24 23:05:16 -04:00
}, map -> map.teams.size > 1),
2019-05-12 10:32:08 -04:00
editor(true, rules -> {
rules.infiniteResources = true;
2024-01-23 21:22:02 -05:00
rules.instantBuild = true;
2019-05-12 10:32:08 -04:00
rules.editor = true;
rules.waves = false;
rules.waveTimer = false;
});
2019-01-12 16:55:24 -05:00
2019-10-29 15:57:25 -04:00
private final Cons<Rules> rules;
private final Boolf<Map> validator;
2019-07-24 23:05:16 -04:00
2019-05-10 19:13:55 -04:00
public final boolean hidden;
2019-07-24 23:05:16 -04:00
public final static Gamemode[] all = values();
2019-01-12 16:55:24 -05:00
2019-10-29 15:57:25 -04:00
Gamemode(Cons<Rules> rules){
2019-05-10 19:13:55 -04:00
this(false, rules);
}
2019-10-29 15:57:25 -04:00
Gamemode(boolean hidden, Cons<Rules> rules){
2019-07-24 23:05:16 -04:00
this(hidden, rules, m -> true);
}
2019-10-29 15:57:25 -04:00
Gamemode(Cons<Rules> rules, Boolf<Map> validator){
2019-07-24 23:05:16 -04:00
this(false, rules, validator);
}
2019-10-29 15:57:25 -04:00
Gamemode(boolean hidden, Cons<Rules> rules, Boolf<Map> validator){
2019-01-12 16:55:24 -05:00
this.rules = rules;
2019-05-10 19:13:55 -04:00
this.hidden = hidden;
2019-07-24 23:05:16 -04:00
this.validator = validator;
2019-01-12 16:55:24 -05:00
}
2019-05-12 10:32:08 -04:00
/** Applies this preset to this ruleset. */
public Rules apply(Rules in){
2019-10-29 15:57:25 -04:00
rules.get(in);
2019-05-12 10:32:08 -04:00
return in;
2019-01-12 16:55:24 -05:00
}
2019-07-24 23:05:16 -04:00
/** @return whether this mode can be played on the specified map. */
public boolean valid(Map map){
2019-10-29 15:57:25 -04:00
return validator.get(map);
2019-07-24 23:05:16 -04:00
}
2019-01-12 16:55:24 -05:00
public String description(){
return Core.bundle.get("mode." + name() + ".description");
}
@Override
public String toString(){
return Core.bundle.get("mode." + name() + ".name");
}
}