New mission classes
This commit is contained in:
@@ -7,6 +7,7 @@ import io.anuke.mindustry.game.Difficulty;
|
||||
import io.anuke.mindustry.game.Saves.SaveSlot;
|
||||
import io.anuke.mindustry.game.SpawnGroup;
|
||||
import io.anuke.mindustry.maps.missions.Mission;
|
||||
import io.anuke.mindustry.maps.missions.VictoryMission;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.ucore.util.Bits;
|
||||
@@ -15,6 +16,8 @@ import static io.anuke.mindustry.Vars.control;
|
||||
|
||||
@Serialize
|
||||
public class Sector{
|
||||
private static final Mission victoryMission = new VictoryMission();
|
||||
|
||||
/**Position on the map, can be positive or negative.*/
|
||||
public short x, y;
|
||||
/**Whether this sector has already been completed.*/
|
||||
@@ -52,7 +55,7 @@ public class Sector{
|
||||
}
|
||||
|
||||
public Mission currentMission(){
|
||||
return missions.get(Math.min(completedMissions, missions.size - 1));
|
||||
return completedMissions >= missions.size ? victoryMission : missions.get(completedMissions);
|
||||
}
|
||||
|
||||
public int getSeed(){
|
||||
|
||||
@@ -20,7 +20,6 @@ import io.anuke.mindustry.world.blocks.Floor;
|
||||
import io.anuke.mindustry.world.blocks.OreBlock;
|
||||
import io.anuke.ucore.noise.RidgedPerlin;
|
||||
import io.anuke.ucore.noise.Simplex;
|
||||
import io.anuke.ucore.noise.VoronoiNoise;
|
||||
import io.anuke.ucore.util.Geometry;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.SeedRandom;
|
||||
@@ -37,15 +36,12 @@ public class WorldGenerator{
|
||||
private Simplex sim2 = new Simplex(baseSeed + 1);
|
||||
private Simplex sim3 = new Simplex(baseSeed + 2);
|
||||
private RidgedPerlin rid = new RidgedPerlin(baseSeed + 4, 1);
|
||||
private VoronoiNoise vn = new VoronoiNoise(baseSeed + 2, (short)0);
|
||||
private SeedRandom random = new SeedRandom(baseSeed + 3);
|
||||
|
||||
private GenResult result = new GenResult();
|
||||
private ObjectMap<Block, Block> decoration;
|
||||
|
||||
public WorldGenerator(){
|
||||
vn.setUseDistance(true);
|
||||
|
||||
decoration = Mathf.map(
|
||||
Blocks.grass, Blocks.shrub,
|
||||
Blocks.stone, Blocks.rock,
|
||||
|
||||
34
core/src/io/anuke/mindustry/maps/missions/ActionMission.java
Normal file
34
core/src/io/anuke/mindustry/maps/missions/ActionMission.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package io.anuke.mindustry.maps.missions;
|
||||
|
||||
import io.anuke.mindustry.Vars;
|
||||
import io.anuke.mindustry.game.GameMode;
|
||||
|
||||
import static io.anuke.mindustry.Vars.threads;
|
||||
|
||||
/**A mission which simply runs a single action and is completed instantly.*/
|
||||
public abstract class ActionMission implements Mission{
|
||||
private Runnable runner;
|
||||
|
||||
public ActionMission(Runnable runner){
|
||||
this.runner = runner;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isComplete(){
|
||||
if(runner != null){
|
||||
threads.run(runner);
|
||||
runner = null;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String displayString(){
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public GameMode getMode(){
|
||||
return Vars.state.mode;
|
||||
}
|
||||
}
|
||||
@@ -7,15 +7,10 @@ import io.anuke.mindustry.game.GameMode;
|
||||
import io.anuke.mindustry.game.Team;
|
||||
import io.anuke.mindustry.maps.generation.FortressGenerator;
|
||||
import io.anuke.mindustry.maps.generation.Generation;
|
||||
import io.anuke.ucore.scene.ui.layout.Table;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
|
||||
public class BattleMission implements Mission{
|
||||
private final static int coreX = 60, coreY = 60;
|
||||
@Override
|
||||
public void display(Table table){
|
||||
table.add("$text.mission.battle");
|
||||
}
|
||||
|
||||
@Override
|
||||
public GameMode getMode(){
|
||||
|
||||
49
core/src/io/anuke/mindustry/maps/missions/BlockMission.java
Normal file
49
core/src/io/anuke/mindustry/maps/missions/BlockMission.java
Normal file
@@ -0,0 +1,49 @@
|
||||
package io.anuke.mindustry.maps.missions;
|
||||
|
||||
import io.anuke.mindustry.game.EventType.BlockBuildEvent;
|
||||
import io.anuke.mindustry.game.GameMode;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.ucore.core.Events;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
|
||||
import static io.anuke.mindustry.Vars.defaultTeam;
|
||||
import static io.anuke.mindustry.Vars.world;
|
||||
|
||||
/**A mission in which the player must place a block.*/
|
||||
public class BlockMission implements Mission{
|
||||
private final Block block;
|
||||
private boolean complete;
|
||||
|
||||
static{
|
||||
Events.on(BlockBuildEvent.class, event -> {
|
||||
if(world.getSector() != null && event.team == defaultTeam){
|
||||
Mission mission = world.getSector().currentMission();
|
||||
if(mission instanceof BlockMission){
|
||||
BlockMission block = (BlockMission)world.getSector().currentMission();
|
||||
if(block.block == event.tile.block()){
|
||||
block.complete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public BlockMission(Block block){
|
||||
this.block = block;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isComplete(){
|
||||
return complete;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String displayString(){
|
||||
return Bundles.format("text.mission.block", block.formalName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GameMode getMode(){
|
||||
return GameMode.noWaves;
|
||||
}
|
||||
}
|
||||
17
core/src/io/anuke/mindustry/maps/missions/ExpandMission.java
Normal file
17
core/src/io/anuke/mindustry/maps/missions/ExpandMission.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package io.anuke.mindustry.maps.missions;
|
||||
|
||||
import static io.anuke.mindustry.Vars.*;
|
||||
|
||||
/**An action mission which simply expands the sector.*/
|
||||
public class ExpandMission extends ActionMission{
|
||||
|
||||
public ExpandMission(int expandX, int expandY){
|
||||
super(() -> {
|
||||
if(headless){
|
||||
world.sectors().expandSector(world.getSector(), expandX, expandY);
|
||||
}else{
|
||||
ui.loadLogic(() -> world.sectors().expandSector(world.getSector(), expandX, expandY));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,10 @@ public interface Mission{
|
||||
boolean isComplete();
|
||||
String displayString();
|
||||
GameMode getMode();
|
||||
void display(Table table);
|
||||
|
||||
default void display(Table table){
|
||||
table.add(displayString());
|
||||
}
|
||||
|
||||
default Array<SpawnGroup> getWaves(Sector sector){
|
||||
return new Array<>();
|
||||
|
||||
@@ -3,9 +3,12 @@ package io.anuke.mindustry.maps.missions;
|
||||
import io.anuke.mindustry.Vars;
|
||||
import io.anuke.mindustry.game.GameMode;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.ucore.scene.ui.layout.Table;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
|
||||
import static io.anuke.mindustry.Vars.state;
|
||||
|
||||
/**A mission that is completed when the player obtains items in their core.*/
|
||||
public class ResourceMission implements Mission{
|
||||
private final Item item;
|
||||
private final int amount;
|
||||
@@ -15,11 +18,6 @@ public class ResourceMission implements Mission{
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void display(Table table){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public GameMode getMode(){
|
||||
return GameMode.waves;
|
||||
@@ -27,7 +25,12 @@ public class ResourceMission implements Mission{
|
||||
|
||||
@Override
|
||||
public boolean isComplete(){
|
||||
return Vars.state.teams.get(Vars.defaultTeam).cores.first().entity.items.has(item, amount);
|
||||
for(Tile tile : state.teams.get(Vars.defaultTeam).cores){
|
||||
if(tile.entity.items.has(item, amount)){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package io.anuke.mindustry.maps.missions;
|
||||
|
||||
import io.anuke.mindustry.game.GameMode;
|
||||
import io.anuke.ucore.scene.ui.layout.Table;
|
||||
|
||||
public class VictoryMission implements Mission{
|
||||
@Override
|
||||
public boolean isComplete(){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String displayString(){
|
||||
return "none";
|
||||
}
|
||||
|
||||
@Override
|
||||
public GameMode getMode(){
|
||||
return GameMode.victory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void display(Table table){
|
||||
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,12 @@ package io.anuke.mindustry.maps.missions;
|
||||
|
||||
import com.badlogic.gdx.math.GridPoint2;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.game.*;
|
||||
import io.anuke.mindustry.game.GameMode;
|
||||
import io.anuke.mindustry.game.SpawnGroup;
|
||||
import io.anuke.mindustry.game.Team;
|
||||
import io.anuke.mindustry.game.Waves;
|
||||
import io.anuke.mindustry.maps.Sector;
|
||||
import io.anuke.mindustry.maps.generation.Generation;
|
||||
import io.anuke.ucore.scene.ui.layout.Table;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
|
||||
import static io.anuke.mindustry.Vars.state;
|
||||
@@ -28,11 +30,6 @@ public class WaveMission implements Mission{
|
||||
generateCoreAt(gen, coreX, coreY, Team.blue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void display(Table table){
|
||||
table.add(Bundles.format("text.mission.wave", target));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GameMode getMode(){
|
||||
return GameMode.waves;
|
||||
|
||||
Reference in New Issue
Block a user