Sector preset class / New missions
This commit is contained in:
@@ -5,14 +5,17 @@ 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.Mechs;
|
||||
import io.anuke.mindustry.content.blocks.UnitBlocks;
|
||||
import io.anuke.mindustry.content.blocks.UpgradeBlocks;
|
||||
import io.anuke.mindustry.core.GameState.State;
|
||||
import io.anuke.mindustry.entities.units.BaseUnit;
|
||||
import io.anuke.mindustry.entities.units.UnitCommand;
|
||||
import io.anuke.mindustry.game.Difficulty;
|
||||
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.Mission;
|
||||
import io.anuke.mindustry.maps.missions.WaveMission;
|
||||
import io.anuke.mindustry.maps.missions.*;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.world.ColorMapper;
|
||||
@@ -21,10 +24,7 @@ import io.anuke.ucore.core.Settings;
|
||||
import io.anuke.ucore.entities.Entities;
|
||||
import io.anuke.ucore.entities.EntityGroup;
|
||||
import io.anuke.ucore.entities.trait.Entity;
|
||||
import io.anuke.ucore.util.Bits;
|
||||
import io.anuke.ucore.util.GridMap;
|
||||
import io.anuke.ucore.util.Log;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.*;
|
||||
|
||||
import static io.anuke.mindustry.Vars.*;
|
||||
|
||||
@@ -34,17 +34,22 @@ public class Sectors{
|
||||
|
||||
private final GridMap<Sector> grid = new GridMap<>();
|
||||
|
||||
private final GridMap<Array<Mission>> presets = new GridMap<Array<Mission>>(){{
|
||||
put(0, 0, TutorialSector.getMissions());
|
||||
private final GridMap<SectorPreset> presets = new GridMap<SectorPreset>(){{
|
||||
put(0, 0, new SectorPreset(TutorialSector.getMissions(), Array.with(Items.copper), 1));
|
||||
|
||||
//water mission
|
||||
put(-2, 0, Array.with());
|
||||
put(-2, 0, new SectorPreset(Array.with(), Array.with(Items.copper), 1));
|
||||
//command center mission
|
||||
put(0, 1, Array.with());
|
||||
//TODO generate enemy base
|
||||
//TODO make 2x2
|
||||
//TODO more gen info
|
||||
put(0, 1, new SectorPreset(Structs.array(new BlockMission(UnitBlocks.daggerFactory), Missions.blockRecipe(UnitBlocks.commandCenter),
|
||||
new CommandMission(UnitCommand.retreat), new CommandMission(UnitCommand.attack), new BattleMission()), Array.with(Items.copper), 1));
|
||||
//reconstructor mission
|
||||
put(0, -1, Array.with());
|
||||
put(0, -1, new SectorPreset(Structs.array(Missions.blockRecipe(mobile ? UpgradeBlocks.tridentPad : UpgradeBlocks.deltaPad),
|
||||
new MechMission(Mechs.delta)), Array.with(Items.copper), 1));
|
||||
//oil mission
|
||||
put(1, 0, Array.with());
|
||||
put(1, 0, new SectorPreset(Array.with(), Array.with(Items.copper), 1));
|
||||
}};
|
||||
|
||||
public void playSector(Sector sector){
|
||||
@@ -306,7 +311,8 @@ public class Sectors{
|
||||
sector.difficulty = (int)(Mathf.dst(sector.x, sector.y));
|
||||
|
||||
if(presets.containsKey(sector.x, sector.y)){
|
||||
sector.missions.addAll(presets.get(sector.x, sector.y));
|
||||
SectorPreset p = presets.get(sector.x, sector.y);
|
||||
sector.missions.addAll(p.missions);
|
||||
}else{
|
||||
genMissions(sector);
|
||||
}
|
||||
@@ -363,4 +369,20 @@ public class Sectors{
|
||||
sector.texture = new Texture(pixmap);
|
||||
pixmap.dispose();
|
||||
}
|
||||
|
||||
private class SectorPreset{
|
||||
private final Array<Mission> missions;
|
||||
private final Array<Item> ores;
|
||||
private final int size;
|
||||
|
||||
public SectorPreset(Array<Mission> missions, Array<Item> ores, int size){
|
||||
this.missions = missions;
|
||||
this.ores = ores;
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
void generate(Sector sector){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.production.Drill;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Structs;
|
||||
import io.anuke.ucore.util.SeedRandom;
|
||||
|
||||
public class Generation{
|
||||
@@ -24,7 +24,7 @@ public class Generation{
|
||||
}
|
||||
|
||||
Tile tile(int x, int y){
|
||||
if(!Mathf.inBounds(x, y, tiles)){
|
||||
if(!Structs.inBounds(x, y, tiles)){
|
||||
return null;
|
||||
}
|
||||
return tiles[x][y];
|
||||
@@ -41,7 +41,7 @@ public class Generation{
|
||||
for(int dy = 0; dy < block.size; dy++){
|
||||
int worldx = dx + offsetx + x;
|
||||
int worldy = dy + offsety + y;
|
||||
if(!Mathf.inBounds(worldx, worldy, tiles)){
|
||||
if(!Structs.inBounds(worldx, worldy, tiles)){
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ public class Generation{
|
||||
for(int dy = 0; dy < block.size; dy++){
|
||||
int worldx = dx + offsetx + x;
|
||||
int worldy = dy + offsety + y;
|
||||
if(!Mathf.inBounds(worldx, worldy, tiles) || !tiles[worldx][worldy].block().alwaysReplace){
|
||||
if(!Structs.inBounds(worldx, worldy, tiles) || !tiles[worldx][worldy].block().alwaysReplace){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -93,7 +93,7 @@ public class Generation{
|
||||
for(int dy = 0; dy < block.size; dy++){
|
||||
int worldx = dx + offsetx + x;
|
||||
int worldy = dy + offsety + y;
|
||||
if(!(worldx == x && worldy == y) && Mathf.inBounds(worldx, worldy, tiles)){
|
||||
if(!(worldx == x && worldy == y) && Structs.inBounds(worldx, worldy, tiles)){
|
||||
Tile toplace = tiles[worldx][worldy];
|
||||
if(toplace != null){
|
||||
toplace.setLinked((byte) (dx + offsetx), (byte) (dy + offsety));
|
||||
|
||||
@@ -20,6 +20,7 @@ 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.util.Structs;
|
||||
import io.anuke.ucore.util.Geometry;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.SeedRandom;
|
||||
@@ -42,7 +43,7 @@ public class WorldGenerator{
|
||||
private ObjectMap<Block, Block> decoration;
|
||||
|
||||
public WorldGenerator(){
|
||||
decoration = Mathf.map(
|
||||
decoration = Structs.map(
|
||||
Blocks.grass, Blocks.shrub,
|
||||
Blocks.stone, Blocks.rock,
|
||||
Blocks.ice, Blocks.icerock,
|
||||
@@ -203,7 +204,7 @@ public class WorldGenerator{
|
||||
byte elevation = tile.getElevation();
|
||||
|
||||
for(GridPoint2 point : Geometry.d4){
|
||||
if(!Mathf.inBounds(x + point.x, y + point.y, width, height)) continue;
|
||||
if(!Structs.inBounds(x + point.x, y + point.y, width, height)) continue;
|
||||
if(tiles[x + point.x][y + point.y].getElevation() < elevation){
|
||||
|
||||
if(sim2.octaveNoise2D(1, 1, 1.0 / 8, x, y) > 0.8){
|
||||
|
||||
@@ -8,8 +8,8 @@ import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.ucore.core.Effects;
|
||||
import io.anuke.ucore.function.Consumer;
|
||||
import io.anuke.ucore.function.Predicate;
|
||||
import io.anuke.ucore.util.Structs;
|
||||
import io.anuke.ucore.util.Geometry;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
||||
//TODO
|
||||
public class AStarPathFinder extends TilePathfinder{
|
||||
@@ -194,7 +194,7 @@ public class AStarPathFinder extends TilePathfinder{
|
||||
if(obstacle(current)) return;
|
||||
for(GridPoint2 p : Geometry.d4){
|
||||
int wx = current.x + p.x, wy = current.y + p.y;
|
||||
Tile n = Mathf.inBounds(wx, wy, tiles) ? tiles[wx][wy] : null;
|
||||
Tile n = Structs.inBounds(wx, wy, tiles) ? tiles[wx][wy] : null;
|
||||
if(!obstacle(n)) cons.accept(n);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package io.anuke.mindustry.maps.generation.pathfinding;
|
||||
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Structs;
|
||||
|
||||
public abstract class TilePathfinder{
|
||||
protected Tile[][] tiles;
|
||||
@@ -12,7 +12,7 @@ public abstract class TilePathfinder{
|
||||
}
|
||||
|
||||
protected boolean inBounds(int x, int y){
|
||||
return Mathf.inBounds(x, y, tiles);
|
||||
return Structs.inBounds(x, y, tiles);
|
||||
}
|
||||
|
||||
public abstract void search(Tile start, Tile end, Array<Tile> out);
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package io.anuke.mindustry.maps.missions;
|
||||
|
||||
import io.anuke.mindustry.Vars;
|
||||
import io.anuke.mindustry.entities.units.BaseUnit;
|
||||
import io.anuke.mindustry.entities.units.UnitCommand;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
|
||||
public class CommandMission extends Mission{
|
||||
private final UnitCommand command;
|
||||
|
||||
public CommandMission(UnitCommand command){
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isComplete(){
|
||||
for(BaseUnit unit : Vars.unitGroups[Vars.defaultTeam.ordinal()].all()){
|
||||
if(unit.isCommanded() && unit.getCommand() == command){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String displayString(){
|
||||
return Bundles.format("text.mission.battle", command.localized());
|
||||
}
|
||||
}
|
||||
22
core/src/io/anuke/mindustry/maps/missions/MechMission.java
Normal file
22
core/src/io/anuke/mindustry/maps/missions/MechMission.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package io.anuke.mindustry.maps.missions;
|
||||
|
||||
import io.anuke.mindustry.type.Mech;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
|
||||
public class MechMission extends Mission{
|
||||
private final Mech mech;
|
||||
|
||||
public MechMission(Mech mech){
|
||||
this.mech = mech;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isComplete(){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String displayString(){
|
||||
return Bundles.format("te");
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,7 @@ public abstract class Mission{
|
||||
}
|
||||
|
||||
public GameMode getMode(){
|
||||
return GameMode.noWaves;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**Sets the message displayed on mission begin. Returns this mission for chaining.*/
|
||||
|
||||
22
core/src/io/anuke/mindustry/maps/missions/Missions.java
Normal file
22
core/src/io/anuke/mindustry/maps/missions/Missions.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package io.anuke.mindustry.maps.missions;
|
||||
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.type.Recipe;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
|
||||
public class Missions{
|
||||
|
||||
/**Returns an array of missions to obtain the items needed to make this block.
|
||||
* This array includes a mission to place this block.*/
|
||||
public static Array<Mission> blockRecipe(Block block){
|
||||
Recipe recipe = Recipe.getByResult(block);
|
||||
|
||||
Array<Mission> out = new Array<>();
|
||||
for(ItemStack stack : recipe.requirements){
|
||||
out.add(new ItemMission(stack.item, stack.amount));
|
||||
}
|
||||
out.add(new BlockMission(block));
|
||||
return out;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user