non-functional loading screen

This commit is contained in:
Anuken 2019-08-26 22:53:11 -04:00
parent 1fc9c82aaf
commit 76cd7ba8d1
211 changed files with 722 additions and 699 deletions

View File

@ -28,7 +28,7 @@ import io.anuke.mindustry.ui.dialogs.FileChooser;
import java.io.*;
import java.util.ArrayList;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class AndroidLauncher extends AndroidApplication{
public static final int PERMISSION_REQUEST_CODE = 1;
@ -131,7 +131,7 @@ public class AndroidLauncher extends AndroidApplication{
config.hideStatusBar = true;
Net.setClientProvider(new ArcNetClient());
Net.setServerProvider(new ArcNetServer());
initialize(new Mindustry(), config);
initialize(new ClientLauncher(), config);
checkFiles(getIntent());
}

View File

@ -60,10 +60,10 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
void process(String classname, String path, String rtype, String loadMethod) throws Exception{
TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC);
MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
//MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
MethodSpec.Builder dispose = MethodSpec.methodBuilder("dispose").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("loadBegin").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
HashSet<String> names = new HashSet<>();
@ -82,13 +82,14 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
name = name + "s";
}
load.addStatement(name + " = io.anuke.arc.Core.audio."+loadMethod+"(io.anuke.arc.Core.files.internal(io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? $S : $S))",
path.substring(path.lastIndexOf("/") + 1) + "/" + fname, (path.substring(path.lastIndexOf("/") + 1) + "/" + fname).replace(".ogg", ".mp3"));
String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname;
//load.addStatement(name + " = io.anuke.arc.Core.audio."+loadMethod+"(io.anuke.arc.Core.files.internal(io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? $S : $S))",
//filepath, filepath.replace(".ogg", ".mp3"));
loadBegin.addStatement("io.anuke.arc.Core.assets.load(io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? $S : $S, "+rtype+".class)",
path.substring(path.lastIndexOf("/") + 1) + "/" + fname,
(path.substring(path.lastIndexOf("/") + 1) + "/" + fname).replace(".ogg", ".mp3"));
loadBegin.addStatement("io.anuke.arc.Core.assets.load(io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? $S : $S, "+rtype+".class, " +
"new io.anuke.arc.assets.loaders."+classname.substring(0, classname.length()-1)+"Loader."+classname.substring(0, classname.length()-1)+"Parameter((m, name, type) -> " + name + " = m.get(\"" + filepath + "\")))",
filepath, filepath.replace(".ogg", ".mp3"));
dispose.addStatement(name + ".dispose()");
@ -101,7 +102,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
}
type.addMethod(load.build());
//type.addMethod(load.build());
type.addMethod(loadBegin.build());
type.addMethod(dispose.build());
JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer);

View File

@ -106,7 +106,7 @@ public class RemoteWriteGenerator{
for(VariableElement var : elem.getParameters()){
//special case: calling local-only methods uses the local player
if(index == 0 && methodEntry.where == Loc.client){
results.append("io.anuke.mindustry.Vars.player");
results.append("io.anuke.mindustry.Min.player");
}else{
results.append(var.getSimpleName());
}

View File

@ -11,12 +11,11 @@ import io.anuke.mindustry.core.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.io.*;
import static io.anuke.arc.Core.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class Mindustry extends ApplicationCore{
public class ClientLauncher extends ApplicationCore{
private long lastTime;
private boolean finished = false;
@ -24,7 +23,6 @@ public class Mindustry extends ApplicationCore{
public void setup(){
Log.setUseColors(false);
Bench.begin("load setup");
Time.setDeltaProvider(() -> {
float result = Core.graphics.getDeltaTime() * 60f;
return (Float.isNaN(result) || Float.isInfinite(result)) ? 1f : Mathf.clamp(result, 0.0001f, 60f / 10f);
@ -34,45 +32,54 @@ public class Mindustry extends ApplicationCore{
assets = new AssetManager();
atlas = TextureAtlas.blankAtlas();
assets.load(new Vars());
assets.load(new Min());
assets.load(new AssetDescriptor<>("sprites/sprites.atlas", TextureAtlas.class)).loaded = t -> atlas = (TextureAtlas)t;
Bench.begin("cursors");
UI.loadSystemCursors();
Bench.begin("vars");
Bench.begin("bundle");
BundleLoader.load();
Musics.load();
Sounds.load();
Bench.begin("music");
Musics.loadBegin();
Bench.begin("sound");
Sounds.loadBegin();
add(logic = new Logic());
add(control = new Control());
add(renderer = new Renderer());
add(ui = new UI());
add(netServer = new NetServer());
add(netClient = new NetClient());
assets.loadRun("content::init+load", ContentLoader.class, () -> {
content.init();
content.load();
});
}
private void post(){
Bench.begin("content");
content.load();
content.loadColors();
for(ApplicationListener listener : modules){
listener.init();
}
}
Bench.begin("logic");
add(logic = new Logic());
Bench.begin("world");
add(world = new World());
Bench.begin("control");
add(control = new Control());
Bench.begin("renderer");
add(renderer = new Renderer());
Bench.begin("ui");
add(ui = new UI());
Bench.begin("net");
add(netServer = new NetServer());
add(netClient = new NetClient());
Bench.begin("init");
@Override
public void add(ApplicationListener module){
super.add(module);
//autoload modules when necessary
if(module instanceof Loadable){
assets.load((Loadable)module);
}
}
@Override
public void resize(int width, int height){
super.resize(width, height);
if(!assets.isFinished()){
Draw.proj().setOrtho(0, 0, width, height);
}
}
@Override
public void update(){
//
if(!assets.update()){
drawLoading();
}else{
@ -104,8 +111,14 @@ public class Mindustry extends ApplicationCore{
@Override
public void init(){
super.init();
Bench.end();
setup();
}
@Override
public void resume(){
if(finished){
super.resume();
}
}
void drawLoading(){

View File

@ -1,37 +1,36 @@
package io.anuke.mindustry;
import io.anuke.arc.Application.*;
import io.anuke.arc.*;
import io.anuke.arc.Application.ApplicationType;
import io.anuke.arc.assets.*;
import io.anuke.arc.files.FileHandle;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.util.Structs;
import io.anuke.arc.files.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.util.*;
import io.anuke.mindustry.ai.*;
import io.anuke.mindustry.core.*;
import io.anuke.mindustry.entities.*;
import io.anuke.mindustry.entities.bullet.Bullet;
import io.anuke.mindustry.entities.effect.Fire;
import io.anuke.mindustry.entities.effect.Puddle;
import io.anuke.mindustry.entities.impl.EffectEntity;
import io.anuke.mindustry.entities.traits.DrawTrait;
import io.anuke.mindustry.entities.traits.SyncTrait;
import io.anuke.mindustry.entities.bullet.*;
import io.anuke.mindustry.entities.effect.*;
import io.anuke.mindustry.entities.impl.*;
import io.anuke.mindustry.entities.traits.*;
import io.anuke.mindustry.entities.type.*;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.gen.Serialization;
import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.input.*;
import io.anuke.mindustry.maps.*;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.world.blocks.defense.ForceProjector.ShieldEntity;
import io.anuke.mindustry.world.blocks.defense.ForceProjector.*;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Locale;
import java.nio.charset.*;
import java.util.*;
@SuppressWarnings("unchecked")
public class Vars implements Loadable{
public class Min implements Loadable{
/** Whether to load locales.*/
public static boolean loadLocales = true;
/** IO buffer size. */
public static final int bufferSize = 8192;
/** global charset */
/** global charset, since Android doesn't support the Charsets class */
public static final Charset charset = Charset.forName("UTF-8");
/** main application name, capitalized */
public static final String appName = "Mindustry";
@ -116,6 +115,8 @@ public class Vars implements Loadable{
public static FileHandle screenshotDirectory;
/** data subdirectory used for custom mmaps */
public static FileHandle customMapDirectory;
/** data subdirectory used for custom mmaps */
public static FileHandle mapPreviewDirectory;
/** tmp subdirectory for map conversion */
public static FileHandle tmpDirectory;
/** data subdirectory used for saves */
@ -137,11 +138,16 @@ public class Vars implements Loadable{
public static DefaultWaves defaultWaves;
public static LoopControl loops;
public static World world;
public static Maps maps;
public static WaveSpawner spawner;
public static BlockIndexer indexer;
public static Pathfinder pathfinder;
public static Control control;
public static Logic logic;
public static Renderer renderer;
public static UI ui;
public static World world;
public static NetServer netServer;
public static NetClient netClient;
@ -160,14 +166,10 @@ public class Vars implements Loadable{
@Override
public void loadAsync(){
loadSettings();
init();
}
@Override
public void loadSync(){
}
public static void init(){
Serialization.init();
@ -190,13 +192,15 @@ public class Vars implements Loadable{
Version.init();
content = new ContentLoader();
if(!headless){
content.setVerbose();
}
loops = new LoopControl();
defaultWaves = new DefaultWaves();
collisions = new EntityCollisions();
world = new World();
maps = new Maps();
spawner = new WaveSpawner();
indexer = new BlockIndexer();
pathfinder = new Pathfinder();
playerGroup = Entities.addGroup(Player.class).enableMapping();
tileGroup = Entities.addGroup(TileEntity.class, false);
@ -227,14 +231,60 @@ public class Vars implements Loadable{
ios = Core.app.getType() == ApplicationType.iOS;
android = Core.app.getType() == ApplicationType.Android;
Core.settings.setAppName(appName);
dataDirectory = Core.settings.getDataDirectory();
screenshotDirectory = dataDirectory.child("screenshots/");
customMapDirectory = dataDirectory.child("maps/");
mapPreviewDirectory = dataDirectory.child("previews/");
saveDirectory = dataDirectory.child("saves/");
tmpDirectory = dataDirectory.child("tmp/");
Events.fire(new AppLoadEvent());
maps.load();
if(!headless){
content.loadColors();
maps.loadPreviews();
}
}
public static void loadSettings(){
Core.settings.setAppName(appName);
Core.settings.defaults("locale", "default");
Core.keybinds.setDefaults(Binding.values());
Core.settings.load();
try{
//try loading external bundle
FileHandle handle = Core.files.local("bundle");
Locale locale = Locale.ENGLISH;
Core.bundle = I18NBundle.createBundle(handle, locale);
Log.info("NOTE: external translation bundle has been loaded.");
if(!headless){
Time.run(10f, () -> ui.showInfo("Note: You have successfully loaded an external translation bundle."));
}
}catch(Throwable e){
//no external bundle found
FileHandle handle = Core.files.internal("bundles/bundle");
Locale locale;
String loc = Core.settings.getString("locale");
if(loc.equals("default")){
locale = Locale.getDefault();
}else{
Locale lastLocale;
if(loc.contains("_")){
String[] split = loc.split("_");
lastLocale = new Locale(split[0], split[1]);
}else{
lastLocale = new Locale(loc);
}
locale = lastLocale;
}
Locale.setDefault(locale);
Core.bundle = I18NBundle.createBundle(handle, locale);
}
}
}

View File

@ -15,7 +15,7 @@ import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.blocks.*;
import io.anuke.mindustry.world.meta.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/** Class used for indexing special target blocks for AI. */
@SuppressWarnings("unchecked")
@ -24,7 +24,7 @@ public class BlockIndexer{
private final static int quadrantSize = 16;
/** Set of all ores that are being scanned. */
private final ObjectSet<Item> scanOres = ObjectSet.with(Item.getAllOres().toArray(Item.class));
private final ObjectSet<Item> scanOres = new ObjectSet<>();
private final ObjectSet<Item> itemSet = new ObjectSet<>();
/** Stores all ore quadtrants on the map. */
private ObjectMap<Item, ObjectSet<Tile>> ores;
@ -57,6 +57,8 @@ public class BlockIndexer{
});
Events.on(WorldLoadEvent.class, event -> {
scanOres.clear();
scanOres.addAll(Item.getAllOres());
damagedTiles = new ObjectSet[Team.all.length];
flagMap = new ObjectSet[Team.all.length][BlockFlag.all.length];

View File

@ -16,8 +16,7 @@ import io.anuke.mindustry.world.Pos;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.meta.BlockFlag;
import static io.anuke.mindustry.Vars.state;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.*;
public class Pathfinder{
private static final long maxUpdate = Time.millisToNanos(4);
@ -117,7 +116,7 @@ public class Pathfinder{
path.lastSearchTime = Time.millis();
//add all targets to the frontier
for(Tile other : world.indexer.getEnemy(team, BlockFlag.target)){
for(Tile other : indexer.getEnemy(team, BlockFlag.target)){
path.weights[other.x][other.y] = 0;
path.searches[other.x][other.y] = (short)path.search;
path.frontier.addFirst(other.pos());

View File

@ -17,7 +17,7 @@ import io.anuke.mindustry.game.SpawnGroup;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class WaveSpawner{
private static final float margin = 40f, coreMargin = tilesize * 3; //how far away from the edge flying units spawn

View File

@ -26,7 +26,7 @@ import io.anuke.mindustry.world.consumers.*;
import io.anuke.mindustry.world.meta.*;
import io.anuke.mindustry.world.modules.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class Blocks implements ContentList{
public static Block
@ -515,10 +515,10 @@ public class Blocks implements ContentList{
Draw.alpha(entity.warmup);
Lines.lineAngleCenter(
tile.drawx() + Mathf.sin(entity.totalProgress, 6f, Vars.tilesize / 3f * size),
tile.drawx() + Mathf.sin(entity.totalProgress, 6f, Min.tilesize / 3f * size),
tile.drawy(),
90,
size * Vars.tilesize / 2f);
size * Min.tilesize / 2f);
Draw.reset();

View File

@ -12,7 +12,7 @@ import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.blocks.*;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.world;
public class Bullets implements ContentList{
public static BulletType

View File

@ -15,7 +15,7 @@ import io.anuke.mindustry.graphics.Drawf;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Item.Icon;
import static io.anuke.mindustry.Vars.tilesize;
import static io.anuke.mindustry.Min.tilesize;
public class Fx implements ContentList{
public static Effect

View File

@ -1,16 +1,15 @@
package io.anuke.mindustry.core;
import io.anuke.arc.collection.*;
import io.anuke.arc.function.Consumer;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.Pixmap;
import io.anuke.arc.util.Log;
import io.anuke.arc.function.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.util.*;
import io.anuke.mindustry.*;
import io.anuke.mindustry.content.*;
import io.anuke.mindustry.entities.bullet.BulletType;
import io.anuke.mindustry.entities.bullet.*;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.LegacyColorMapper;
import io.anuke.mindustry.world.*;
import static io.anuke.arc.Core.files;
@ -21,8 +20,6 @@ import static io.anuke.arc.Core.files;
@SuppressWarnings("unchecked")
public class ContentLoader{
private boolean loaded = false;
private boolean verbose = false;
private ObjectMap<String, MappableContent>[] contentNameMap = new ObjectMap[ContentType.values().length];
private Array<Content>[] contentMap = new Array[ContentType.values().length];
private MappableContent[][] temporaryMapper;
@ -45,12 +42,14 @@ public class ContentLoader{
new LegacyColorMapper(),
};
public void setVerbose(){
verbose = true;
public ContentLoader(){
//hack; allows content to initialize itself by referring to Mins.content, even though it hasn't been fully constructed yet
Min.content = this;
createContent();
}
/** Creates all content types. */
public void load(){
private void createContent(){
if(loaded){
Log.info("Content already loaded, skipping.");
return;
@ -65,8 +64,6 @@ public class ContentLoader{
list.load();
}
int total = 0;
for(ContentType type : ContentType.values()){
for(Content c : contentMap[type.ordinal()]){
@ -77,7 +74,6 @@ public class ContentLoader{
}
contentNameMap[type.ordinal()].put(name, (MappableContent)c);
}
total++;
}
}
@ -91,25 +87,32 @@ public class ContentLoader{
}
}
if(verbose){
Log.info("--- CONTENT INFO ---");
for(int k = 0; k < contentMap.length; k++){
Log.info("[{0}]: loaded {1}", ContentType.values()[k].name(), contentMap[k].size);
}
Log.info("Total content loaded: {0}", total);
Log.info("-------------------");
}
loaded = true;
}
public void initialize(Consumer<Content> callable){
initialize(callable, false);
/** Logs content statistics.*/
public void logContent(){
Log.info("--- CONTENT INFO ---");
for(int k = 0; k < contentMap.length; k++){
Log.info("[{0}]: loaded {1}", ContentType.values()[k].name(), contentMap[k].size);
}
Log.info("Total content loaded: {0}", Array.with(ContentType.values()).mapInt(c -> contentMap[c.ordinal()].size).sum());
Log.info("-------------------");
}
/** Calls Content#init() on everything. Use only after all modules have been created.*/
public void init(){
initialize(Content::init);
}
/** Calls Content#load() on everything. Use only after all modules have been created on the client.*/
public void load(){
initialize(Content::load);
}
/** Initializes all content with the specified function. */
public void initialize(Consumer<Content> callable, boolean override){
if(initialization.contains(callable) && !override) return;
private void initialize(Consumer<Content> callable){
if(initialization.contains(callable)) return;
for(ContentType type : ContentType.values()){
for(Content content : contentMap[type.ordinal()]){
@ -136,12 +139,8 @@ public class ContentLoader{
pixmap.dispose();
}
public void verbose(boolean verbose){
this.verbose = verbose;
}
public void dispose(){
//clear all content, currently not needed
//clear all content, currently not used
}
public void handleContent(Content content){

View File

@ -1,6 +1,7 @@
package io.anuke.mindustry.core;
import io.anuke.arc.*;
import io.anuke.arc.assets.*;
import io.anuke.arc.files.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.graphics.g2d.*;
@ -13,8 +14,8 @@ import io.anuke.mindustry.content.*;
import io.anuke.mindustry.core.GameState.*;
import io.anuke.mindustry.entities.*;
import io.anuke.mindustry.entities.type.*;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.input.*;
import io.anuke.mindustry.maps.*;
@ -27,7 +28,7 @@ import io.anuke.mindustry.world.blocks.storage.*;
import java.io.*;
import static io.anuke.arc.Core.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/**
* Control module.
@ -35,10 +36,10 @@ import static io.anuke.mindustry.Vars.*;
* Should <i>not</i> handle any logic-critical state.
* This class is not created in the headless server.
*/
public class Control implements ApplicationListener{
public final Saves saves;
public final MusicControl music;
public final Tutorial tutorial;
public class Control implements ApplicationListener, Loadable{
public Saves saves;
public MusicControl music;
public Tutorial tutorial;
public InputHandler input;
private Interval timer = new Interval(2);
@ -46,36 +47,6 @@ public class Control implements ApplicationListener{
private boolean wasPaused = false;
public Control(){
saves = new Saves();
tutorial = new Tutorial();
music = new MusicControl();
UnitScl.dp.setProduct(settings.getInt("uiscale", 100) / 100f);
Core.input.setCatch(KeyCode.BACK, true);
content.initialize(Content::init);
Core.atlas = new TextureAtlas("sprites/sprites.atlas");
Draw.scl = 1f / Core.atlas.find("scale_marker").getWidth();
content.initialize(Content::load, true);
data.load();
Core.settings.setAppName(appName);
Core.settings.defaults(
"ip", "localhost",
"color-0", Color.rgba8888(playerColors[8]),
"color-1", Color.rgba8888(playerColors[11]),
"color-2", Color.rgba8888(playerColors[13]),
"color-3", Color.rgba8888(playerColors[9]),
"name", "",
"lastBuild", 0
);
createPlayer();
saves.load();
Events.on(StateChangeEvent.class, event -> {
if((event.from == State.playing && event.to == State.menu) || (event.from == State.menu && event.to != State.menu)){
Time.runTask(5f, Platform.instance::updateRPC);
@ -176,9 +147,38 @@ public class Control implements ApplicationListener{
Events.on(ZoneConfigureCompleteEvent.class, e -> {
ui.hudfrag.showToast(Core.bundle.format("zone.config.complete", e.zone.configureWave));
});
}
@Override
public void loadAsync(){
saves = new Saves();
tutorial = new Tutorial();
music = new MusicControl();
Draw.scl = 1f / Core.atlas.find("scale_marker").getWidth();
UnitScl.dp.setProduct(settings.getInt("uiscale", 100) / 100f);
Core.input.setCatch(KeyCode.BACK, true);
data.load();
Core.settings.defaults(
"ip", "localhost",
"color-0", Color.rgba8888(playerColors[8]),
"name", "",
"lastBuild", 0
);
createPlayer();
saves.load();
}
@Override
public void loadSync(){
if(android){
Sounds.empty.loop(0f, 1f, 0f);
//Sounds.empty.loop(0f, 1f, 0f);
checkClassicData();
}

View File

@ -7,8 +7,8 @@ import io.anuke.mindustry.game.EventType.StateChangeEvent;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.net.Net;
import static io.anuke.mindustry.Vars.unitGroups;
import static io.anuke.mindustry.Vars.waveTeam;
import static io.anuke.mindustry.Min.unitGroups;
import static io.anuke.mindustry.Min.waveTeam;
public class GameState{
/** Current wave number, can be anything in non-wave modes. */

View File

@ -24,7 +24,7 @@ import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.BuildBlock;
import io.anuke.mindustry.world.blocks.BuildBlock.BuildEntity;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/**
* Logic module.
@ -109,7 +109,7 @@ public class Logic implements ApplicationListener{
}
public void runWave(){
world.spawner.spawnEnemies();
spawner.spawnEnemies();
state.wave++;
state.wavetime = world.isZone() && world.getZone().isBossWave(state.wave) ? state.rules.waveSpacing * state.rules.bossWaveMultiplier :
world.isZone() && world.getZone().isLaunchWave(state.wave) ? state.rules.waveSpacing * state.rules.launchWaveMultiplier : state.rules.waveSpacing;
@ -234,7 +234,7 @@ public class Logic implements ApplicationListener{
collisions.collideGroups(bulletGroup, playerGroup);
}
world.pathfinder.update();
pathfinder.update();
}
if(!Net.client() && !world.isInvalidMap() && !state.isEditor()){

View File

@ -9,7 +9,7 @@ import io.anuke.arc.math.RandomXS128;
import io.anuke.arc.util.*;
import io.anuke.arc.util.io.ReusableByteInStream;
import io.anuke.arc.util.serialization.Base64Coder;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Entities;
import io.anuke.mindustry.entities.EntityGroup;
@ -33,7 +33,7 @@ import java.io.DataInputStream;
import java.io.IOException;
import java.util.zip.InflaterInputStream;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class NetClient implements ApplicationListener{
private final static float dataTimeout = 60 * 18;
@ -126,8 +126,8 @@ public class NetClient implements ApplicationListener{
//called on all clients
@Remote(called = Loc.server, targets = Loc.server, variants = Variant.both)
public static void sendMessage(String message, String sender, Player playersender){
if(Vars.ui != null){
Vars.ui.chatfrag.addMessage(message, sender);
if(Min.ui != null){
Min.ui.chatfrag.addMessage(message, sender);
}
if(playersender != null){
@ -139,8 +139,8 @@ public class NetClient implements ApplicationListener{
//equivalent to above method but there's no sender and no console log
@Remote(called = Loc.server, targets = Loc.server)
public static void sendMessage(String message){
if(Vars.ui != null){
Vars.ui.chatfrag.addMessage(message, null);
if(Min.ui != null){
Min.ui.chatfrag.addMessage(message, null);
}
}

View File

@ -36,7 +36,7 @@ import java.io.*;
import java.nio.ByteBuffer;
import java.util.zip.DeflaterOutputStream;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class NetServer implements ApplicationListener{
public final static int maxSnapshotSize = 430;

View File

@ -9,7 +9,7 @@ import io.anuke.arc.math.RandomXS128;
import io.anuke.arc.scene.ui.TextField;
import io.anuke.arc.util.serialization.Base64Coder;
import static io.anuke.mindustry.Vars.mobile;
import static io.anuke.mindustry.Min.mobile;
public abstract class Platform{
/** Each separate game platform should set this instance to their own implementation. */

View File

@ -25,7 +25,7 @@ import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.world.blocks.defense.ForceProjector.*;
import static io.anuke.arc.Core.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class Renderer implements ApplicationListener{
public final BlockRenderer blocks = new BlockRenderer();

View File

@ -3,8 +3,13 @@ package io.anuke.mindustry.core;
import io.anuke.arc.*;
import io.anuke.arc.Graphics.*;
import io.anuke.arc.Graphics.Cursor.*;
import io.anuke.arc.assets.*;
import io.anuke.arc.assets.loaders.*;
import io.anuke.arc.assets.loaders.resolvers.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.freetype.*;
import io.anuke.arc.freetype.FreeTypeFontGenerator.*;
import io.anuke.arc.freetype.FreetypeFontLoader.*;
import io.anuke.arc.function.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.graphics.g2d.*;
@ -29,10 +34,10 @@ import io.anuke.mindustry.ui.dialogs.*;
import io.anuke.mindustry.ui.fragments.*;
import static io.anuke.arc.scene.actions.Actions.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class UI implements ApplicationListener{
private FreeTypeFontGenerator generator;
public class UI implements ApplicationListener, Loadable{
private Skin skin;
public MenuFragment menufrag;
public HudFragment hudfrag;
@ -67,9 +72,25 @@ public class UI implements ApplicationListener{
public Cursor drillCursor, unloadCursor;
public UI(){
Skin skin = new Skin(Core.atlas);
generateFonts(skin);
FileHandleResolver resolver = new InternalFileHandleResolver();
Core.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
Core.assets.setLoader(BitmapFont.class, null, new FreetypeFontLoader(resolver));
skin = new Skin();
setupFonts();
}
@Override
public void loadAsync(){
}
@Override
public void loadSync(){
//TODO type-safe skin files
skin.addRegions(Core.atlas);
loadExtraStyle(skin);
skin.getFont("default").getData().markupEnabled = true;
skin.getFont("default").setOwnsTexture(false);
skin.load(Core.files.internal("sprites/uiskin.json"));
for(BitmapFont font : skin.getAll(BitmapFont.class).values()){
@ -97,6 +118,11 @@ public class UI implements ApplicationListener{
loadExtraCursors();
}
@Override
public Array<AssetDescriptor> getDependencies(){
return Array.with(new AssetDescriptor<>(Control.class), new AssetDescriptor<>("outline", BitmapFont.class), new AssetDescriptor<>("default", BitmapFont.class), new AssetDescriptor<>("chat", BitmapFont.class));
}
/** Called from a static context to make the cursor appear immediately upon startup.*/
public static void loadSystemCursors(){
SystemCursor.arrow.set(Core.graphics.newCursor("cursor"));
@ -130,8 +156,8 @@ public class UI implements ApplicationListener{
unloadCursor = Core.graphics.newCursor("unload");
}
void generateFonts(Skin skin){
generator = new FreeTypeFontGenerator(Core.files.internal("fonts/font.ttf"));
void setupFonts(){
String fontName = "fonts/font.ttf";
FreeTypeFontParameter param = new FreeTypeFontParameter(){{
size = (int)(UnitScl.dp.scl(18f));
@ -148,11 +174,9 @@ public class UI implements ApplicationListener{
incremental = true;
}};
skin.add("outline", generator.generateFont(outlined));
skin.add("default", generator.generateFont(param));
skin.add("chat", generator.generateFont(param));
skin.getFont("default").getData().markupEnabled = true;
skin.getFont("default").setOwnsTexture(false);
Core.assets.load("outline", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, outlined)).loaded = f -> skin.add("outline", f);
Core.assets.load("default", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> skin.add("default", f);
Core.assets.load("chat", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> skin.add("chat", f);
}
@Override
@ -232,7 +256,7 @@ public class UI implements ApplicationListener{
@Override
public void dispose(){
generator.dispose();
//generator.dispose();
}
public void loadAnd(Runnable call){

View File

@ -6,7 +6,6 @@ import io.anuke.arc.collection.*;
import io.anuke.arc.math.*;
import io.anuke.arc.math.geom.*;
import io.anuke.arc.util.*;
import io.anuke.mindustry.ai.*;
import io.anuke.mindustry.content.*;
import io.anuke.mindustry.core.GameState.*;
import io.anuke.mindustry.entities.*;
@ -21,13 +20,9 @@ import io.anuke.mindustry.type.*;
import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.blocks.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class World implements ApplicationListener{
public final Maps maps = new Maps();
public final BlockIndexer indexer = new BlockIndexer();
public final WaveSpawner spawner = new WaveSpawner();
public final Pathfinder pathfinder = new Pathfinder();
public class World{
public final Context context = new Context();
private Map currentMap;
@ -36,17 +31,7 @@ public class World implements ApplicationListener{
private boolean generating, invalidMap;
public World(){
maps.load();
}
@Override
public void init(){
maps.loadLegacyMaps();
}
@Override
public void dispose(){
maps.dispose();
}
public boolean isInvalidMap(){

View File

@ -8,7 +8,7 @@ import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.Floor;
import static io.anuke.mindustry.Vars.content;
import static io.anuke.mindustry.Min.content;
public class DrawOperation{
private MapEditor editor;

View File

@ -10,8 +10,8 @@ import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.*;
import io.anuke.mindustry.world.modules.*;
import static io.anuke.mindustry.Vars.state;
import static io.anuke.mindustry.Vars.ui;
import static io.anuke.mindustry.Min.state;
import static io.anuke.mindustry.Min.ui;
//TODO somehow remove or replace this class with a more flexible solution
public class EditorTile extends Tile{

View File

@ -5,7 +5,7 @@ import io.anuke.arc.function.*;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Bresenham2;
import io.anuke.arc.util.Structs;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.world.*;
@ -80,7 +80,7 @@ public enum EditorTool{
editor.drawCircle(x, y, tile -> {
if(mode == -1){
//erase block
Vars.world.removeBlock(tile);
Min.world.removeBlock(tile);
}else if(mode == 0){
//erase ore
tile.clearOverlay();

View File

@ -16,7 +16,7 @@ import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.blocks.BlockPart;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.world;
public class MapEditor{
public static final int[] brushSizes = {1, 2, 3, 4, 5, 9, 15, 20};

View File

@ -30,7 +30,7 @@ import io.anuke.mindustry.world.Block.*;
import io.anuke.mindustry.world.blocks.*;
import io.anuke.mindustry.world.blocks.storage.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class MapEditorDialog extends Dialog implements Disposable{
public final MapEditor editor;
@ -93,11 +93,11 @@ public class MapEditorDialog extends Dialog implements Disposable{
"$editor.importmap", "$editor.importmap.description", "icon-load-map", (Runnable)loadDialog::show,
"$editor.importfile", "$editor.importfile.description", "icon-file", (Runnable)() ->
Platform.instance.showFileChooser("$editor.loadmap", "Map Files", file -> ui.loadAnd(() -> {
world.maps.tryCatchMapError(() -> {
maps.tryCatchMapError(() -> {
if(MapIO.isImage(file)){
ui.showInfo("$editor.errorimage");
}else if(file.extension().equalsIgnoreCase(oldMapExtension)){
editor.beginEdit(world.maps.makeLegacyMap(file));
editor.beginEdit(maps.makeLegacyMap(file));
}else{
editor.beginEdit(MapIO.createMap(file, true));
}
@ -286,11 +286,11 @@ public class MapEditorDialog extends Dialog implements Disposable{
infoDialog.show();
Core.app.post(() -> ui.showError("$editor.save.noname"));
}else{
Map map = world.maps.all().find(m -> m.name().equals(name));
Map map = maps.all().find(m -> m.name().equals(name));
if(map != null && !map.custom){
handleSaveBuiltin(map);
}else{
world.maps.saveMap(editor.getTags());
maps.saveMap(editor.getTags());
ui.showInfoFade("$editor.saved");
}
}
@ -670,7 +670,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
int i = 0;
blocksOut.clear();
blocksOut.addAll(Vars.content.blocks());
blocksOut.addAll(Min.content.blocks());
blocksOut.sort((b1, b2) -> {
int core = -Boolean.compare(b1 instanceof CoreBlock, b2 instanceof CoreBlock);
if(core != 0) return core;

View File

@ -21,7 +21,7 @@ import io.anuke.mindustry.ui.dialogs.*;
import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.blocks.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
@SuppressWarnings("unchecked")
public class MapGenerateDialog extends FloatingDialog{
@ -72,7 +72,7 @@ public class MapGenerateDialog extends FloatingDialog{
}).size(160f, 64f);
}else{
buttons.addButton("$settings.reset", () -> {
filters.set(world.maps.readFilters(""));
filters.set(maps.readFilters(""));
rebuildFilters();
update();
}).size(160f, 64f);
@ -304,7 +304,7 @@ public class MapGenerateDialog extends FloatingDialog{
}
selection.cont.addButton("$filter.defaultores", () -> {
world.maps.addDefaultOres(filters);
maps.addDefaultOres(filters);
rebuildFilters();
update();
selection.hide();

View File

@ -9,8 +9,6 @@ import io.anuke.mindustry.game.*;
import io.anuke.mindustry.io.*;
import io.anuke.mindustry.ui.dialogs.*;
import static io.anuke.mindustry.Vars.world;
public class MapInfoDialog extends FloatingDialog{
private final MapEditor editor;
private final WaveInfoDialog waveInfo;
@ -61,7 +59,7 @@ public class MapInfoDialog extends FloatingDialog{
t.row();
t.add("$editor.rules").padRight(8).left();
t.addButton("$edit", () -> ruleInfo.show(Vars.state.rules, () -> Vars.state.rules = new Rules())).left().width(200f);
t.addButton("$edit", () -> ruleInfo.show(Min.state.rules, () -> Min.state.rules = new Rules())).left().width(200f);
t.row();
t.add("$editor.waves").padRight(8).left();
@ -70,7 +68,7 @@ public class MapInfoDialog extends FloatingDialog{
t.row();
t.add("$editor.generation").padRight(8).left();
t.addButton("$edit",
() -> generate.show(world.maps.readFilters(editor.getTags().get("genfilters", "")),
() -> generate.show(Min.maps.readFilters(editor.getTags().get("genfilters", "")),
filters -> editor.getTags().put("genfilters", JsonIO.write(filters)))
).left().width(200f);

View File

@ -1,14 +1,14 @@
package io.anuke.mindustry.editor;
import io.anuke.arc.function.Consumer;
import io.anuke.arc.function.*;
import io.anuke.arc.scene.ui.*;
import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.arc.util.Scaling;
import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.ui.BorderImage;
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
import io.anuke.arc.scene.ui.layout.*;
import io.anuke.arc.util.*;
import io.anuke.mindustry.maps.*;
import io.anuke.mindustry.ui.*;
import io.anuke.mindustry.ui.dialogs.*;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.maps;
public class MapLoadDialog extends FloatingDialog{
private Map selected = null;
@ -17,7 +17,6 @@ public class MapLoadDialog extends FloatingDialog{
super("$editor.loadmap");
shown(this::rebuild);
rebuild();
TextButton button = new TextButton("$load");
button.setDisabled(() -> selected == null);
@ -35,8 +34,8 @@ public class MapLoadDialog extends FloatingDialog{
public void rebuild(){
cont.clear();
if(world.maps.all().size > 0){
selected = world.maps.all().first();
if(maps.all().size > 0){
selected = maps.all().first();
}
ButtonGroup<TextButton> group = new ButtonGroup<>();
@ -52,7 +51,7 @@ public class MapLoadDialog extends FloatingDialog{
ScrollPane pane = new ScrollPane(table, "horizontal");
pane.setFadeScrollBars(false);
for(Map map : world.maps.all()){
for(Map map : maps.all()){
TextButton button = new TextButton(map.name(), "toggle");
button.add(new BorderImage(map.texture, 2f).setScaling(Scaling.fit)).size(16 * 4f);
@ -64,7 +63,7 @@ public class MapLoadDialog extends FloatingDialog{
if(++i % maxcol == 0) table.row();
}
if(world.maps.all().size == 0){
if(maps.all().size == 0){
table.add("$maps.none").center();
}else{
cont.add("$editor.loadmap");

View File

@ -8,7 +8,7 @@ import io.anuke.arc.graphics.Texture;
import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.util.Disposable;
import io.anuke.arc.util.*;
import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.graphics.IndexedRenderer;
@ -16,7 +16,7 @@ import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.BlockPart;
import static io.anuke.mindustry.Vars.tilesize;
import static io.anuke.mindustry.Min.tilesize;
public class MapRenderer implements Disposable{
private static final int chunkSize = 64;

View File

@ -1,14 +1,13 @@
package io.anuke.mindustry.editor;
import io.anuke.arc.function.Consumer;
import io.anuke.arc.scene.ui.TextButton;
import io.anuke.arc.scene.ui.TextField;
import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
import io.anuke.arc.function.*;
import io.anuke.arc.scene.ui.*;
import io.anuke.mindustry.*;
import io.anuke.mindustry.core.*;
import io.anuke.mindustry.maps.*;
import io.anuke.mindustry.ui.dialogs.*;
import static io.anuke.mindustry.Vars.ui;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.ui;
public class MapSaveDialog extends FloatingDialog{
private TextField field;
@ -24,7 +23,7 @@ public class MapSaveDialog extends FloatingDialog{
shown(() -> {
cont.clear();
cont.label(() -> {
Map map = world.maps.byName(field.getText());
Map map = Min.maps.byName(field.getText());
if(map != null){
if(map.custom){
return "$editor.overwrite";
@ -69,7 +68,7 @@ public class MapSaveDialog extends FloatingDialog{
if(field.getText().isEmpty()){
return true;
}
Map map = world.maps.byName(field.getText());
Map map = Min.maps.byName(field.getText());
return map != null && !map.custom;
}
}

View File

@ -17,8 +17,8 @@ import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.input.Binding;
import io.anuke.mindustry.ui.GridImage;
import static io.anuke.mindustry.Vars.mobile;
import static io.anuke.mindustry.Vars.ui;
import static io.anuke.mindustry.Min.mobile;
import static io.anuke.mindustry.Min.ui;
public class MapView extends Element implements GestureListener{
private MapEditor editor;

View File

@ -10,7 +10,7 @@ import io.anuke.arc.scene.ui.Label;
import io.anuke.arc.scene.ui.TextField.TextFieldFilter;
import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.arc.util.*;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.content.*;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.graphics.Pal;
@ -18,7 +18,7 @@ import io.anuke.mindustry.io.JsonIO;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
import static io.anuke.mindustry.game.SpawnGroup.never;
public class WaveInfoDialog extends FloatingDialog{
@ -52,13 +52,13 @@ public class WaveInfoDialog extends FloatingDialog{
dialog.cont.defaults().size(210f, 64f);
dialog.cont.addButton("$waves.copy", () -> {
ui.showInfoFade("$waves.copied");
Core.app.setClipboardText(world.maps.writeWaves(groups));
Core.app.setClipboardText(maps.writeWaves(groups));
dialog.hide();
}).disabled(b -> groups == null);
dialog.cont.row();
dialog.cont.addButton("$waves.load", () -> {
try{
groups = world.maps.readWaves(Core.app.getClipboardText());
groups = maps.readWaves(Core.app.getClipboardText());
buildGroups();
}catch(Exception e){
ui.showError("$waves.invalid");
@ -242,7 +242,7 @@ public class WaveInfoDialog extends FloatingDialog{
table.add((wave + 1) + "").color(Pal.accent).center().colspan(2).get().setAlignment(Align.center, Align.center);
table.row();
int[] spawned = new int[Vars.content.getBy(ContentType.unit).size];
int[] spawned = new int[Min.content.getBy(ContentType.unit).size];
for(SpawnGroup spawn : groups){
spawned[spawn.type.id] += spawn.getUnitsSpawned(wave);

View File

@ -21,7 +21,7 @@ import io.anuke.mindustry.gen.PropCell;
import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/** Utility class for damaging in an area. */
public class Damage{

View File

@ -10,7 +10,7 @@ import io.anuke.arc.math.geom.Rectangle;
import io.anuke.mindustry.entities.traits.DrawTrait;
import io.anuke.mindustry.entities.traits.Entity;
import static io.anuke.mindustry.Vars.collisions;
import static io.anuke.mindustry.Min.collisions;
public class Entities{
private static final Array<EntityGroup<?>> groupArray = new Array<>();

View File

@ -7,8 +7,8 @@ import io.anuke.mindustry.entities.traits.Entity;
import io.anuke.mindustry.entities.traits.SolidTrait;
import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.tilesize;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.tilesize;
import static io.anuke.mindustry.Min.world;
public class EntityCollisions{
//range for tile collision scanning

View File

@ -11,7 +11,7 @@ import io.anuke.mindustry.entities.type.*;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/** Utility class for unit and team interactions.*/
public class Units{
@ -68,13 +68,13 @@ public class Units{
/** Returns the neareset damaged tile. */
public static TileEntity findDamagedTile(Team team, float x, float y){
Tile tile = Geometry.findClosest(x, y, world.indexer.getDamaged(team));
Tile tile = Geometry.findClosest(x, y, indexer.getDamaged(team));
return tile == null ? null : tile.entity;
}
/** Returns the neareset ally tile in a range. */
public static TileEntity findAllyTile(Team team, float x, float y, float range, Predicate<Tile> pred){
return world.indexer.findTile(team, x, y, range, pred);
return indexer.findTile(team, x, y, range, pred);
}
/** Returns the neareset enemy tile in a range. */
@ -82,7 +82,7 @@ public class Units{
if(team == Team.derelict) return null;
for(Team enemy : state.teams.enemiesOf(team)){
TileEntity entity = world.indexer.findTile(enemy, x, y, range, pred);
TileEntity entity = indexer.findTile(enemy, x, y, range, pred);
if(entity != null){
return entity;
}

View File

@ -16,8 +16,8 @@ import io.anuke.mindustry.entities.type.Unit;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.bulletGroup;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.bulletGroup;
import static io.anuke.mindustry.Min.world;
public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Poolable, DrawTrait, VelocityTrait, TimeTrait, TeamTrait, AbsorbTrait{
public Interval timer = new Interval(3);

View File

@ -9,7 +9,7 @@ import io.anuke.mindustry.entities.effect.*;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.world.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class LiquidBulletType extends BulletType{
Liquid liquid;

View File

@ -9,7 +9,7 @@ import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.world.blocks.distribution.MassDriver.DriverBulletData;
import static io.anuke.mindustry.Vars.content;
import static io.anuke.mindustry.Min.content;
public class MassDriverBolt extends BulletType{

View File

@ -8,7 +8,7 @@ import io.anuke.mindustry.entities.traits.BelowLiquidTrait;
import io.anuke.mindustry.entities.traits.DrawTrait;
import io.anuke.mindustry.graphics.Pal;
import static io.anuke.mindustry.Vars.groundEffectGroup;
import static io.anuke.mindustry.Min.groundEffectGroup;
/**
* Class for creating block rubble on the ground.

View File

@ -17,7 +17,7 @@ import io.anuke.mindustry.world.*;
import java.io.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class Fire extends TimedEntity implements SaveTrait, SyncTrait{
private static final IntMap<Fire> map = new IntMap<>();

View File

@ -2,7 +2,7 @@ package io.anuke.mindustry.entities.effect;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.util.Time;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.Effects.Effect;
import io.anuke.mindustry.entities.Effects.EffectRenderer;
@ -27,7 +27,7 @@ public class GroundEffectEntity extends EffectEntity{
if(!once && time >= lifetime()){
once = true;
time = 0f;
Tile tile = Vars.world.tileWorld(x, y);
Tile tile = Min.world.tileWorld(x, y);
if(tile != null && tile.floor().isLiquid){
remove();
}

View File

@ -17,7 +17,7 @@ import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.effectGroup;
import static io.anuke.mindustry.Min.effectGroup;
public class ItemTransfer extends TimedEntity implements DrawTrait{
private Vector2 from = new Vector2();

View File

@ -21,7 +21,7 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.gen.Call;
import io.anuke.mindustry.graphics.Pal;
import static io.anuke.mindustry.Vars.bulletGroup;
import static io.anuke.mindustry.Min.bulletGroup;
public class Lightning extends TimedEntity implements DrawTrait, TimeTrait{
public static final float lifetime = 10f;

View File

@ -24,7 +24,7 @@ import io.anuke.mindustry.world.Tile;
import java.io.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class Puddle extends SolidEntity implements SaveTrait, Poolable, DrawTrait, SyncTrait{
private static final IntMap<Puddle> map = new IntMap<>();

View File

@ -5,7 +5,7 @@ import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf;
import static io.anuke.mindustry.Vars.headless;
import static io.anuke.mindustry.Min.headless;
public class RubbleDecal extends Decal{
private TextureRegion region;

View File

@ -7,8 +7,8 @@ import io.anuke.arc.math.Angles;
import io.anuke.arc.math.Mathf;
import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.headless;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.headless;
import static io.anuke.mindustry.Min.world;
public class ScorchDecal extends Decal{
private static final int scorches = 5;

View File

@ -9,7 +9,7 @@ import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.traits.DrawTrait;
import io.anuke.mindustry.entities.traits.Entity;
import static io.anuke.mindustry.Vars.effectGroup;
import static io.anuke.mindustry.Min.effectGroup;
public class EffectEntity extends TimedEntity implements Poolable, DrawTrait{
public Effect effect;

View File

@ -21,7 +21,7 @@ import io.anuke.mindustry.world.blocks.BuildBlock.*;
import java.io.*;
import java.util.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
import static io.anuke.mindustry.entities.traits.BuilderTrait.BuildDataStatic.*;
/** Interface for units that build things.*/
@ -228,7 +228,7 @@ public interface BuilderTrait extends Entity, TeamTrait{
float px = unit.x + Angles.trnsx(unit.rotation, focusLen);
float py = unit.y + Angles.trnsy(unit.rotation, focusLen);
float sz = Vars.tilesize * tile.block().size / 2f;
float sz = Min.tilesize * tile.block().size / 2f;
float ang = unit.angleTo(tile);
tmptr[0].set(tile.drawx() - sz, tile.drawy() - sz);

View File

@ -13,7 +13,7 @@ import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public interface MinerTrait extends Entity{

View File

@ -3,7 +3,7 @@ package io.anuke.mindustry.entities.traits;
import io.anuke.arc.math.geom.*;
import io.anuke.arc.math.geom.QuadTree.QuadTreeObject;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
public interface SolidTrait extends QuadTreeObject, MoveTrait, VelocityTrait, Entity, Position{
@ -33,6 +33,6 @@ public interface SolidTrait extends QuadTreeObject, MoveTrait, VelocityTrait, En
}
default void move(float x, float y){
Vars.collisions.move(this, x, y);
Min.collisions.move(this, x, y);
}
}

View File

@ -22,7 +22,7 @@ import io.anuke.mindustry.world.meta.*;
import java.io.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/** Base class for AI units. */
public abstract class BaseUnit extends Unit implements ShooterTrait{
@ -84,12 +84,12 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
}
public boolean isCommanded(){
return world.indexer.getAllied(team, BlockFlag.comandCenter).size != 0 && world.indexer.getAllied(team, BlockFlag.comandCenter).first().entity instanceof CommandCenterEntity;
return indexer.getAllied(team, BlockFlag.comandCenter).size != 0 && indexer.getAllied(team, BlockFlag.comandCenter).first().entity instanceof CommandCenterEntity;
}
public UnitCommand getCommand(){
if(isCommanded()){
return world.indexer.getAllied(team, BlockFlag.comandCenter).first().<CommandCenterEntity>entity().command;
return indexer.getAllied(team, BlockFlag.comandCenter).first().<CommandCenterEntity>entity().command;
}
return null;
}
@ -145,12 +145,12 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
}
public void targetClosestAllyFlag(BlockFlag flag){
Tile target = Geometry.findClosest(x, y, world.indexer.getAllied(team, flag));
Tile target = Geometry.findClosest(x, y, indexer.getAllied(team, flag));
if(target != null) this.target = target.entity;
}
public void targetClosestEnemyFlag(BlockFlag flag){
Tile target = Geometry.findClosest(x, y, world.indexer.getEnemy(team, flag));
Tile target = Geometry.findClosest(x, y, indexer.getEnemy(team, flag));
if(target != null) this.target = target.entity;
}
@ -163,8 +163,8 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
public TileEntity getClosestEnemyCore(){
for(Team enemy : Vars.state.teams.enemiesOf(team)){
Tile tile = Geometry.findClosest(x, y, Vars.state.teams.get(enemy).cores);
for(Team enemy : Min.state.teams.enemiesOf(team)){
Tile tile = Geometry.findClosest(x, y, Min.state.teams.get(enemy).cores);
if(tile != null){
return tile.entity;
}
@ -183,7 +183,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
@Override
public float getDamageMultipler(){
return status.getDamageMultiplier() * Vars.state.rules.unitDamageMultiplier;
return status.getDamageMultiplier() * Min.state.rules.unitDamageMultiplier;
}
@Override
@ -232,7 +232,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
@Override
public float maxHealth(){
return type.health * Vars.state.rules.unitHealthMultiplier;
return type.health * Min.state.rules.unitHealthMultiplier;
}
@Override

View File

@ -13,7 +13,7 @@ import io.anuke.mindustry.net.*;
import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.meta.*;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.*;
public abstract class FlyingUnit extends BaseUnit{
protected float[] weaponAngles = {0, 0};
@ -97,7 +97,7 @@ public abstract class FlyingUnit extends BaseUnit{
if(retarget()){
target = getSpawner();
Tile repair = Geometry.findClosest(x, y, world.indexer.getAllied(team, BlockFlag.repair));
Tile repair = Geometry.findClosest(x, y, indexer.getAllied(team, BlockFlag.repair));
if(repair != null && damaged()) FlyingUnit.this.target = repair.entity;
if(target == null) target = getClosestCore();
}

View File

@ -14,7 +14,7 @@ import io.anuke.mindustry.type.*;
import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.blocks.*;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.*;
public abstract class GroundUnit extends BaseUnit{
protected static Vector2 vec = new Vector2();
@ -223,7 +223,7 @@ public abstract class GroundUnit extends BaseUnit{
protected void moveToCore(){
Tile tile = world.tileWorld(x, y);
if(tile == null) return;
Tile targetTile = world.pathfinder.getTargetTile(team, tile);
Tile targetTile = pathfinder.getTargetTile(team, tile);
if(tile == targetTile) return;
@ -235,8 +235,8 @@ public abstract class GroundUnit extends BaseUnit{
protected void moveAwayFromCore(){
Team enemy = null;
for(Team team : Vars.state.teams.enemiesOf(team)){
if(Vars.state.teams.isActive(team)){
for(Team team : Min.state.teams.enemiesOf(team)){
if(Min.state.teams.isActive(team)){
enemy = team;
break;
}
@ -246,7 +246,7 @@ public abstract class GroundUnit extends BaseUnit{
Tile tile = world.tileWorld(x, y);
if(tile == null) return;
Tile targetTile = world.pathfinder.getTargetTile(enemy, tile);
Tile targetTile = pathfinder.getTargetTile(enemy, tile);
TileEntity core = getClosestCore();
if(tile == targetTile || core == null || dst(core) < 120f) return;

View File

@ -12,7 +12,7 @@ import io.anuke.arc.math.geom.*;
import io.anuke.arc.scene.ui.layout.*;
import io.anuke.arc.util.*;
import io.anuke.arc.util.pooling.Pools;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.content.*;
import io.anuke.mindustry.entities.*;
import io.anuke.mindustry.entities.traits.*;
@ -31,7 +31,7 @@ import io.anuke.mindustry.world.blocks.*;
import java.io.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
public static final int timerSync = 2;
@ -731,7 +731,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
target = Units.closestTarget(team, x, y, getWeapon().bullet.range(), u -> u.getTeam() != Team.derelict, u -> u.getTeam() != Team.derelict);
if(mech.canHeal && target == null){
target = Geometry.findClosest(x, y, world.indexer.getDamaged(Team.sharded));
target = Geometry.findClosest(x, y, indexer.getDamaged(Team.sharded));
if(target != null && dst(target) > getWeapon().bullet.range()){
target = null;
}else if(target != null){
@ -859,7 +859,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
byte mechid = stream.readByte();
int spawner = stream.readInt();
Tile stile = world.tile(spawner);
Player player = headless ? this : Vars.player;
Player player = headless ? this : Min.player;
player.readSaveSuper(stream, version);
player.mech = content.getByID(ContentType.mech, mechid);
player.dead = false;

View File

@ -20,7 +20,7 @@ import io.anuke.mindustry.world.modules.*;
import java.io.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
public static final float timeToSleep = 60f * 4; //4 seconds to fall asleep
@ -52,7 +52,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
tile.entity.health = health;
if(tile.entity.damaged()){
world.indexer.notifyTileDamaged(tile.entity);
indexer.notifyTileDamaged(tile.entity);
}
}
}
@ -171,7 +171,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
}
if(preHealth >= maxHealth() - 0.00001f && health < maxHealth() && world != null){ //when just damaged
world.indexer.notifyTileDamaged(this);
indexer.notifyTileDamaged(this);
}
}

View File

@ -27,7 +27,7 @@ import io.anuke.mindustry.world.blocks.*;
import java.io.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public abstract class Unit extends DestructibleEntity implements SaveTrait, TargetTrait, SyncTrait, DrawTrait, TeamTrait{
/** Total duration of hit flash effect */
@ -256,7 +256,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
//apply knockback based on spawns
if(getTeam() != waveTeam){
float relativeSize = state.rules.dropZoneRadius + getSize()/2f + 1f;
for(Tile spawn : world.spawner.getGroundSpawns()){
for(Tile spawn : spawner.getGroundSpawns()){
if(withinDst(spawn.worldx(), spawn.worldy(), relativeSize)){
velocity.add(Tmp.v1.set(this).sub(spawn.worldx(), spawn.worldy()).setLength(0.1f + 1f - dst(spawn) / relativeSize).scl(0.45f * Time.delta()));
}

View File

@ -7,7 +7,7 @@ import io.anuke.mindustry.entities.units.*;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.meta.BlockFlag;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.*;
public abstract class BaseDrone extends FlyingUnit{
public final UnitState retreat = new UnitState(){
@ -20,7 +20,7 @@ public abstract class BaseDrone extends FlyingUnit{
state.set(getStartState());
}else if(!targetHasFlag(BlockFlag.repair)){
if(retarget()){
Tile repairPoint = Geometry.findClosest(x, y, world.indexer.getAllied(team, BlockFlag.repair));
Tile repairPoint = Geometry.findClosest(x, y, indexer.getAllied(team, BlockFlag.repair));
if(repairPoint != null){
target = repairPoint;
}else{
@ -49,7 +49,7 @@ public abstract class BaseDrone extends FlyingUnit{
@Override
public void behavior(){
if(health <= maxHealth() * type.retreatPercent && !state.is(retreat) && Geometry.findClosest(x, y, world.indexer.getAllied(team, BlockFlag.repair)) != null){
if(health <= maxHealth() * type.retreatPercent && !state.is(retreat) && Geometry.findClosest(x, y, indexer.getAllied(team, BlockFlag.repair)) != null){
setState(retreat);
}
}

View File

@ -6,7 +6,7 @@ import io.anuke.arc.collection.IntIntMap;
import io.anuke.arc.collection.Queue;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.util.*;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.traits.BuilderTrait;
import io.anuke.mindustry.entities.traits.TargetTrait;
@ -21,7 +21,7 @@ import io.anuke.mindustry.world.blocks.BuildBlock.BuildEntity;
import java.io.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class BuilderDrone extends BaseDrone implements BuilderTrait{
private static final StaticReset reset = new StaticReset();
@ -189,7 +189,7 @@ public class BuilderDrone extends BaseDrone implements BuilderTrait{
}
if(isRebuild() && !isBuilding()){
TeamData data = Vars.state.teams.get(team);
TeamData data = Min.state.teams.get(team);
if(!data.brokenBlocks.isEmpty()){
long block = data.brokenBlocks.removeLast();

View File

@ -14,7 +14,7 @@ import io.anuke.mindustry.world.Tile;
import java.io.*;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.*;
/** A drone that only mines.*/
public class MinerDrone extends BaseDrone implements MinerTrait{
@ -46,7 +46,7 @@ public class MinerDrone extends BaseDrone implements MinerTrait{
setState(drop);
}else{
if(retarget() && targetItem != null){
target = world.indexer.findClosestOre(x, y, targetItem);
target = indexer.findClosestOre(x, y, targetItem);
}
if(target instanceof Tile){
@ -174,6 +174,6 @@ public class MinerDrone extends BaseDrone implements MinerTrait{
if(entity == null){
return;
}
targetItem = Structs.findMin(type.toMine, world.indexer::hasOre, (a, b) -> -Integer.compare(entity.items.get(a), entity.items.get(b)));
targetItem = Structs.findMin(type.toMine, indexer::hasOre, (a, b) -> -Integer.compare(entity.items.get(a), entity.items.get(b)));
}
}

View File

@ -9,7 +9,7 @@ import io.anuke.mindustry.world.blocks.*;
import java.io.*;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.world;
public class RepairDrone extends BaseDrone{
public final UnitState repair = new UnitState(){

View File

@ -14,7 +14,7 @@ import io.anuke.mindustry.type.StatusEffect;
import java.io.*;
import static io.anuke.mindustry.Vars.content;
import static io.anuke.mindustry.Min.content;
/** Class for controlling status effects on an entity. */
public class Statuses implements Saveable{

View File

@ -1,7 +1,7 @@
package io.anuke.mindustry.entities.units;
import io.anuke.arc.math.Mathf;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.content.Items;
import io.anuke.mindustry.entities.type.BaseUnit;
import io.anuke.mindustry.entities.type.TileEntity;
@ -13,13 +13,13 @@ public class UnitDrops{
public static void dropItems(BaseUnit unit){
//items only dropped in waves for enemy team
if(unit.getTeam() != Vars.waveTeam || !Vars.state.rules.unitDrops){
if(unit.getTeam() != Min.waveTeam || !Min.state.rules.unitDrops){
return;
}
TileEntity core = unit.getClosestEnemyCore();
if(core == null || core.dst(unit) > Vars.mineTransferRange){
if(core == null || core.dst(unit) > Min.mineTransferRange){
return;
}
@ -30,7 +30,7 @@ public class UnitDrops{
for(int i = 0; i < 3; i++){
for(Item item : dropTable){
//only drop unlocked items
if(!Vars.headless && !Vars.data.isUnlocked(item)){
if(!Min.headless && !Min.data.isUnlocked(item)){
continue;
}

View File

@ -1,6 +1,6 @@
package io.anuke.mindustry.game;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.type.ContentType;
@ -9,8 +9,8 @@ public abstract class Content{
public final short id;
public Content(){
this.id = (short)Vars.content.getBy(getContentType()).size;
Vars.content.handleContent(this);
this.id = (short)Min.content.getBy(getContentType()).size;
Min.content.handleContent(this);
}
/**
@ -19,7 +19,7 @@ public abstract class Content{
*/
public abstract ContentType getContentType();
/** Called after all content is created. Do not use to load regions or texture data! */
/** Called after all content and modules are created. Do not use to load regions or texture data! */
public void init(){
}

View File

@ -4,7 +4,7 @@ import io.anuke.arc.*;
import io.anuke.arc.function.*;
import io.anuke.mindustry.maps.*;
import static io.anuke.mindustry.Vars.waveTeam;
import static io.anuke.mindustry.Min.waveTeam;
/** Defines preset rule sets. */
public enum Gamemode{

View File

@ -7,7 +7,7 @@ import io.anuke.mindustry.content.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.type.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/** Stores player unlocks. Clientside only. */
public class GlobalData{
@ -106,7 +106,7 @@ public class GlobalData{
@SuppressWarnings("unchecked")
public void load(){
unlocked = Core.settings.getObject("unlocks", ObjectMap.class, ObjectMap::new);
for(Item item : Vars.content.items()){
for(Item item : Min.content.items()){
items.put(item, Core.settings.getInt("item-" + item.name, 0));
}
@ -118,7 +118,7 @@ public class GlobalData{
public void save(){
Core.settings.putObject("unlocks", unlocked);
for(Item item : Vars.content.items()){
for(Item item : Min.content.items()){
Core.settings.put("item-" + item.name, items.get(item, 0));
}
Core.settings.save();

View File

@ -11,7 +11,7 @@ public class LoopControl{
private ObjectMap<Sound, SoundData> sounds = new ObjectMap<>();
public void play(Sound sound, Position pos, float volume){
if(Vars.headless) return;
if(Min.headless) return;
float baseVol = sound.calcFalloff(pos.getX(), pos.getY());
float vol = baseVol * volume;

View File

@ -10,7 +10,7 @@ import io.anuke.mindustry.core.GameState.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.gen.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/** Controls playback of multiple music tracks.*/
public class MusicControl{

View File

@ -17,8 +17,8 @@ import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import static io.anuke.mindustry.Vars.saveExtension;
import static io.anuke.mindustry.Vars.state;
import static io.anuke.mindustry.Min.saveExtension;
import static io.anuke.mindustry.Min.state;
public class Saves{
private int nextSlot;

View File

@ -6,7 +6,7 @@ import io.anuke.arc.util.serialization.JsonValue;
import io.anuke.mindustry.entities.type.BaseUnit;
import io.anuke.mindustry.type.*;
import static io.anuke.mindustry.Vars.content;
import static io.anuke.mindustry.Min.content;
/**
* A spawn group defines spawn information for a specific type of unit, with optional extra information like

View File

@ -2,7 +2,7 @@ package io.anuke.mindustry.game;
import io.anuke.annotations.Annotations.Struct;
import io.anuke.arc.collection.*;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.world.Tile;
/** Class for various team-based utilities. */
@ -29,7 +29,7 @@ public class Teams{
/** Returns whether a team is active, e.g. whether it has any cores remaining. */
public boolean isActive(Team team){
//the enemy wave team is always active
return team == Vars.waveTeam || get(team).cores.size > 0;
return team == Min.waveTeam || get(team).cores.size > 0;
}
/** Returns a set of all teams that are enemies of this team. */

View File

@ -15,7 +15,7 @@ import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.world.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/** Handles tutorial state. */
public class Tutorial{
@ -161,7 +161,7 @@ public class Tutorial{
}
},
deposit(() -> event("deposit")),
waves(() -> state.wave > 2 && state.enemies() <= 0 && !world.spawner.isSpawning()){
waves(() -> state.wave > 2 && state.enemies() <= 0 && !spawner.isSpawning()){
void begin(){
state.rules.waveTimer = true;
logic.runWave();

View File

@ -3,7 +3,7 @@ package io.anuke.mindustry.game;
import io.anuke.arc.Core;
import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
/** Base interface for an unlockable content type. */
public abstract class UnlockableContent extends MappableContent{
@ -42,7 +42,7 @@ public abstract class UnlockableContent extends MappableContent{
}
public final boolean unlocked(){
return Vars.data.isUnlocked(this);
return Min.data.isUnlocked(this);
}
public final boolean locked(){

View File

@ -13,7 +13,7 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.world.*;
import static io.anuke.arc.Core.camera;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class BlockRenderer implements Disposable{
private final static int initialRequests = 32 * 32;

View File

@ -6,7 +6,7 @@ import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.glutils.Shader;
import static io.anuke.arc.Core.camera;
import static io.anuke.mindustry.Vars.renderer;
import static io.anuke.mindustry.Min.renderer;
public enum CacheLayer{
water{

View File

@ -15,8 +15,8 @@ import io.anuke.mindustry.world.blocks.Floor;
import java.util.Arrays;
import static io.anuke.mindustry.Vars.tilesize;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.tilesize;
import static io.anuke.mindustry.Min.world;
public class FloorRenderer implements Disposable{
private final static int chunksize = 64;

View File

@ -19,7 +19,7 @@ import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.blocks.Floor;
import io.anuke.mindustry.world.blocks.OreBlock;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class MenuRenderer implements Disposable{
private static final float darkness = 0.3f;

View File

@ -15,7 +15,7 @@ import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.io.*;
import io.anuke.mindustry.world.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class MinimapRenderer implements Disposable{
private static final float baseSize = 16f;

View File

@ -9,7 +9,7 @@ import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.Time;
import io.anuke.arc.util.Tmp;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.type.Player;
@ -18,7 +18,7 @@ import io.anuke.mindustry.input.InputHandler;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class OverlayRenderer{
private static final float indicatorLength = 14f;
@ -38,7 +38,7 @@ public class OverlayRenderer{
if(Core.settings.getBool("indicators")){
for(Player player : playerGroup.all()){
if(Vars.player != player && Vars.player.getTeam() == player.getTeam()){
if(Min.player != player && Min.player.getTeam() == player.getTeam()){
if(!rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f)
.setCenter(Core.camera.position.x, Core.camera.position.y).contains(player.x, player.y)){
@ -96,7 +96,7 @@ public class OverlayRenderer{
Lines.stroke(2f);
Draw.color(Color.GRAY, Color.LIGHT_GRAY, Mathf.absin(Time.time(), 8f, 1f));
for(Tile tile : world.spawner.getGroundSpawns()){
for(Tile tile : spawner.getGroundSpawns()){
if(tile.withinDst(player.x, player.y, state.rules.dropZoneRadius + spawnerMargin)){
Draw.alpha(Mathf.clamp(1f - (player.dst(tile) - state.rules.dropZoneRadius) / spawnerMargin));
Lines.dashCircle(tile.worldx(), tile.worldy(), state.rules.dropZoneRadius);

View File

@ -10,8 +10,8 @@ import io.anuke.mindustry.entities.type.Player;
import static io.anuke.arc.Core.camera;
import static io.anuke.arc.Core.graphics;
import static io.anuke.mindustry.Vars.playerGroup;
import static io.anuke.mindustry.Vars.renderer;
import static io.anuke.mindustry.Min.playerGroup;
import static io.anuke.mindustry.Min.renderer;
public class Pixelator implements Disposable{
private FrameBuffer buffer = new FrameBuffer(2, 2);

View File

@ -17,7 +17,7 @@ import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.world.*;
import static io.anuke.arc.Core.scene;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
import static io.anuke.mindustry.input.PlaceMode.*;
public class DesktopInput extends InputHandler{

View File

@ -25,7 +25,7 @@ import io.anuke.mindustry.type.*;
import io.anuke.mindustry.ui.fragments.*;
import io.anuke.mindustry.world.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public abstract class InputHandler implements InputProcessor{
/** Used for dropping items. */

View File

@ -21,7 +21,7 @@ import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.input.PlaceUtils.*;
import io.anuke.mindustry.world.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
import static io.anuke.mindustry.input.PlaceMode.*;
public class MobileInput extends InputHandler implements GestureListener{

View File

@ -7,7 +7,7 @@ import io.anuke.arc.math.geom.Point2;
import io.anuke.arc.util.pooling.Pools;
import io.anuke.mindustry.world.Block;
import static io.anuke.mindustry.Vars.tilesize;
import static io.anuke.mindustry.Min.tilesize;
public class PlaceUtils{
private static final NormalizeResult result = new NormalizeResult();

View File

@ -1,63 +0,0 @@
package io.anuke.mindustry.io;
import io.anuke.arc.Core;
import io.anuke.arc.files.FileHandle;
import io.anuke.arc.util.*;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.input.Binding;
import java.util.Locale;
import static io.anuke.mindustry.Vars.headless;
public class BundleLoader{
public static void load(){
Core.settings.defaults("locale", "default");
Core.keybinds.setDefaults(Binding.values());
Core.settings.load();
loadBundle();
}
private static Locale getLocale(){
String loc = Core.settings.getString("locale");
if(loc.equals("default")){
return Locale.getDefault();
}else{
Locale lastLocale;
if(loc.contains("_")){
String[] split = loc.split("_");
lastLocale = new Locale(split[0], split[1]);
}else{
lastLocale = new Locale(loc);
}
return lastLocale;
}
}
private static void loadBundle(){
if(headless) return;
try{
//try loading external bundle
FileHandle handle = Core.files.local("bundle");
Locale locale = Locale.ENGLISH;
Core.bundle = I18NBundle.createBundle(handle, locale);
Log.info("NOTE: external translation bundle has been loaded.");
if(!headless){
Time.run(10f, () -> Vars.ui.showInfo("Note: You have successfully loaded an external translation bundle."));
}
}catch(Throwable e){
//no external bundle found
FileHandle handle = Core.files.internal("bundles/bundle");
Locale locale = getLocale();
Locale.setDefault(locale);
Core.bundle = I18NBundle.createBundle(handle, locale);
}
}
}

View File

@ -50,7 +50,7 @@ public class JsonIO{
@Override
public Zone read(Json json, JsonValue jsonData, Class type){
return Vars.content.getByName(ContentType.zone, jsonData.asString());
return Min.content.getByName(ContentType.zone, jsonData.asString());
}
});
@ -63,13 +63,13 @@ public class JsonIO{
@Override
public Item read(Json json, JsonValue jsonData, Class type){
if(jsonData.asString() == null) return Items.copper;
Item i = Vars.content.getByName(ContentType.item, jsonData.asString());
Item i = Min.content.getByName(ContentType.item, jsonData.asString());
return i == null ? Items.copper : i;
}
});
//TODO extremely hacky and disgusting
for(Block block : Vars.content.blocks()){
for(Block block : Min.content.blocks()){
Class type = block.getClass();
if(type.isAnonymousClass()) type = type.getSuperclass();
@ -81,7 +81,7 @@ public class JsonIO{
@Override
public Block read(Json json, JsonValue jsonData, Class type){
return Vars.content.getByName(ContentType.block, jsonData.asString());
return Min.content.getByName(ContentType.block, jsonData.asString());
}
});
}
@ -94,7 +94,7 @@ public class JsonIO{
@Override
public Block read(Json json, JsonValue jsonData, Class type){
return Vars.content.getByName(ContentType.block, jsonData.asString());
return Min.content.getByName(ContentType.block, jsonData.asString());
}
});

View File

@ -21,7 +21,7 @@ import io.anuke.mindustry.world.blocks.Floor;
import java.io.*;
import java.util.zip.InflaterInputStream;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/** Map IO for the "old" .mmap format.
* Differentiate between legacy maps and new maps by checking the extension (or the header).*/

View File

@ -14,7 +14,7 @@ import io.anuke.mindustry.world.blocks.storage.*;
import java.io.*;
import java.util.zip.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/** Reads and writes map files. */
//TODO does this class even need to exist??? move to Maps?

View File

@ -4,7 +4,7 @@ import io.anuke.arc.collection.*;
import io.anuke.arc.files.FileHandle;
import io.anuke.arc.util.io.CounterInputStream;
import io.anuke.arc.util.io.FastDeflaterOutputStream;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.Min;
import io.anuke.mindustry.io.versions.Save1;
import io.anuke.mindustry.io.versions.Save2;
import io.anuke.mindustry.world.WorldContext;
@ -13,7 +13,7 @@ import java.io.*;
import java.util.Arrays;
import java.util.zip.InflaterInputStream;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class SaveIO{
/** Format header. This is the string 'MSAV' in ASCII. */
@ -108,7 +108,7 @@ public class SaveIO{
}
public static FileHandle fileFor(int slot){
return saveDirectory.child(slot + "." + Vars.saveExtension);
return saveDirectory.child(slot + "." + Min.saveExtension);
}
public static FileHandle backupFileFor(FileHandle file){

View File

@ -1,10 +1,10 @@
package io.anuke.mindustry.io;
import io.anuke.arc.collection.*;
import io.anuke.mindustry.game.Rules;
import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.maps.*;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.maps;
public class SaveMeta{
public int version;
@ -21,7 +21,7 @@ public class SaveMeta{
this.build = build;
this.timestamp = timestamp;
this.timePlayed = timePlayed;
this.map = world.maps.all().find(m -> m.name().equals(map));
this.map = maps.all().find(m -> m.name().equals(map));
this.wave = wave;
this.rules = rules;
this.tags = tags;

View File

@ -13,7 +13,7 @@ import io.anuke.mindustry.world.*;
import java.io.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public abstract class SaveVersion extends SaveFileReader{
public final int version;
@ -81,7 +81,7 @@ public abstract class SaveVersion extends SaveFileReader{
if(state.rules.spawns.isEmpty()) state.rules.spawns = defaultWaves.get();
lastReadBuild = map.getInt("build", -1);
Map worldmap = world.maps.byName(map.get("mapname", "\\\\\\"));
Map worldmap = maps.byName(map.get("mapname", "\\\\\\"));
world.setMap(worldmap == null ? new Map(StringMap.of(
"name", map.get("mapname", "Unknown"),
"width", 1,

View File

@ -3,7 +3,6 @@ package io.anuke.mindustry.io;
import io.anuke.annotations.Annotations.ReadClass;
import io.anuke.annotations.Annotations.WriteClass;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.util.CommandHandler.*;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.Effects.Effect;
import io.anuke.mindustry.entities.Entities;
@ -23,7 +22,7 @@ import io.anuke.mindustry.world.*;
import java.io.*;
import java.nio.ByteBuffer;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
/** Class for specifying read/write methods for code generation. */
@SuppressWarnings("unused")

View File

@ -9,7 +9,7 @@ import io.anuke.mindustry.game.*;
import io.anuke.mindustry.io.*;
import io.anuke.mindustry.maps.filters.*;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.maps;
public class Map implements Comparable<Map>{
/** Whether this is a custom map. */
@ -50,16 +50,20 @@ public class Map implements Comparable<Map>{
}
public Map(StringMap tags){
this(Vars.customMapDirectory.child(tags.get("name", "unknown")), 0, 0, tags, true);
this(Min.customMapDirectory.child(tags.get("name", "unknown")), 0, 0, tags, true);
}
public int getHightScore(){
return Core.settings.getInt("hiscore" + file.nameWithoutExtension(), 0);
}
public FileHandle previewFile(){
return Min.mapPreviewDirectory.child(file.nameWithoutExtension() + ".png");
}
public void setHighScore(int score){
Core.settings.put("hiscore" + file.nameWithoutExtension(), score);
Vars.data.modified();
Min.data.modified();
}
/** Returns the result of applying this map's rules to the specified gamemode.*/
@ -80,7 +84,7 @@ public class Map implements Comparable<Map>{
public Rules rules(Rules base){
try{
Rules result = JsonIO.read(Rules.class, base, tags.get("rules", "{}"));
if(result.spawns.isEmpty()) result.spawns = Vars.defaultWaves.get();
if(result.spawns.isEmpty()) result.spawns = Min.defaultWaves.get();
return result;
}catch(Exception e){
//error reading rules. ignore?
@ -94,7 +98,7 @@ public class Map implements Comparable<Map>{
if(tags.getInt("build", -1) < 83 && tags.getInt("build", -1) != -1 && tags.get("genfilters", "").isEmpty()){
return Array.with();
}
return world.maps.readFilters(tags.get("genfilters", ""));
return maps.readFilters(tags.get("genfilters", ""));
}
public String author(){

View File

@ -1,11 +1,13 @@
package io.anuke.mindustry.maps;
import io.anuke.arc.*;
import io.anuke.arc.assets.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.files.*;
import io.anuke.arc.function.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.util.*;
import io.anuke.arc.util.async.*;
import io.anuke.arc.util.serialization.*;
import io.anuke.mindustry.content.*;
import io.anuke.mindustry.game.*;
@ -16,9 +18,9 @@ import io.anuke.mindustry.world.blocks.storage.*;
import java.io.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class Maps implements Disposable{
public class Maps{
/** List of all built-in maps. Filenames only. */
private static String[] defaultMapNames = {"maze", "fortress", "labyrinth", "islands", "tendrils", "caldera", "wasteland", "shattered", "fork", "triad", "veins", "glacier"};
/** All maps stored in an ordered array. */
@ -26,6 +28,8 @@ public class Maps implements Disposable{
/** Serializer for meta. */
private Json json = new Json();
private AsyncExecutor executor = new AsyncExecutor(2);
/** Returns a list of all maps, including custom ones. */
public Array<Map> all(){
return maps;
@ -74,7 +78,13 @@ public class Maps implements Disposable{
}
public void reload(){
dispose();
for(Map map : maps){
if(map.texture != null){
map.texture.dispose();
map.texture = null;
}
}
maps.clear();
load();
}
@ -128,7 +138,10 @@ public class Maps implements Disposable{
}
}
map.texture = new Texture(MapIO.generatePreview(world.getTiles()));
Pixmap pix = MapIO.generatePreview(world.getTiles());
executor.submit(() -> map.previewFile().writePNG(pix));
map.texture = new Texture(pix);
}
maps.add(map);
maps.sort();
@ -284,6 +297,31 @@ public class Maps implements Disposable{
}
}
public void loadPreviews(){
for(Map map : maps){
try{
//try to load preview
if(map.previewFile().exists()){
try{
Core.assets.load(new AssetDescriptor<>(map.previewFile(), Texture.class)).loaded = t -> map.texture = (Texture)t;
//if it works, keep going
continue;
}catch(Exception e){
Log.err("Found cached preview, but failed to load it!");
e.printStackTrace();
}
}
//if it's here, then the preview failed to load or doesn't exist, make it
//this has to be done synchronously!
Pixmap pix = MapIO.generatePreview(map);
Core.app.post(() -> map.texture = new Texture(pix));
executor.submit(() -> map.previewFile().writePNG(pix));
}catch(IOException e){
e.printStackTrace();
}
}
}
/** Find a new filename to put a map to. */
private FileHandle findFile(){
//find a map name that isn't used.
@ -301,10 +339,6 @@ public class Maps implements Disposable{
throw new IOException("Map name cannot be empty! File: " + file);
}
if(!headless){
map.texture = new Texture(MapIO.generatePreview(map));
}
maps.add(map);
//maps.sort();
}
@ -321,15 +355,4 @@ public class Maps implements Disposable{
}
}
}
@Override
public void dispose(){
for(Map map : maps){
if(map.texture != null){
map.texture.dispose();
map.texture = null;
}
}
maps.clear();
}
}

View File

@ -13,7 +13,7 @@ import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.Block.*;
import io.anuke.mindustry.world.blocks.*;
import static io.anuke.mindustry.Vars.updateEditorOnChange;
import static io.anuke.mindustry.Min.updateEditorOnChange;
public abstract class FilterOption{
public static final Predicate<Block> floorsOnly = b -> (b instanceof Floor && !(b instanceof OverlayFloor)) && Core.atlas.isFound(b.icon(Icon.full));
@ -81,7 +81,7 @@ public abstract class FilterOption{
FloatingDialog dialog = new FloatingDialog("");
dialog.setFillParent(false);
int i = 0;
for(Block block : Vars.content.blocks()){
for(Block block : Min.content.blocks()){
if(!filter.test(block)) continue;
dialog.cont.addImage(block == Blocks.air ? Core.atlas.find("icon-none-small") : block.icon(Icon.medium)).size(8 * 4).pad(3).get().clicked(() -> {

View File

@ -5,7 +5,7 @@ import io.anuke.arc.math.*;
import io.anuke.mindustry.maps.filters.FilterOption.*;
import io.anuke.mindustry.world.*;
import static io.anuke.mindustry.Vars.content;
import static io.anuke.mindustry.Min.content;
public class MedianFilter extends GenerateFilter{
float radius = 2;

View File

@ -52,6 +52,6 @@ public class OreMedianFilter extends GenerateFilter{
int index = Math.min((int)(blocks.size * percentile), blocks.size - 1);
int overlay = blocks.get(index);
in.ore = Vars.content.block(overlay);
in.ore = Min.content.block(overlay);
}
}

View File

@ -12,7 +12,7 @@ import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.blocks.*;
import io.anuke.mindustry.world.blocks.storage.*;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Min.*;
public class MapGenerator extends Generator{
private Map map;
@ -51,7 +51,7 @@ public class MapGenerator extends Generator{
@Override
public void init(Loadout loadout){
this.loadout = loadout;
map = world.maps.loadInternalMap(mapName);
map = maps.loadInternalMap(mapName);
width = map.width;
height = map.height;
}

View File

@ -6,7 +6,7 @@ import io.anuke.mindustry.maps.Map;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.world;
import static io.anuke.mindustry.Min.world;
public abstract class RandomGenerator extends Generator{
protected Block floor;

Some files were not shown because too many files have changed in this diff Show More