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. */
|
2019-04-20 20:19:17 +02:00
|
|
|
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;
|
2022-02-20 10:17:20 -05:00
|
|
|
//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;
|
2019-08-08 10:48:35 -04:00
|
|
|
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");
|
|
|
|
}
|
|
|
|
}
|