Added sample tutorial text / Refactoring

This commit is contained in:
Anuken
2018-09-22 12:20:04 -04:00
parent 999dd5eb6f
commit b77caed0ba
16 changed files with 199 additions and 93 deletions

View File

@@ -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());

View 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()
);
}
}

View File

@@ -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

View File

@@ -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){

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}
});
}
}

View File

@@ -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);
}

View File

@@ -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){

View File

@@ -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;

View File

@@ -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