mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-04 15:27:19 +07:00
Added basic sector classes / Changed play menu dialog
This commit is contained in:
@ -47,7 +47,8 @@ text.savegame=Save Game
|
|||||||
text.loadgame=Load Game
|
text.loadgame=Load Game
|
||||||
text.joingame=Join Game
|
text.joingame=Join Game
|
||||||
text.addplayers=Add/Remove Players
|
text.addplayers=Add/Remove Players
|
||||||
text.newgame=New Game
|
text.customgame=Custom Game
|
||||||
|
text.campaign=Campaign
|
||||||
text.quit=Quit
|
text.quit=Quit
|
||||||
text.maps=Maps
|
text.maps=Maps
|
||||||
text.maps.none=[LIGHT_GRAY]No maps found!
|
text.maps.none=[LIGHT_GRAY]No maps found!
|
||||||
|
@ -18,5 +18,5 @@
|
|||||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Streamable"/>
|
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Streamable"/>
|
||||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.meta.BlockBar"/>
|
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.meta.BlockBar"/>
|
||||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.mapgen.WorldGenerator"/>
|
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.mapgen.WorldGenerator"/>
|
||||||
<extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.utils.Predicate"/>
|
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.StatusController"/>
|
||||||
</module>
|
</module>
|
@ -1,7 +1,6 @@
|
|||||||
package io.anuke.mindustry.core;
|
package io.anuke.mindustry.core;
|
||||||
|
|
||||||
import com.badlogic.gdx.math.GridPoint2;
|
import com.badlogic.gdx.math.GridPoint2;
|
||||||
import com.badlogic.gdx.math.MathUtils;
|
|
||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
import com.badlogic.gdx.utils.ObjectMap;
|
import com.badlogic.gdx.utils.ObjectMap;
|
||||||
import io.anuke.mindustry.ai.BlockIndexer;
|
import io.anuke.mindustry.ai.BlockIndexer;
|
||||||
@ -11,8 +10,8 @@ import io.anuke.mindustry.core.GameState.State;
|
|||||||
import io.anuke.mindustry.game.EventType.TileChangeEvent;
|
import io.anuke.mindustry.game.EventType.TileChangeEvent;
|
||||||
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
|
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.maps.Map;
|
|
||||||
import io.anuke.mindustry.io.MapIO;
|
import io.anuke.mindustry.io.MapIO;
|
||||||
|
import io.anuke.mindustry.maps.Map;
|
||||||
import io.anuke.mindustry.maps.MapMeta;
|
import io.anuke.mindustry.maps.MapMeta;
|
||||||
import io.anuke.mindustry.maps.Maps;
|
import io.anuke.mindustry.maps.Maps;
|
||||||
import io.anuke.mindustry.maps.Sectors;
|
import io.anuke.mindustry.maps.Sectors;
|
||||||
@ -31,14 +30,13 @@ import io.anuke.ucore.util.Tmp;
|
|||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
public class World extends Module{
|
public class World extends Module{
|
||||||
private int seed;
|
|
||||||
|
|
||||||
private Map currentMap;
|
private Map currentMap;
|
||||||
private Tile[][] tiles;
|
private Tile[][] tiles;
|
||||||
private Pathfinder pathfinder = new Pathfinder();
|
private Pathfinder pathfinder = new Pathfinder();
|
||||||
private BlockIndexer indexer = new BlockIndexer();
|
private BlockIndexer indexer = new BlockIndexer();
|
||||||
private Maps maps = new Maps();
|
private Maps maps = new Maps();
|
||||||
private Sectors sectors = new Sectors();
|
private Sectors sectors = new Sectors();
|
||||||
|
private WorldGenerator generator = new WorldGenerator();
|
||||||
|
|
||||||
private Array<Tile> tempTiles = new ThreadArray<>();
|
private Array<Tile> tempTiles = new ThreadArray<>();
|
||||||
private boolean generating, invalidMap;
|
private boolean generating, invalidMap;
|
||||||
@ -204,9 +202,7 @@ public class World extends Module{
|
|||||||
Events.fire(WorldLoadEvent.class);
|
Events.fire(WorldLoadEvent.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**Loads up a procedural map. This does not call play(), but calls reset().*/
|
||||||
* Loads up a procedural map. This does not call play(), but calls reset().
|
|
||||||
*/
|
|
||||||
public void loadProceduralMap(){
|
public void loadProceduralMap(){
|
||||||
Timers.mark();
|
Timers.mark();
|
||||||
Timers.mark();
|
Timers.mark();
|
||||||
@ -225,7 +221,7 @@ public class World extends Module{
|
|||||||
EntityPhysics.resizeTree(0, 0, width * tilesize, height * tilesize);
|
EntityPhysics.resizeTree(0, 0, width * tilesize, height * tilesize);
|
||||||
|
|
||||||
Timers.mark();
|
Timers.mark();
|
||||||
WorldGenerator.generateMap(tiles, Mathf.random(9999999));
|
generator.generateMap(tiles, Mathf.random(9999999));
|
||||||
Log.info("Time to generate base map: {0}", Timers.elapsed());
|
Log.info("Time to generate base map: {0}", Timers.elapsed());
|
||||||
|
|
||||||
Log.info("Time to generate fully without additional events: {0}", Timers.elapsed());
|
Log.info("Time to generate fully without additional events: {0}", Timers.elapsed());
|
||||||
@ -236,13 +232,8 @@ public class World extends Module{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void loadMap(Map map){
|
public void loadMap(Map map){
|
||||||
loadMap(map, MathUtils.random(0, 999999));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void loadMap(Map map, int seed){
|
|
||||||
beginMapLoad();
|
beginMapLoad();
|
||||||
this.currentMap = map;
|
this.currentMap = map;
|
||||||
this.seed = seed;
|
|
||||||
|
|
||||||
int width = map.meta.width, height = map.meta.height;
|
int width = map.meta.width, height = map.meta.height;
|
||||||
|
|
||||||
@ -250,7 +241,7 @@ public class World extends Module{
|
|||||||
|
|
||||||
EntityPhysics.resizeTree(0, 0, width * tilesize, height * tilesize);
|
EntityPhysics.resizeTree(0, 0, width * tilesize, height * tilesize);
|
||||||
|
|
||||||
WorldGenerator.loadTileData(tiles, MapIO.readTileData(map, true), map.meta.hasOreGen(), seed);
|
generator.loadTileData(tiles, MapIO.readTileData(map, true), map.meta.hasOreGen(), 0);
|
||||||
|
|
||||||
if(!headless && state.teams.get(players[0].getTeam()).cores.size == 0){
|
if(!headless && state.teams.get(players[0].getTeam()).cores.size == 0){
|
||||||
ui.showError("$text.map.nospawn");
|
ui.showError("$text.map.nospawn");
|
||||||
@ -263,10 +254,6 @@ public class World extends Module{
|
|||||||
endMapLoad();
|
endMapLoad();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSeed(){
|
|
||||||
return seed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void notifyChanged(Tile tile){
|
public void notifyChanged(Tile tile){
|
||||||
if(!generating){
|
if(!generating){
|
||||||
threads.runDelay(() -> Events.fire(TileChangeEvent.class, tile));
|
threads.runDelay(() -> Events.fire(TileChangeEvent.class, tile));
|
||||||
|
@ -1,4 +1,12 @@
|
|||||||
package io.anuke.mindustry.maps;
|
package io.anuke.mindustry.maps;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
|
|
||||||
public class Sector{
|
public class Sector{
|
||||||
|
/**Position on the map, can be positive or negative.*/
|
||||||
|
public short x, y;
|
||||||
|
/**Whether this sector has already been captured. TODO statistics?*/
|
||||||
|
public boolean unlocked;
|
||||||
|
/**Display texture. Needs to be disposed.*/
|
||||||
|
public transient Texture texture;
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,86 @@
|
|||||||
package io.anuke.mindustry.maps;
|
package io.anuke.mindustry.maps;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.graphics.Pixmap;
|
||||||
|
import com.badlogic.gdx.graphics.Pixmap.Format;
|
||||||
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
|
import com.badlogic.gdx.math.GridPoint2;
|
||||||
|
import com.badlogic.gdx.utils.Array;
|
||||||
|
import io.anuke.ucore.core.Settings;
|
||||||
|
import io.anuke.ucore.util.Geometry;
|
||||||
import io.anuke.ucore.util.GridMap;
|
import io.anuke.ucore.util.GridMap;
|
||||||
|
|
||||||
|
import static io.anuke.mindustry.Vars.headless;
|
||||||
|
|
||||||
public class Sectors{
|
public class Sectors{
|
||||||
private static final int sectorSize = 256;
|
private static final int sectorSize = 256;
|
||||||
|
private static final int sectorImageSize = 8;
|
||||||
private GridMap<Sector> grid = new GridMap<>();
|
private GridMap<Sector> grid = new GridMap<>();
|
||||||
|
|
||||||
public Sectors(){
|
public Sectors(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load(){
|
/**If a sector is not yet unlocked, returns null.*/
|
||||||
|
public Sector get(int x, int y){
|
||||||
|
return grid.get(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Unlocks a sector. This shows nearby sectors.*/
|
||||||
|
public void unlockSector(int x, int y){
|
||||||
|
createSector(x, y);
|
||||||
|
Sector sector = get(x, y);
|
||||||
|
sector.unlocked = true;
|
||||||
|
if(sector.texture == null) createTexture(sector);
|
||||||
|
|
||||||
|
for(GridPoint2 point : Geometry.d4){
|
||||||
|
createSector(sector.x + point.x, sector.y + point.y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Creates a sector at a location if it is not present, but does not unlock it.*/
|
||||||
|
public void createSector(int x, int y){
|
||||||
|
if(grid.containsKey(x, y)) return;
|
||||||
|
|
||||||
|
Sector sector = new Sector();
|
||||||
|
sector.x = (short)x;
|
||||||
|
sector.y = (short)y;
|
||||||
|
sector.unlocked = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void load(){
|
||||||
|
Array<Sector> out = Settings.getJson("sectors", Array.class);
|
||||||
|
|
||||||
|
for(Sector sector : out){
|
||||||
|
createTexture(sector);
|
||||||
|
grid.put(sector.x, sector.y, sector);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void save(){
|
public void save(){
|
||||||
|
Array<Sector> out = new Array<>();
|
||||||
|
|
||||||
|
for(Sector sector : grid.values()){
|
||||||
|
out.add(sector);
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings.putJson("sectors", out);
|
||||||
|
Settings.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createTexture(Sector sector){
|
||||||
|
if(headless) return; //obviously not created or needed on server
|
||||||
|
|
||||||
|
Pixmap pixmap = new Pixmap(sectorImageSize, sectorImageSize, Format.RGBA8888);
|
||||||
|
|
||||||
|
int worldX = sector.x * sectorSize;
|
||||||
|
int worldY = sector.y * sectorSize;
|
||||||
|
for(int x = worldX; x < (worldX + sectorSize); x++){
|
||||||
|
for(int y = worldY; y < (worldY + sectorSize); y++){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sector.texture = new Texture(pixmap);
|
||||||
|
pixmap.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
package io.anuke.mindustry.ui.dialogs;
|
||||||
|
|
||||||
|
public class SectorsDialog{
|
||||||
|
}
|
@ -139,14 +139,14 @@ public class MenuFragment extends Fragment{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void showPlaySelect(){
|
private void showPlaySelect(){
|
||||||
float w = 200f;
|
float w = 220f;
|
||||||
float bw = w * 2f + 10f;
|
float bw = w * 2f + 10f;
|
||||||
|
|
||||||
FloatingDialog dialog = new FloatingDialog("$text.play");
|
FloatingDialog dialog = new FloatingDialog("$text.play");
|
||||||
dialog.addCloseButton();
|
dialog.addCloseButton();
|
||||||
dialog.content().defaults().height(66f).width(w).padRight(5f);
|
dialog.content().defaults().height(66f).width(w).padRight(5f);
|
||||||
|
|
||||||
dialog.content().add(new MenuButton("icon-play-2", "$text.newgame", () -> {
|
dialog.content().add(new MenuButton("icon-play-2", "$text.campaign", () -> {
|
||||||
dialog.hide();
|
dialog.hide();
|
||||||
ui.levels.show();
|
ui.levels.show();
|
||||||
})).width(bw).colspan(2);
|
})).width(bw).colspan(2);
|
||||||
@ -161,7 +161,10 @@ public class MenuFragment extends Fragment{
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
dialog.content().add(new MenuButton("icon-tutorial", "$text.tutorial", () -> ui.showInfo("The tutorial is currently not yet implemented.")));
|
dialog.content().add(new MenuButton("icon-editor", "$text.customgame", () -> {
|
||||||
|
dialog.hide();
|
||||||
|
ui.levels.show();
|
||||||
|
}));
|
||||||
|
|
||||||
dialog.content().row();
|
dialog.content().row();
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ public class ItemBridge extends Block{
|
|||||||
hasPower = true;
|
hasPower = true;
|
||||||
layer = Layer.power;
|
layer = Layer.power;
|
||||||
expanded = true;
|
expanded = true;
|
||||||
itemCapacity = 30;
|
itemCapacity = 10;
|
||||||
configurable = true;
|
configurable = true;
|
||||||
hasItems = true;
|
hasItems = true;
|
||||||
}
|
}
|
||||||
|
@ -28,12 +28,11 @@ import static io.anuke.mindustry.Vars.world;
|
|||||||
|
|
||||||
|
|
||||||
public class WorldGenerator{
|
public class WorldGenerator{
|
||||||
static int oreIndex = 0;
|
private int seed;
|
||||||
|
int oreIndex = 0;
|
||||||
|
|
||||||
/**
|
/**Loads raw map tile data into a Tile[][] array, setting up multiblocks, cliffs and ores. */
|
||||||
* Should fill spawns with the correct spawnpoints.
|
public void loadTileData(Tile[][] tiles, MapTileData data, boolean genOres, int seed){
|
||||||
*/
|
|
||||||
public static void loadTileData(Tile[][] tiles, MapTileData data, boolean genOres, int seed){
|
|
||||||
data.position(0, 0);
|
data.position(0, 0);
|
||||||
TileDataMarker marker = data.newDataMarker();
|
TileDataMarker marker = data.newDataMarker();
|
||||||
|
|
||||||
@ -48,7 +47,7 @@ public class WorldGenerator{
|
|||||||
prepareTiles(tiles, seed, genOres);
|
prepareTiles(tiles, seed, genOres);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void prepareTiles(Tile[][] tiles, int seed, boolean genOres){
|
public void prepareTiles(Tile[][] tiles, int seed, boolean genOres){
|
||||||
|
|
||||||
//find multiblocks
|
//find multiblocks
|
||||||
IntArray multiblocks = new IntArray();
|
IntArray multiblocks = new IntArray();
|
||||||
@ -146,7 +145,7 @@ public class WorldGenerator{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void generateMap(Tile[][] tiles, int seed){
|
public void generateMap(Tile[][] tiles, int seed){
|
||||||
MathUtils.random.setSeed((long) (Math.random() * 99999999));
|
MathUtils.random.setSeed((long) (Math.random() * 99999999));
|
||||||
Simplex sim = new Simplex(Mathf.random(99999));
|
Simplex sim = new Simplex(Mathf.random(99999));
|
||||||
Simplex sim2 = new Simplex(Mathf.random(99999));
|
Simplex sim2 = new Simplex(Mathf.random(99999));
|
||||||
@ -244,7 +243,7 @@ public class WorldGenerator{
|
|||||||
prepareTiles(tiles, seed, true);
|
prepareTiles(tiles, seed, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class OreEntry{
|
public class OreEntry{
|
||||||
final float frequency;
|
final float frequency;
|
||||||
final Item item;
|
final Item item;
|
||||||
final Simplex noise;
|
final Simplex noise;
|
||||||
|
Reference in New Issue
Block a user