New WIP custom map selection

This commit is contained in:
Anuken
2019-05-12 10:32:08 -04:00
parent e5d19a9819
commit 4ae2370137
9 changed files with 225 additions and 153 deletions
+45 -44
View File
@@ -1,63 +1,64 @@
package io.anuke.mindustry.game;
import io.anuke.arc.Core;
import io.anuke.arc.function.Supplier;
import io.anuke.arc.function.Consumer;
/** Defines preset rule sets.. */
public enum Gamemode{
survival(() -> new Rules(){{
waveTimer = true;
waves = true;
unitDrops = true;
spawns = DefaultWaves.get();
}}),
sandbox(() -> new Rules(){{
infiniteResources = true;
waves = true;
waveTimer = false;
respawnTime = 0f;
}}),
attack(() -> new Rules(){{
enemyCheat = true;
unitDrops = true;
waves = false;
attackMode = true;
}}),
pvp(() -> new Rules(){{
pvp = true;
enemyCoreBuildRadius = 600f;
respawnTime = 60 * 10;
buildCostMultiplier = 0.5f;
buildSpeedMultiplier = 2f;
playerDamageMultiplier = 0.45f;
playerHealthMultiplier = 0.8f;
unitBuildSpeedMultiplier = 3f;
unitHealthMultiplier = 2f;
attackMode = true;
}}),
editor(true, () -> new Rules(){{
infiniteResources = true;
editor = true;
waves = false;
enemyCoreBuildRadius = 0f;
waveTimer = false;
respawnTime = 0f;
}}),;
survival(rules -> {
rules.waveTimer = true;
rules.waves = true;
rules.unitDrops = true;
}),
sandbox(rules -> {
rules.infiniteResources = true;
rules.waves = true;
rules.waveTimer = false;
rules.respawnTime = 0f;
}),
attack(rules -> {
rules.enemyCheat = true;
rules.unitDrops = true;
rules.waves = false;
rules.attackMode = true;
}),
pvp(rules -> {
rules.pvp = true;
rules.enemyCoreBuildRadius = 600f;
rules.respawnTime = 60 * 10;
rules.buildCostMultiplier = 0.5f;
rules.buildSpeedMultiplier = 2f;
rules.playerDamageMultiplier = 0.45f;
rules.playerHealthMultiplier = 0.8f;
rules.unitBuildSpeedMultiplier = 3f;
rules.unitHealthMultiplier = 2f;
rules.attackMode = true;
}),
editor(true, rules -> {
rules.infiniteResources = true;
rules.editor = true;
rules.waves = false;
rules.enemyCoreBuildRadius = 0f;
rules.waveTimer = false;
rules.respawnTime = 0f;
});
private final Supplier<Rules> rules;
private final Consumer<Rules> rules;
public final boolean hidden;
Gamemode(Supplier<Rules> rules){
Gamemode(Consumer<Rules> rules){
this(false, rules);
}
Gamemode(boolean hidden, Supplier<Rules> rules){
Gamemode(boolean hidden, Consumer<Rules> rules){
this.rules = rules;
this.hidden = hidden;
}
public Rules get(){
return rules.get();
/** Applies this preset to this ruleset. */
public Rules apply(Rules in){
rules.accept(in);
return in;
}
public String description(){
@@ -2,6 +2,7 @@ package io.anuke.mindustry.game;
import io.anuke.annotations.Annotations.Serialize;
import io.anuke.arc.collection.Array;
import io.anuke.mindustry.io.JsonIO;
import io.anuke.mindustry.type.Zone;
/**
@@ -62,4 +63,9 @@ public class Rules{
public boolean attackMode = false;
/** Whether this is the editor gamemode. */
public boolean editor = false;
/** Copies this ruleset exactly. Not very efficient at all, do not use often. */
public Rules copy(){
return JsonIO.read(Rules.class, JsonIO.write(this));
}
}