Added sample tutorial text / Refactoring
This commit is contained in:
@@ -5,13 +5,12 @@ import com.badlogic.gdx.graphics.Pixmap.Format;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.content.Items;
|
||||
import io.anuke.mindustry.content.UnitTypes;
|
||||
import io.anuke.mindustry.content.blocks.*;
|
||||
import io.anuke.mindustry.core.GameState.State;
|
||||
import io.anuke.mindustry.game.Team;
|
||||
import io.anuke.mindustry.io.SaveIO;
|
||||
import io.anuke.mindustry.maps.generation.WorldGenerator.GenResult;
|
||||
import io.anuke.mindustry.maps.missions.*;
|
||||
import io.anuke.mindustry.maps.missions.BattleMission;
|
||||
import io.anuke.mindustry.maps.missions.WaveMission;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.world.ColorMapper;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
@@ -251,27 +250,7 @@ public class Sectors{
|
||||
|
||||
if(sector.difficulty == 0){
|
||||
//TODO make specfic expansion sector have specific ores
|
||||
sector.missions.addAll(Array.with(
|
||||
new ItemMission(Items.copper, 30),
|
||||
new BlockMission(ProductionBlocks.mechanicalDrill),
|
||||
new BlockMission(DistributionBlocks.conveyor),
|
||||
new ItemMission(Items.copper, 40),
|
||||
new BlockMission(TurretBlocks.duo),
|
||||
new WaveMission(5),
|
||||
new ExpandMission(1, 0),
|
||||
new ItemMission(Items.lead, 30),
|
||||
new ItemMission(Items.copper, 150),
|
||||
new BlockMission(CraftingBlocks.smelter),
|
||||
new ItemMission(Items.densealloy, 30),
|
||||
new BlockMission(PowerBlocks.combustionGenerator),
|
||||
new BlockMission(PowerBlocks.powerNode),
|
||||
new BlockMission(CraftingBlocks.siliconsmelter),
|
||||
new ItemMission(Items.silicon, 30),
|
||||
new BlockMission(UnitBlocks.daggerFactory),
|
||||
new UnitMission(UnitTypes.dagger),
|
||||
new ExpandMission(-1, 0),
|
||||
new BattleMission()
|
||||
));
|
||||
sector.missions.addAll(TutorialSector.getMissions());
|
||||
}else{
|
||||
sector.missions.add(Mathf.randomSeed(sector.getSeed() + 1) < waveChance ? new WaveMission(Math.min(sector.difficulty*5 + Mathf.randomSeed(sector.getSeed(), 0, 3)*5, 100))
|
||||
: new BattleMission());
|
||||
|
||||
35
core/src/io/anuke/mindustry/maps/TutorialSector.java
Normal file
35
core/src/io/anuke/mindustry/maps/TutorialSector.java
Normal file
@@ -0,0 +1,35 @@
|
||||
package io.anuke.mindustry.maps;
|
||||
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.content.Items;
|
||||
import io.anuke.mindustry.content.UnitTypes;
|
||||
import io.anuke.mindustry.content.blocks.*;
|
||||
import io.anuke.mindustry.maps.missions.*;
|
||||
|
||||
/**Just a class for returning the list of tutorial missions.*/
|
||||
public class TutorialSector{
|
||||
|
||||
public static Array<Mission> getMissions(){
|
||||
return Array.with(
|
||||
new ItemMission(Items.copper, 30).setMessage("$tutorial.begin"),
|
||||
new BlockMission(ProductionBlocks.mechanicalDrill).setMessage("$tutorial.begin"),
|
||||
new BlockMission(DistributionBlocks.conveyor),
|
||||
new ItemMission(Items.copper, 40),
|
||||
new BlockMission(TurretBlocks.duo),
|
||||
new WaveMission(5),
|
||||
new ExpandMission(1, 0),
|
||||
new ItemMission(Items.lead, 30),
|
||||
new ItemMission(Items.copper, 150),
|
||||
new BlockMission(CraftingBlocks.smelter),
|
||||
new ItemMission(Items.densealloy, 30),
|
||||
new BlockMission(PowerBlocks.combustionGenerator),
|
||||
new BlockMission(PowerBlocks.powerNode),
|
||||
new BlockMission(CraftingBlocks.siliconsmelter),
|
||||
new ItemMission(Items.silicon, 30),
|
||||
new BlockMission(UnitBlocks.daggerFactory),
|
||||
new UnitMission(UnitTypes.dagger),
|
||||
new ExpandMission(-1, 0),
|
||||
new BattleMission()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -190,7 +190,7 @@ public class WorldGenerator{
|
||||
for(int x = 0; x < width; x++){
|
||||
for(int y = 0; y < height; y++){
|
||||
GenResult result = generateTile(this.result, sector.x, sector.y, x, y, true, spawnpoints);
|
||||
Tile tile = new Tile(x, y, (byte)result.floor.id, (byte)result.wall.id, (byte)0, (byte)0, result.elevation);
|
||||
Tile tile = new Tile(x, y, result.floor.id, result.wall.id, (byte)0, (byte)0, result.elevation);
|
||||
tiles[x][y] = tile;
|
||||
}
|
||||
}
|
||||
@@ -241,7 +241,7 @@ public class WorldGenerator{
|
||||
return generateTile(result, sectorX, sectorY, localX, localY, detailed, null);
|
||||
}
|
||||
|
||||
//TODO include tile in result
|
||||
//TODO include ore in result
|
||||
/**
|
||||
* Gets the generation result from a specific sector at specific coordinates.
|
||||
* @param result where to put the generation results
|
||||
|
||||
@@ -6,7 +6,7 @@ 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{
|
||||
public abstract class ActionMission extends Mission{
|
||||
private Runnable runner;
|
||||
|
||||
public ActionMission(Runnable runner){
|
||||
|
||||
@@ -9,7 +9,7 @@ import io.anuke.mindustry.maps.generation.FortressGenerator;
|
||||
import io.anuke.mindustry.maps.generation.Generation;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
|
||||
public class BattleMission implements Mission{
|
||||
public class BattleMission extends Mission{
|
||||
private final static int coreX = 60, coreY = 60;
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,7 +10,7 @@ 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{
|
||||
public class BlockMission extends Mission{
|
||||
private final Block block;
|
||||
private boolean complete;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ 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 ItemMission implements Mission{
|
||||
public class ItemMission extends Mission{
|
||||
private final Item item;
|
||||
private final int amount;
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package io.anuke.mindustry.maps.missions;
|
||||
|
||||
import io.anuke.mindustry.Vars;
|
||||
|
||||
/**A mission that just displays some text.*/
|
||||
public class MessageMission extends ActionMission{
|
||||
|
||||
public MessageMission(String text){
|
||||
super(() -> {
|
||||
if(!Vars.headless){
|
||||
Vars.ui.showInfo(text);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package io.anuke.mindustry.maps.missions;
|
||||
|
||||
import com.badlogic.gdx.math.GridPoint2;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.Vars;
|
||||
import io.anuke.mindustry.content.blocks.StorageBlocks;
|
||||
import io.anuke.mindustry.game.GameMode;
|
||||
import io.anuke.mindustry.game.SpawnGroup;
|
||||
@@ -10,43 +9,70 @@ import io.anuke.mindustry.game.Team;
|
||||
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;
|
||||
|
||||
public interface Mission{
|
||||
boolean isComplete();
|
||||
import static io.anuke.mindustry.Vars.headless;
|
||||
import static io.anuke.mindustry.Vars.ui;
|
||||
|
||||
public abstract class Mission{
|
||||
private String extraMessage;
|
||||
|
||||
public abstract boolean isComplete();
|
||||
|
||||
/**Returns the string that is displayed in-game near the menu.*/
|
||||
String displayString();
|
||||
public abstract String displayString();
|
||||
|
||||
/**Returns the info string displayed in the sector dialog (menu)*/
|
||||
default String menuDisplayString(){
|
||||
public String menuDisplayString(){
|
||||
return displayString();
|
||||
}
|
||||
|
||||
default GameMode getMode(){
|
||||
public GameMode getMode(){
|
||||
return GameMode.noWaves;
|
||||
}
|
||||
|
||||
default void onComplete(){
|
||||
if(!Vars.headless){
|
||||
//TODO show 'mission complete' message somewhere
|
||||
/**Sets the message displayed on mission begin. Returns this mission for chaining.*/
|
||||
public Mission setMessage(String message){
|
||||
this.extraMessage = message;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**Shows the unique sector message.*/
|
||||
public void showMessage(){
|
||||
if(!headless && extraMessage != null){
|
||||
ui.hudfrag.showTextDialog(extraMessage);
|
||||
}
|
||||
}
|
||||
|
||||
default void display(Table table){
|
||||
public boolean hasMessage(){
|
||||
return extraMessage != null;
|
||||
}
|
||||
|
||||
public void onBegin(){
|
||||
showMessage();
|
||||
}
|
||||
|
||||
public void onComplete(){
|
||||
if(!headless){
|
||||
ui.hudfrag.showText("[LIGHT_GRAY]"+menuDisplayString() + ":\n" + Bundles.get("text.mission.complete"));
|
||||
}
|
||||
}
|
||||
|
||||
public void display(Table table){
|
||||
table.add(displayString());
|
||||
}
|
||||
|
||||
default Array<SpawnGroup> getWaves(Sector sector){
|
||||
public Array<SpawnGroup> getWaves(Sector sector){
|
||||
return new Array<>();
|
||||
}
|
||||
|
||||
default Array<GridPoint2> getSpawnPoints(Generation gen){
|
||||
public Array<GridPoint2> getSpawnPoints(Generation gen){
|
||||
return Array.with();
|
||||
}
|
||||
|
||||
default void generate(Generation gen){}
|
||||
public void generate(Generation gen){}
|
||||
|
||||
default void generateCoreAt(Generation gen, int coreX, int coreY, Team team){
|
||||
public void generateCoreAt(Generation gen, int coreX, int coreY, Team team){
|
||||
gen.tiles[coreX][coreY].setBlock(StorageBlocks.core);
|
||||
gen.tiles[coreX][coreY].setTeam(team);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import io.anuke.mindustry.entities.units.UnitType;
|
||||
import io.anuke.mindustry.game.GameMode;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
|
||||
public class UnitMission implements Mission{
|
||||
public class UnitMission extends Mission{
|
||||
private final UnitType type;
|
||||
|
||||
public UnitMission(UnitType type){
|
||||
|
||||
@@ -3,7 +3,7 @@ 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{
|
||||
public class VictoryMission extends Mission{
|
||||
@Override
|
||||
public boolean isComplete(){
|
||||
return false;
|
||||
|
||||
@@ -12,7 +12,7 @@ import io.anuke.ucore.util.Bundles;
|
||||
|
||||
import static io.anuke.mindustry.Vars.state;
|
||||
|
||||
public class WaveMission implements Mission{
|
||||
public class WaveMission extends Mission{
|
||||
private final int target;
|
||||
|
||||
public WaveMission(int target){
|
||||
@@ -37,7 +37,7 @@ public class WaveMission implements Mission{
|
||||
|
||||
@Override
|
||||
public String displayString(){
|
||||
return Bundles.format("text.mission.wave", state.wave, target);
|
||||
return Bundles.format("text.mission.wave", state.wave, target, (int)(state.wavetime/60));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user