diff --git a/annotations/src/io/anuke/annotations/Annotations.java b/annotations/src/io/anuke/annotations/Annotations.java
index ec7931abd2..5b08e70d37 100644
--- a/annotations/src/io/anuke/annotations/Annotations.java
+++ b/annotations/src/io/anuke/annotations/Annotations.java
@@ -6,7 +6,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * Goal: To create a system to send events to the server from the client and vice versa.
+ * Goal: To create a system to send events to the server from the client and vice versa, without creating a new packet type each time.
* These events may optionally also trigger on the caller client/server as well.
*
* Three annotations are used for this purpose.
@@ -22,7 +22,12 @@ public class Annotations {
/**Marks a method as invokable remotely from a server on a client.*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
- public @interface RemoteClient {}
+ public @interface RemoteClient {
+ /**Whether a client-specific method is generated that accepts a connecton ID and sends to only one player. Default is false.*/
+ boolean one() default false;
+ /**Whether a 'global' method is generated that sends the event to all players. Default is true.*/
+ boolean all() default true;
+ }
/**Marks a method as invokable remotely from a client on a server.
* All RemoteServer methods must have their first formal parameter be of type Player.
@@ -42,4 +47,30 @@ public class Annotations {
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface Unreliable{}
+
+ /**Specifies that this method will be placed in the class specified by its value.
+ * Only use constants for this value!*/ //TODO enforce this
+ @Target(ElementType.METHOD)
+ @Retention(RetentionPolicy.CLASS)
+ public @interface In{
+ String value();
+ }
+
+ /**Specifies that this method will be used to write classes of the type returned by {@link #value()}.
+ * This method must return void and have two parameters, the first being of type {@link java.nio.ByteBuffer} and the second
+ * being the type returned by {@link #value()}.*/
+ @Target(ElementType.METHOD)
+ @Retention(RetentionPolicy.CLASS)
+ public @interface WriteClass {
+ Class> value();
+ }
+
+ /**Specifies that this method will be used to read classes of the type returned by {@link #value()}.
+ * This method must return the type returned by {@link #value()},
+ * and have one parameter, being of type {@link java.nio.ByteBuffer}.*/
+ @Target(ElementType.METHOD)
+ @Retention(RetentionPolicy.CLASS)
+ public @interface ReadClass {
+ Class> value();
+ }
}
diff --git a/annotations/src/io/anuke/annotations/ClassEntry.java b/annotations/src/io/anuke/annotations/ClassEntry.java
new file mode 100644
index 0000000000..3997eb6029
--- /dev/null
+++ b/annotations/src/io/anuke/annotations/ClassEntry.java
@@ -0,0 +1,15 @@
+package io.anuke.annotations;
+
+import java.util.ArrayList;
+
+/**Represents a class witha list method entries to include in it.*/
+public class ClassEntry {
+ /**All methods in this generated class.*/
+ public final ArrayList methods = new ArrayList<>();
+ /**Simple class name.*/
+ public final String name;
+
+ public ClassEntry(String name) {
+ this.name = name;
+ }
+}
diff --git a/annotations/src/io/anuke/annotations/IOFinder.java b/annotations/src/io/anuke/annotations/IOFinder.java
new file mode 100644
index 0000000000..f536dd9a3e
--- /dev/null
+++ b/annotations/src/io/anuke/annotations/IOFinder.java
@@ -0,0 +1,72 @@
+package io.anuke.annotations;
+
+import io.anuke.annotations.Annotations.ReadClass;
+import io.anuke.annotations.Annotations.WriteClass;
+
+import javax.annotation.processing.RoundEnvironment;
+import javax.lang.model.element.Element;
+import javax.tools.Diagnostic.Kind;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.stream.Stream;
+
+/**This class finds reader and writer methods annotated by the {@link io.anuke.annotations.Annotations.WriteClass}
+ * and {@link io.anuke.annotations.Annotations.ReadClass} annotations.*/
+public class IOFinder {
+
+ /**Finds all class serializers for all types and returns them. Logs errors when necessary.
+ * Maps full class names to their serializers.*/
+ public HashMap findSerializers(RoundEnvironment env){
+ HashMap result = new HashMap<>();
+
+ //get methods with the types
+ Set extends Element> writers = env.getElementsAnnotatedWith(WriteClass.class);
+ Set extends Element> readers = env.getElementsAnnotatedWith(ReadClass.class);
+
+ //look for writers first
+ for(Element writer : writers){
+ WriteClass writean = writer.getAnnotation(WriteClass.class);
+ Class> type = writean.value();
+
+ //make sure there's only one read method
+ if(readers.stream().filter(elem -> elem.getAnnotation(ReadClass.class).value() == type).count() > 1){
+ Utils.messager.printMessage(Kind.ERROR, "Multiple writer methods for type: ", writer);
+ }
+
+ //make sure there's only one write method
+ Stream extends Element> stream = readers.stream().filter(elem -> elem.getAnnotation(ReadClass.class).value() == type);
+ if(stream.count() == 0){
+ Utils.messager.printMessage(Kind.ERROR, "Writer method does not have an accompanying reader: ", writer);
+ }else if(stream.count() > 1){
+ Utils.messager.printMessage(Kind.ERROR, "Writer method has multiple reader for type: ", writer);
+ }
+
+ Element reader = stream.findFirst().get();
+
+ //add to result list
+ result.put(type.getName(), new ClassSerializer(getFullMethod(reader), getFullMethod(writer), type.getName()));
+ }
+
+ return result;
+ }
+
+ private String getFullMethod(Element element){
+ return element.getEnclosingElement().asType().toString() + "." + element.getSimpleName();
+ }
+
+ /**Information about read/write methods for a specific class type.*/
+ public static class ClassSerializer{
+ /**Fully qualified method name of the reader.*/
+ public final String readMethod;
+ /**Fully qualified method name of the writer.*/
+ public final String writeMethod;
+ /**Fully qualified class type name.*/
+ public final String classType;
+
+ public ClassSerializer(String readMethod, String writeMethod, String classType) {
+ this.readMethod = readMethod;
+ this.writeMethod = writeMethod;
+ this.classType = classType;
+ }
+ }
+}
diff --git a/annotations/src/io/anuke/annotations/MethodEntry.java b/annotations/src/io/anuke/annotations/MethodEntry.java
new file mode 100644
index 0000000000..3036afde33
--- /dev/null
+++ b/annotations/src/io/anuke/annotations/MethodEntry.java
@@ -0,0 +1,23 @@
+package io.anuke.annotations;
+
+/**Class that repesents a remote method to be constructed and put into a class.*/
+public class MethodEntry {
+ /**Simple target class name.*/
+ public final String className;
+ /**Fully qualified target method to call.*/
+ public final String targetMethod;
+ /**Whether this method can be called on a client/server.*/
+ public final boolean client, server;
+ /**Whether an additional 'one' and 'all' method variant is generated. At least one of these must be true.
+ * Only applicable to client (server-invoked) methods.*/
+ public final boolean allVariant, oneVariant;
+
+ public MethodEntry(String className, String targetMethod, boolean client, boolean server, boolean allVariant, boolean oneVariant) {
+ this.className = className;
+ this.targetMethod = targetMethod;
+ this.client = client;
+ this.server = server;
+ this.allVariant = allVariant;
+ this.oneVariant = oneVariant;
+ }
+}
diff --git a/annotations/src/io/anuke/annotations/AnnotationProcessor.java b/annotations/src/io/anuke/annotations/RemoteMethodAnnotationProcessor.java
similarity index 83%
rename from annotations/src/io/anuke/annotations/AnnotationProcessor.java
rename to annotations/src/io/anuke/annotations/RemoteMethodAnnotationProcessor.java
index 8bba91ca12..ff8ca50e0d 100644
--- a/annotations/src/io/anuke/annotations/AnnotationProcessor.java
+++ b/annotations/src/io/anuke/annotations/RemoteMethodAnnotationProcessor.java
@@ -5,6 +5,7 @@ import io.anuke.annotations.Annotations.Local;
import io.anuke.annotations.Annotations.RemoteClient;
import io.anuke.annotations.Annotations.RemoteServer;
import io.anuke.annotations.Annotations.Unreliable;
+import io.anuke.annotations.IOFinder.ClassSerializer;
import javax.annotation.processing.*;
import javax.lang.model.SourceVersion;
@@ -34,60 +35,30 @@ import java.util.Set;
"io.anuke.annotations.Annotations.RemoteClient",
"io.anuke.annotations.Annotations.RemoteServer",
"io.anuke.annotations.Annotations.Local",
- "io.anuke.annotations.Annotations.Unreliable"
+ "io.anuke.annotations.Annotations.Unreliable",
+ "io.anuke.annotations.Annotations.In",
+ "io.anuke.annotations.Annotations.WriteClass",
+ "io.anuke.annotations.Annotations.ReadClass",
})
-public class AnnotationProcessor extends AbstractProcessor {
- private static final int maxPacketSize = 128;
+public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
+ /**Maximum size of each event packet.*/
+ private static final int maxPacketSize = 512;
+ /**Name of the base package to put all the generated classes.*/
+ private static final String packageClassName = "io.anuke.mindustry.gen";
- private static final String clientFullClassName = "io.anuke.mindustry.gen.CallClient";
- private static final String serverFullClassName = "io.anuke.mindustry.gen.CallServer";
-
- private static final HashMap writeMap = new HashMap(){{
- put("Player", new String[][]{
- {
- "rbuffer.putInt(rvalue.id)"
- },
- {
- "rtype rvalue = io.anuke.mindustry.Vars.playerGroup.getByID(rbuffer.getInt())"
- }
- });
-
- put("Tile", new String[][]{
- {
- "rbuffer.putInt(rvalue.packedPosition())"
- },
- {
- "rtype rvalue = io.anuke.mindustry.Vars.world.tile(rbuffer.getInt())"
- }
- });
-
- put("String", new String[][]{
- {
- "rbuffer.putShort((short)rvalue.getBytes().length)",
- "rbuffer.put(rvalue.getBytes())"
- },
- {
- "short __rvalue_length = rbuffer.getShort()",
- "byte[] __rvalue_bytes = new byte[__rvalue_length]",
- "rbuffer.get(__rvalue_bytes)",
- "rtype rvalue = new rtype(__rvalue_bytes)"
- }
- });
- }};
-
- private Types typeUtils;
- private Elements elementUtils;
- private Filer filer;
- private Messager messager;
+ /**Maps fully qualified class names to serializers.*/
+ private HashMap serializers;
+ /**Whether the initial round is done.*/
private boolean done;
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
- typeUtils = processingEnv.getTypeUtils();
- elementUtils = processingEnv.getElementUtils();
- filer = processingEnv.getFiler();
- messager = processingEnv.getMessager();
+ //put all relevant utils into utils class
+ Utils.typeUtils = processingEnv.getTypeUtils();
+ Utils.elementUtils = processingEnv.getElementUtils();
+ Utils.filer = processingEnv.getFiler();
+ Utils.messager = processingEnv.getMessager();
}
@Override
@@ -95,13 +66,15 @@ public class AnnotationProcessor extends AbstractProcessor {
if(done) return false;
done = true;
+ serializers = new IOFinder().findSerializers(roundEnv);
+
writeElements(roundEnv, clientFullClassName, RemoteClient.class);
writeElements(roundEnv, serverFullClassName, RemoteServer.class);
return true;
}
- private void writeElements(RoundEnvironment env, String fullClassName, Class extends Annotation> annotation){
+ private void writeElements(RoundEnvironment env){
try {
boolean client = annotation == RemoteServer.class;
String className = fullClassName.substring(1 + fullClassName.lastIndexOf('.'));
@@ -279,15 +252,14 @@ public class AnnotationProcessor extends AbstractProcessor {
TypeSpec spec = classBuilder.build();
JavaFile.builder(packageName, spec).build().writeTo(filer);
+
+
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
}
- private boolean isPrimitive(String type){
- return type.equals("boolean") || type.equals("byte") || type.equals("short") || type.equals("int")
- || type.equals("long") || type.equals("float") || type.equals("double") || type.equals("char");
- }
+
}
diff --git a/annotations/src/io/anuke/annotations/Serializers.java b/annotations/src/io/anuke/annotations/Serializers.java
deleted file mode 100644
index 75c232f816..0000000000
--- a/annotations/src/io/anuke/annotations/Serializers.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package io.anuke.annotations;
-
-public class Serializers {
-}
diff --git a/annotations/src/io/anuke/annotations/Utils.java b/annotations/src/io/anuke/annotations/Utils.java
new file mode 100644
index 0000000000..63d21b539e
--- /dev/null
+++ b/annotations/src/io/anuke/annotations/Utils.java
@@ -0,0 +1,18 @@
+package io.anuke.annotations;
+
+import javax.annotation.processing.Filer;
+import javax.annotation.processing.Messager;
+import javax.lang.model.util.Elements;
+import javax.lang.model.util.Types;
+
+public class Utils {
+ public static Types typeUtils;
+ public static Elements elementUtils;
+ public static Filer filer;
+ public static Messager messager;
+
+ public static boolean isPrimitive(String type){
+ return type.equals("boolean") || type.equals("byte") || type.equals("short") || type.equals("int")
+ || type.equals("long") || type.equals("float") || type.equals("double") || type.equals("char");
+ }
+}
diff --git a/build.gradle b/build.gradle
index 625297b66c..62edd576a5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -149,7 +149,7 @@ project(":core") {
apply plugin: "java"
dependencies {
- //compileOnly project(":annotations")
+ compileOnly project(":annotations")
boolean comp = System.properties["release"] == null || System.properties["release"] == "false"
@@ -174,9 +174,9 @@ project(":core") {
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
}
- //compileJava.options.compilerArgs = [
- // "-processor", "io.anuke.annotations.AnnotationProcessor"
- //]
+ compileJava.options.compilerArgs = [
+ "-processor", "io.anuke.annotations.RemoteMethodAnnotationProcessor"
+ ]
}
project(":server") {
diff --git a/core/assets-raw/sprites/blocks/distribution/weaponfactory.png b/core/assets-raw/sprites/blocks/distribution/weaponfactory.png
deleted file mode 100644
index d8d3812bde..0000000000
Binary files a/core/assets-raw/sprites/blocks/distribution/weaponfactory.png and /dev/null differ
diff --git a/core/assets-raw/sprites/blocks/production/weaponfactory.png b/core/assets-raw/sprites/blocks/production/weaponfactory.png
new file mode 100644
index 0000000000..d3159244c5
Binary files /dev/null and b/core/assets-raw/sprites/blocks/production/weaponfactory.png differ
diff --git a/core/assets-raw/sprites/blocks/distribution/core-open.png b/core/assets-raw/sprites/blocks/storage/core-open.png
similarity index 100%
rename from core/assets-raw/sprites/blocks/distribution/core-open.png
rename to core/assets-raw/sprites/blocks/storage/core-open.png
diff --git a/core/assets-raw/sprites/blocks/distribution/core-top.png b/core/assets-raw/sprites/blocks/storage/core-top.png
similarity index 100%
rename from core/assets-raw/sprites/blocks/distribution/core-top.png
rename to core/assets-raw/sprites/blocks/storage/core-top.png
diff --git a/core/assets-raw/sprites/blocks/distribution/core.png b/core/assets-raw/sprites/blocks/storage/core.png
similarity index 100%
rename from core/assets-raw/sprites/blocks/distribution/core.png
rename to core/assets-raw/sprites/blocks/storage/core.png
diff --git a/core/assets-raw/sprites/blocks/distribution/sortedunloader.png b/core/assets-raw/sprites/blocks/storage/sortedunloader.png
similarity index 100%
rename from core/assets-raw/sprites/blocks/distribution/sortedunloader.png
rename to core/assets-raw/sprites/blocks/storage/sortedunloader.png
diff --git a/core/assets-raw/sprites/blocks/distribution/unloader.png b/core/assets-raw/sprites/blocks/storage/unloader.png
similarity index 100%
rename from core/assets-raw/sprites/blocks/distribution/unloader.png
rename to core/assets-raw/sprites/blocks/storage/unloader.png
diff --git a/core/assets-raw/sprites/blocks/distribution/vault.png b/core/assets-raw/sprites/blocks/storage/vault.png
similarity index 100%
rename from core/assets-raw/sprites/blocks/distribution/vault.png
rename to core/assets-raw/sprites/blocks/storage/vault.png
diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas
index 3e3cd01da3..a977f04e4f 100644
--- a/core/assets/sprites/sprites.atlas
+++ b/core/assets/sprites/sprites.atlas
@@ -109,27 +109,6 @@ conveyortunnel
orig: 8, 8
offset: 0, 0
index: -1
-core
- rotate: false
- xy: 627, 301
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-core-open
- rotate: false
- xy: 653, 305
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-core-top
- rotate: false
- xy: 586, 284
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
junction
rotate: false
xy: 221, 24
@@ -298,13 +277,6 @@ router
orig: 8, 8
offset: 0, 0
index: -1
-sortedunloader
- rotate: false
- xy: 435, 95
- size: 8, 8
- orig: 8, 8
- offset: 0, 0
- index: -1
sorter
rotate: false
xy: 445, 96
@@ -340,27 +312,6 @@ teleporter-top
orig: 24, 24
offset: 0, 0
index: -1
-unloader
- rotate: false
- xy: 911, 377
- size: 8, 8
- orig: 8, 8
- offset: 0, 0
- index: -1
-vault
- rotate: false
- xy: 587, 232
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-weaponfactory
- rotate: false
- xy: 165, 82
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
blackrock1
rotate: false
xy: 183, 100
@@ -1866,6 +1817,55 @@ waterextractor-top
orig: 16, 16
offset: 0, 0
index: -1
+weaponfactory
+ rotate: false
+ xy: 165, 82
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+core
+ rotate: false
+ xy: 627, 301
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+core-open
+ rotate: false
+ xy: 653, 305
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+core-top
+ rotate: false
+ xy: 586, 284
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+sortedunloader
+ rotate: false
+ xy: 435, 95
+ size: 8, 8
+ orig: 8, 8
+ offset: 0, 0
+ index: -1
+unloader
+ rotate: false
+ xy: 911, 377
+ size: 8, 8
+ orig: 8, 8
+ offset: 0, 0
+ index: -1
+vault
+ rotate: false
+ xy: 587, 232
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
block-1
rotate: false
xy: 189, 54
diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png
index c335cada75..76a23031cd 100644
Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ
diff --git a/core/src/Mindustry.gwt.xml b/core/src/Mindustry.gwt.xml
index b16e9a709d..2f73583bb5 100644
--- a/core/src/Mindustry.gwt.xml
+++ b/core/src/Mindustry.gwt.xml
@@ -18,6 +18,6 @@
-
+
\ No newline at end of file
diff --git a/core/src/io/anuke/mindustry/ai/BlockIndexer.java b/core/src/io/anuke/mindustry/ai/BlockIndexer.java
index af68f54daa..aaa1fe5361 100644
--- a/core/src/io/anuke/mindustry/ai/BlockIndexer.java
+++ b/core/src/io/anuke/mindustry/ai/BlockIndexer.java
@@ -8,7 +8,7 @@ import io.anuke.mindustry.game.EventType.TileChangeEvent;
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.type.Item;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.util.EnumSet;
diff --git a/core/src/io/anuke/mindustry/ai/Pathfinder.java b/core/src/io/anuke/mindustry/ai/Pathfinder.java
index 337ee3b832..76945f56c7 100644
--- a/core/src/io/anuke/mindustry/ai/Pathfinder.java
+++ b/core/src/io/anuke/mindustry/ai/Pathfinder.java
@@ -10,7 +10,7 @@ import io.anuke.mindustry.game.EventType.TileChangeEvent;
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.game.TeamInfo.TeamData;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.core.Timers;
diff --git a/core/src/io/anuke/mindustry/content/blocks/Blocks.java b/core/src/io/anuke/mindustry/content/blocks/Blocks.java
index 9f584a43c6..4fe3d4ce52 100644
--- a/core/src/io/anuke/mindustry/content/blocks/Blocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/Blocks.java
@@ -9,7 +9,7 @@ import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.*;
+import io.anuke.mindustry.world.blocks.*;
public class Blocks extends BlockList implements ContentList{
public static Block air, spawn, blockpart, build1, build2, build3, build4, build5, build6, defaultFloor, space, metalfloor, deepwater, water, lava, oil, stone, blackstone, iron, lead, coal, titanium, thorium, dirt, sand, ice, snow, grass, sandblock, snowblock, stoneblock, blackstoneblock, grassblock, mossblock, shrub, rock, icerock, blackrock, dirtblock;
diff --git a/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java b/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java
index a5af6c2f52..c049951d34 100644
--- a/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java
@@ -8,7 +8,7 @@ import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.production.*;
+import io.anuke.mindustry.world.blocks.production.*;
public class CraftingBlocks extends BlockList implements ContentList {
public static Block smelter, alloysmelter, siliconsmelter, poweralloysmelter, powersmelter, cryofluidmixer, melter, separator, centrifuge, plasticFormer, biomatterCompressor, pulverizer, oilRefinery, stoneFormer, weaponFactory, incinerator;
diff --git a/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java b/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java
index f1b6bfd02c..0bb9ca9f56 100644
--- a/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java
@@ -8,9 +8,9 @@ import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.PowerBlock;
-import io.anuke.mindustry.world.blocks.types.distribution.Sorter;
-import io.anuke.mindustry.world.blocks.types.power.PowerDistributor;
+import io.anuke.mindustry.world.blocks.PowerBlock;
+import io.anuke.mindustry.world.blocks.distribution.Sorter;
+import io.anuke.mindustry.world.blocks.power.PowerDistributor;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.scene.ui.ButtonGroup;
import io.anuke.ucore.scene.ui.ImageButton;
@@ -64,11 +64,7 @@ public class DebugBlocks extends BlockList implements ContentList{
solid = true;
hasLiquids = true;
liquidCapacity = 100f;
- }
-
- @Override
- public boolean isConfigurable(Tile tile) {
- return true;
+ configurable = true;
}
@Override
diff --git a/core/src/io/anuke/mindustry/content/blocks/DefenseBlocks.java b/core/src/io/anuke/mindustry/content/blocks/DefenseBlocks.java
index 1edb9021fd..c572802521 100644
--- a/core/src/io/anuke/mindustry/content/blocks/DefenseBlocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/DefenseBlocks.java
@@ -3,9 +3,9 @@ package io.anuke.mindustry.content.blocks;
import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.Wall;
-import io.anuke.mindustry.world.blocks.types.defense.Door;
-import io.anuke.mindustry.world.blocks.types.defense.ShieldedWallBlock;
+import io.anuke.mindustry.world.blocks.Wall;
+import io.anuke.mindustry.world.blocks.defense.Door;
+import io.anuke.mindustry.world.blocks.defense.ShieldedWallBlock;
public class DefenseBlocks extends BlockList implements ContentList {
public static Block stonewall, ironwall, steelwall, titaniumwall, diriumwall, compositewall, steelwalllarge, titaniumwalllarge, diriumwalllarge, titaniumshieldwall, door, largedoor;
diff --git a/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java b/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java
index 20910ed60a..5ca43c60c4 100644
--- a/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java
@@ -2,7 +2,7 @@ package io.anuke.mindustry.content.blocks;
import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.distribution.*;
+import io.anuke.mindustry.world.blocks.distribution.*;
public class DistributionBlocks extends BlockList implements ContentList{
public static Block conveyor, steelconveyor, pulseconveyor, router, multiplexer, junction, bridgeconveyor, laserconveyor, sorter, splitter, overflowgate;
diff --git a/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java b/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java
index ac616eb4bb..9789aba668 100644
--- a/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java
@@ -2,8 +2,8 @@ package io.anuke.mindustry.content.blocks;
import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.distribution.*;
-import io.anuke.mindustry.world.blocks.types.production.Pump;
+import io.anuke.mindustry.world.blocks.distribution.*;
+import io.anuke.mindustry.world.blocks.production.Pump;
public class LiquidBlocks extends BlockList implements ContentList{
public static Block pump, fluxpump, conduit, pulseconduit, liquidrouter, liquidtank, liquidjunction, bridgeconduit, laserconduit;
diff --git a/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java b/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java
index 843a37d635..6f2cddec31 100644
--- a/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java
@@ -3,10 +3,10 @@ package io.anuke.mindustry.content.blocks;
import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.defense.RepairTurret;
-import io.anuke.mindustry.world.blocks.types.defense.ShieldBlock;
-import io.anuke.mindustry.world.blocks.types.distribution.Teleporter;
-import io.anuke.mindustry.world.blocks.types.power.*;
+import io.anuke.mindustry.world.blocks.defense.RepairTurret;
+import io.anuke.mindustry.world.blocks.defense.ShieldBlock;
+import io.anuke.mindustry.world.blocks.distribution.Teleporter;
+import io.anuke.mindustry.world.blocks.power.*;
public class PowerBlocks extends BlockList implements ContentList {
public static Block combustiongenerator, thermalgenerator, liquidcombustiongenerator, rtgenerator, solarpanel, largesolarpanel, nuclearReactor, fusionReactor, repairturret, megarepairturret, shieldgenerator, battery, batteryLarge, powernode, powernodelarge, teleporter;
diff --git a/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java
index 62108599ba..2e3d08d1b2 100644
--- a/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/ProductionBlocks.java
@@ -6,10 +6,10 @@ import io.anuke.mindustry.content.Liquids;
import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.production.Cultivator;
-import io.anuke.mindustry.world.blocks.types.production.Drill;
-import io.anuke.mindustry.world.blocks.types.production.Fracker;
-import io.anuke.mindustry.world.blocks.types.production.SolidPump;
+import io.anuke.mindustry.world.blocks.production.Cultivator;
+import io.anuke.mindustry.world.blocks.production.Drill;
+import io.anuke.mindustry.world.blocks.production.Fracker;
+import io.anuke.mindustry.world.blocks.production.SolidPump;
public class ProductionBlocks extends BlockList implements ContentList {
public static Block ironDrill, reinforcedDrill, steelDrill, titaniumDrill, laserdrill, nucleardrill, plasmadrill, waterextractor, oilextractor, cultivator;
diff --git a/core/src/io/anuke/mindustry/content/blocks/StorageBlocks.java b/core/src/io/anuke/mindustry/content/blocks/StorageBlocks.java
index abc9582a78..4e5a2953c9 100644
--- a/core/src/io/anuke/mindustry/content/blocks/StorageBlocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/StorageBlocks.java
@@ -2,10 +2,10 @@ package io.anuke.mindustry.content.blocks;
import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.storage.CoreBlock;
-import io.anuke.mindustry.world.blocks.types.storage.SortedUnloader;
-import io.anuke.mindustry.world.blocks.types.storage.Unloader;
-import io.anuke.mindustry.world.blocks.types.storage.Vault;
+import io.anuke.mindustry.world.blocks.storage.CoreBlock;
+import io.anuke.mindustry.world.blocks.storage.SortedUnloader;
+import io.anuke.mindustry.world.blocks.storage.Unloader;
+import io.anuke.mindustry.world.blocks.storage.Vault;
public class StorageBlocks extends BlockList implements ContentList {
public static Block core, vault, unloader, sortedunloader;
diff --git a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java
index 6ec0595bc2..940559185f 100644
--- a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java
@@ -5,10 +5,10 @@ import io.anuke.mindustry.content.UnitTypes;
import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.units.DropPoint;
-import io.anuke.mindustry.world.blocks.types.units.RepairPoint;
-import io.anuke.mindustry.world.blocks.types.units.ResupplyPoint;
-import io.anuke.mindustry.world.blocks.types.units.UnitFactory;
+import io.anuke.mindustry.world.blocks.units.DropPoint;
+import io.anuke.mindustry.world.blocks.units.RepairPoint;
+import io.anuke.mindustry.world.blocks.units.ResupplyPoint;
+import io.anuke.mindustry.world.blocks.units.UnitFactory;
public class UnitBlocks extends BlockList implements ContentList {
public static Block resupplyPoint, repairPoint, droneFactory, dropPoint;
diff --git a/core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java b/core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java
index c1049e119f..bc9eed1dd9 100644
--- a/core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java
+++ b/core/src/io/anuke/mindustry/content/blocks/WeaponBlocks.java
@@ -6,7 +6,7 @@ import io.anuke.mindustry.content.fx.ShootFx;
import io.anuke.mindustry.type.AmmoType;
import io.anuke.mindustry.type.ContentList;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.defense.turrets.*;
+import io.anuke.mindustry.world.blocks.defense.turrets.*;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Angles;
import io.anuke.ucore.util.Mathf;
diff --git a/core/src/io/anuke/mindustry/core/Logic.java b/core/src/io/anuke/mindustry/core/Logic.java
index 295bfe8b34..23227858f7 100644
--- a/core/src/io/anuke/mindustry/core/Logic.java
+++ b/core/src/io/anuke/mindustry/core/Logic.java
@@ -81,8 +81,8 @@ public class Logic extends Module {
public void runWave(){
- //TODO spawn enemies
- for(int i = 0; i < 100; i ++){
+ //TODO spawn enemies properly
+ for(int i = 0; i < 10; i ++){
BaseUnit unit = UnitTypes.vtol.create(Team.red);
Vector2 offset = new Vector2().setToRandomDirection().scl(world.width()/2f*tilesize).add(world.width()/2f*tilesize, world.height()/2f*tilesize);
unit.inventory.addAmmo(AmmoTypes.bulletIron);
diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java
index 0de2681d55..d1c1e0d016 100644
--- a/core/src/io/anuke/mindustry/core/Renderer.java
+++ b/core/src/io/anuke/mindustry/core/Renderer.java
@@ -20,7 +20,7 @@ import io.anuke.mindustry.entities.traits.BelowLiquidTrait;
import io.anuke.mindustry.entities.units.BaseUnit;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Effects;
diff --git a/core/src/io/anuke/mindustry/editor/EditorTool.java b/core/src/io/anuke/mindustry/editor/EditorTool.java
index 643dbac039..41b14efdaa 100644
--- a/core/src/io/anuke/mindustry/editor/EditorTool.java
+++ b/core/src/io/anuke/mindustry/editor/EditorTool.java
@@ -5,7 +5,7 @@ import com.badlogic.gdx.utils.IntSet;
import io.anuke.mindustry.io.MapTileData.DataPosition;
import io.anuke.mindustry.io.MapTileData.TileDataMarker;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.Floor;
+import io.anuke.mindustry.world.blocks.Floor;
import io.anuke.ucore.util.Bits;
import static io.anuke.mindustry.Vars.ui;
diff --git a/core/src/io/anuke/mindustry/editor/MapEditor.java b/core/src/io/anuke/mindustry/editor/MapEditor.java
index 52e2f1b2db..8bfce352a9 100644
--- a/core/src/io/anuke/mindustry/editor/MapEditor.java
+++ b/core/src/io/anuke/mindustry/editor/MapEditor.java
@@ -9,7 +9,7 @@ import io.anuke.mindustry.io.MapTileData;
import io.anuke.mindustry.io.MapTileData.DataPosition;
import io.anuke.mindustry.io.MapTileData.TileDataMarker;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.Floor;
+import io.anuke.mindustry.world.blocks.Floor;
import io.anuke.ucore.util.Bits;
import io.anuke.ucore.util.Mathf;
diff --git a/core/src/io/anuke/mindustry/editor/MapFilter.java b/core/src/io/anuke/mindustry/editor/MapFilter.java
index 575cc7f173..ecb42559c4 100644
--- a/core/src/io/anuke/mindustry/editor/MapFilter.java
+++ b/core/src/io/anuke/mindustry/editor/MapFilter.java
@@ -9,7 +9,7 @@ import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.ColorMapper;
import io.anuke.mindustry.world.ColorMapper.BlockPair;
import io.anuke.mindustry.content.blocks.Blocks;
-import io.anuke.mindustry.world.blocks.types.Floor;
+import io.anuke.mindustry.world.blocks.Floor;
import io.anuke.ucore.graphics.Pixmaps;
import io.anuke.ucore.noise.RidgedPerlin;
import io.anuke.ucore.noise.Simplex;
diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java
index ef76c2ae4e..985bce5d4c 100644
--- a/core/src/io/anuke/mindustry/entities/Player.java
+++ b/core/src/io/anuke/mindustry/entities/Player.java
@@ -20,8 +20,8 @@ import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.graphics.Trail;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.Floor;
-import io.anuke.mindustry.world.blocks.types.storage.CoreBlock.CoreEntity;
+import io.anuke.mindustry.world.blocks.Floor;
+import io.anuke.mindustry.world.blocks.storage.CoreBlock.CoreEntity;
import io.anuke.ucore.core.*;
import io.anuke.ucore.entities.EntityGroup;
import io.anuke.ucore.entities.trait.SolidTrait;
diff --git a/core/src/io/anuke/mindustry/entities/TileEntity.java b/core/src/io/anuke/mindustry/entities/TileEntity.java
index 287b049c6e..4a59c10b24 100644
--- a/core/src/io/anuke/mindustry/entities/TileEntity.java
+++ b/core/src/io/anuke/mindustry/entities/TileEntity.java
@@ -7,10 +7,10 @@ import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.Wall;
-import io.anuke.mindustry.world.blocks.types.modules.InventoryModule;
-import io.anuke.mindustry.world.blocks.types.modules.LiquidModule;
-import io.anuke.mindustry.world.blocks.types.modules.PowerModule;
+import io.anuke.mindustry.world.blocks.Wall;
+import io.anuke.mindustry.world.blocks.modules.InventoryModule;
+import io.anuke.mindustry.world.blocks.modules.LiquidModule;
+import io.anuke.mindustry.world.blocks.modules.PowerModule;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.entities.EntityGroup;
diff --git a/core/src/io/anuke/mindustry/entities/Unit.java b/core/src/io/anuke/mindustry/entities/Unit.java
index 6050189ec4..da21294d24 100644
--- a/core/src/io/anuke/mindustry/entities/Unit.java
+++ b/core/src/io/anuke/mindustry/entities/Unit.java
@@ -9,7 +9,7 @@ import io.anuke.mindustry.net.Interpolator;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.StatusEffect;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.Floor;
+import io.anuke.mindustry.world.blocks.Floor;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.entities.impl.DestructibleEntity;
diff --git a/core/src/io/anuke/mindustry/entities/effect/Shield.java b/core/src/io/anuke/mindustry/entities/effect/Shield.java
index 11f183fce1..31f7175048 100644
--- a/core/src/io/anuke/mindustry/entities/effect/Shield.java
+++ b/core/src/io/anuke/mindustry/entities/effect/Shield.java
@@ -2,7 +2,7 @@ package io.anuke.mindustry.entities.effect;
import com.badlogic.gdx.math.Interpolation;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.defense.ShieldBlock;
+import io.anuke.mindustry.world.blocks.defense.ShieldBlock;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.entities.EntityGroup;
import io.anuke.ucore.entities.impl.BaseEntity;
diff --git a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java
index 25dd103e6d..96a885ce87 100644
--- a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java
+++ b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java
@@ -14,8 +14,8 @@ import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.world.Build;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.BuildBlock;
-import io.anuke.mindustry.world.blocks.types.BuildBlock.BuildEntity;
+import io.anuke.mindustry.world.blocks.BuildBlock;
+import io.anuke.mindustry.world.blocks.BuildBlock.BuildEntity;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.core.Timers;
diff --git a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java
index 9f9c58eb94..5084ea6cc4 100644
--- a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java
+++ b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java
@@ -10,7 +10,7 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.type.AmmoType;
import io.anuke.mindustry.type.Item;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
diff --git a/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java b/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java
index 78ad87562b..58f00041f0 100644
--- a/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java
+++ b/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java
@@ -7,7 +7,7 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.graphics.Trail;
import io.anuke.mindustry.type.AmmoType;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
diff --git a/core/src/io/anuke/mindustry/entities/units/GroundUnit.java b/core/src/io/anuke/mindustry/entities/units/GroundUnit.java
index 325e5a97be..a42227e547 100644
--- a/core/src/io/anuke/mindustry/entities/units/GroundUnit.java
+++ b/core/src/io/anuke/mindustry/entities/units/GroundUnit.java
@@ -5,9 +5,9 @@ import io.anuke.mindustry.Vars;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.type.AmmoType;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.Floor;
+import io.anuke.mindustry.world.blocks.Floor;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.*;
diff --git a/core/src/io/anuke/mindustry/entities/units/types/Drone.java b/core/src/io/anuke/mindustry/entities/units/types/Drone.java
index 5347a52e07..f3d91a6c1d 100644
--- a/core/src/io/anuke/mindustry/entities/units/types/Drone.java
+++ b/core/src/io/anuke/mindustry/entities/units/types/Drone.java
@@ -13,10 +13,10 @@ import io.anuke.mindustry.entities.units.UnitType;
import io.anuke.mindustry.game.EventType.BlockBuildEvent;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.graphics.Palette;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.BuildBlock;
-import io.anuke.mindustry.world.blocks.types.BuildBlock.BuildEntity;
+import io.anuke.mindustry.world.blocks.BuildBlock;
+import io.anuke.mindustry.world.blocks.BuildBlock.BuildEntity;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.entities.EntityGroup;
diff --git a/core/src/io/anuke/mindustry/entities/units/types/Vtol.java b/core/src/io/anuke/mindustry/entities/units/types/Vtol.java
index c681b1d661..67232a4631 100644
--- a/core/src/io/anuke/mindustry/entities/units/types/Vtol.java
+++ b/core/src/io/anuke/mindustry/entities/units/types/Vtol.java
@@ -1,6 +1,5 @@
package io.anuke.mindustry.entities.units.types;
-import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.entities.units.FlyingUnit;
import io.anuke.mindustry.entities.units.UnitType;
import io.anuke.mindustry.game.Team;
@@ -9,10 +8,6 @@ import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Mathf;
public class Vtol extends FlyingUnit {
- static TextureRegion
- booster1 = Draw.region("vtol-booster-1"),
- booster2 = Draw.region("vtol-booster-2"),
- region = Draw.region("vtol");
public Vtol(UnitType type, Team team) {
super(type, team);
@@ -22,10 +17,11 @@ public class Vtol extends FlyingUnit {
public void draw() {
Draw.alpha(hitTime / hitDuration);
- Draw.rect(region, x, y, rotation - 90);
+ Draw.rect("vtol", x, y, rotation - 90);
+
for(int i : Mathf.signs){
- Draw.rect(booster1, x, y, 12*i, 12, rotation - 90);
- Draw.rect(booster2, x, y, 12*i, 12, rotation - 90);
+ Draw.rect("vtol-booster-1", x, y, 12*i, 12, rotation - 90);
+ Draw.rect("vtol-booster-2", x, y, 12*i, 12, rotation - 90);
}
Draw.alpha(1f);
diff --git a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java
index b78ef50a26..d3d935a337 100644
--- a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java
+++ b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java
@@ -5,7 +5,7 @@ import io.anuke.mindustry.content.blocks.Blocks;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.StaticBlock;
+import io.anuke.mindustry.world.blocks.StaticBlock;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Mathf;
diff --git a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java
index 11f199dfcc..24a6afa6fa 100644
--- a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java
+++ b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java
@@ -9,7 +9,7 @@ import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.Unit;
import io.anuke.mindustry.game.TeamInfo.TeamData;
import io.anuke.mindustry.input.InputHandler;
-import io.anuke.mindustry.world.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.core.Inputs;
diff --git a/core/src/io/anuke/mindustry/input/CursorType.java b/core/src/io/anuke/mindustry/input/CursorType.java
new file mode 100644
index 0000000000..fd55b7998e
--- /dev/null
+++ b/core/src/io/anuke/mindustry/input/CursorType.java
@@ -0,0 +1,23 @@
+package io.anuke.mindustry.input;
+
+import io.anuke.ucore.function.Callable;
+import io.anuke.ucore.scene.utils.Cursors;
+
+/**Type of cursor for displaying on desktop.*/
+public enum CursorType {
+ normal(Cursors::restoreCursor),
+ hand(Cursors::setHand),
+ drill(() -> Cursors.set("drill")),
+ unload(() -> Cursors.set("unload"));
+
+ private final Callable call;
+
+ CursorType(Callable call){
+ this.call = call;
+ }
+
+ /**Sets the current system cursor to this.*/
+ void set(){
+ call.run();
+ }
+}
diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java
index 284f818829..745d089c82 100644
--- a/core/src/io/anuke/mindustry/input/DesktopInput.java
+++ b/core/src/io/anuke/mindustry/input/DesktopInput.java
@@ -16,15 +16,13 @@ import io.anuke.ucore.core.Inputs;
import io.anuke.ucore.core.Inputs.DeviceType;
import io.anuke.ucore.core.KeyBinds;
import io.anuke.ucore.core.Settings;
-import io.anuke.ucore.function.Callable;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.scene.ui.layout.Unit;
-import io.anuke.ucore.scene.utils.Cursors;
import io.anuke.ucore.util.Mathf;
import static io.anuke.mindustry.Vars.*;
-import static io.anuke.mindustry.input.DesktopInput.CursorType.*;
+import static io.anuke.mindustry.input.CursorType.*;
import static io.anuke.mindustry.input.PlaceMode.*;
public class DesktopInput extends InputHandler{
@@ -154,9 +152,7 @@ public class DesktopInput extends InputHandler{
if(cursor != null){
cursor = cursor.target();
- if(cursor.block().isCursor(cursor)) {
- cursorType = hand;
- }
+ cursorType = cursor.block().getCursor(cursor);
if(canMine(cursor)){
cursorType = drill;
@@ -314,20 +310,4 @@ public class DesktopInput extends InputHandler{
}
}
- enum CursorType{
- normal(Cursors::restoreCursor),
- hand(Cursors::setHand),
- drill(() -> Cursors.set("drill")),
- unload(() -> Cursors.set("unload"));
-
- private final Callable call;
-
- CursorType(Callable call){
- this.call = call;
- }
-
- void set(){
- call.run();
- }
- }
}
diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java
index bfa46788e8..75fbcacbd0 100644
--- a/core/src/io/anuke/mindustry/input/InputHandler.java
+++ b/core/src/io/anuke/mindustry/input/InputHandler.java
@@ -94,7 +94,7 @@ public abstract class InputHandler extends InputAdapter{
boolean showedInventory = false;
//check if tapped block is configurable
- if(tile.block().isConfigurable(tile) && tile.getTeam() == player.getTeam()){
+ if(tile.block().configurable && tile.getTeam() == player.getTeam()){
consumed = true;
if((!frag.config.isShown() //if the config fragment is hidden, show
//alternatively, the current selected block can 'agree' to switch config tiles
diff --git a/core/src/io/anuke/mindustry/io/TypeIO.java b/core/src/io/anuke/mindustry/io/TypeIO.java
new file mode 100644
index 0000000000..76b321508c
--- /dev/null
+++ b/core/src/io/anuke/mindustry/io/TypeIO.java
@@ -0,0 +1,50 @@
+package io.anuke.mindustry.io;
+
+import io.anuke.annotations.Annotations.ReadClass;
+import io.anuke.annotations.Annotations.WriteClass;
+import io.anuke.mindustry.entities.Player;
+import io.anuke.mindustry.world.Tile;
+
+
+import java.nio.ByteBuffer;
+
+import static io.anuke.mindustry.Vars.playerGroup;
+import static io.anuke.mindustry.Vars.world;
+
+public class TypeIO {
+
+ @WriteClass(Player.class)
+ public static void writePlayer(ByteBuffer buffer, Player player){
+ buffer.putInt(player.id);
+ }
+
+ @ReadClass(Player.class)
+ public static Player readPlayer(ByteBuffer buffer){
+ return playerGroup.getByID(buffer.getInt());
+ }
+
+ @WriteClass(Tile.class)
+ public static void writeTile(ByteBuffer buffer, Tile tile){
+ buffer.putInt(tile.packedPosition());
+ }
+
+ @ReadClass(Tile.class)
+ public static Tile readTile(ByteBuffer buffer){
+ return world.tile(buffer.getInt());
+ }
+
+ @WriteClass(String.class)
+ public static void writeString(ByteBuffer buffer, String string){
+ byte[] bytes = string.getBytes();
+ buffer.putShort((short)bytes.length);
+ buffer.put(bytes);
+ }
+
+ @ReadClass(String.class)
+ public static String readString(ByteBuffer buffer){
+ short length = buffer.getShort();
+ byte[] bytes = new byte[length];
+ buffer.get(bytes);
+ return new String(bytes);
+ }
+}
diff --git a/core/src/io/anuke/mindustry/io/versions/Save16.java b/core/src/io/anuke/mindustry/io/versions/Save16.java
index fc7689cebe..96b314752e 100644
--- a/core/src/io/anuke/mindustry/io/versions/Save16.java
+++ b/core/src/io/anuke/mindustry/io/versions/Save16.java
@@ -11,7 +11,7 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.io.SaveFileVersion;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.BlockPart;
+import io.anuke.mindustry.world.blocks.BlockPart;
import io.anuke.ucore.entities.Entities;
import io.anuke.ucore.entities.EntityGroup;
import io.anuke.ucore.entities.EntityPhysics;
diff --git a/core/src/io/anuke/mindustry/net/Administration.java b/core/src/io/anuke/mindustry/net/Administration.java
index d690e6f093..561bf3b33f 100644
--- a/core/src/io/anuke/mindustry/net/Administration.java
+++ b/core/src/io/anuke/mindustry/net/Administration.java
@@ -6,10 +6,10 @@ import com.badlogic.gdx.utils.ObjectMap;
import com.badlogic.gdx.utils.TimeUtils;
import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.blocks.types.BlockPart;
-import io.anuke.mindustry.world.blocks.types.Floor;
-import io.anuke.mindustry.world.blocks.types.Rock;
-import io.anuke.mindustry.world.blocks.types.StaticBlock;
+import io.anuke.mindustry.world.blocks.BlockPart;
+import io.anuke.mindustry.world.blocks.Floor;
+import io.anuke.mindustry.world.blocks.Rock;
+import io.anuke.mindustry.world.blocks.StaticBlock;
import io.anuke.ucore.core.Settings;
import static io.anuke.mindustry.Vars.world;
diff --git a/core/src/io/anuke/mindustry/net/Interpolator.java b/core/src/io/anuke/mindustry/net/Interpolator.java
index ae7652515e..aed9a61259 100644
--- a/core/src/io/anuke/mindustry/net/Interpolator.java
+++ b/core/src/io/anuke/mindustry/net/Interpolator.java
@@ -18,8 +18,6 @@ public class Interpolator {
public Vector2 pos = new Vector2();
public float[] values = {};
- public Vector2 smoothPos = new Vector2();
-
public void read(float cx, float cy, float x, float y, long sent, float... target1ds){
targets = target1ds;
time = 0f;
diff --git a/core/src/io/anuke/mindustry/net/NetworkIO.java b/core/src/io/anuke/mindustry/net/NetworkIO.java
index b511e60f7e..50b813b2aa 100644
--- a/core/src/io/anuke/mindustry/net/NetworkIO.java
+++ b/core/src/io/anuke/mindustry/net/NetworkIO.java
@@ -9,7 +9,7 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.io.Version;
import io.anuke.mindustry.type.Upgrade;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.BlockPart;
+import io.anuke.mindustry.world.blocks.BlockPart;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.entities.Entities;
import io.anuke.ucore.util.Bits;
diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java
index d926fd3d30..f69a07aa9d 100644
--- a/core/src/io/anuke/mindustry/world/Block.java
+++ b/core/src/io/anuke/mindustry/world/Block.java
@@ -17,9 +17,15 @@ import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.mindustry.graphics.CacheLayer;
import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.graphics.Palette;
+import io.anuke.mindustry.input.CursorType;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.Liquid;
+import io.anuke.mindustry.world.meta.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBars;
+import io.anuke.mindustry.world.meta.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockStats;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Hue;
@@ -98,11 +104,11 @@ public class Block extends BaseBlock implements UnlockableContent{
/**whether this block has instant transfer checking. used for calculations to prevent infinite loops.*/
public boolean instantTransfer = false;
/**The block group. Unless {@link #canReplace} is overriden, blocks in the same group can replace each other.*/
- public BlockGroup group = BlockGroup.none;
+ public io.anuke.mindustry.world.meta.BlockGroup group = io.anuke.mindustry.world.meta.BlockGroup.none;
/**list of displayed block status bars. Defaults to health bar.*/
- public BlockBars bars = new BlockBars();
+ public io.anuke.mindustry.world.meta.BlockBars bars = new BlockBars();
/**List of block stats.*/
- public BlockStats stats = new BlockStats();
+ public io.anuke.mindustry.world.meta.BlockStats stats = new BlockStats();
/**List of block flags. Used for AI indexing.*/
public EnumSet flags;
/**Whether to automatically set the entity to 'sleeping' when created.*/
@@ -113,6 +119,8 @@ public class Block extends BaseBlock implements UnlockableContent{
public TextureRegion shadowRegion;
/**Texture region array for drawing multiple shadows.*/
public TextureRegion[] shadowRegions;
+ /**Whether the block can be tapped and selected to configure.*/
+ public boolean configurable;
public Block(String name) {
this.name = name;
@@ -174,28 +182,14 @@ public class Block extends BaseBlock implements UnlockableContent{
}
/**Returns whether or not a hand cursor should be shown over this block.*/
- public boolean isCursor(Tile tile){
- return isConfigurable(tile);
+ public CursorType getCursor(Tile tile){
+ return configurable ? CursorType.normal : CursorType.hand;
}
/**Called when this block is tapped to build a UI on the table.
- * {@link #isConfigurable(Tile)} able} must return true for this to be called.*/
+ * {@link #configurable} able} must return true for this to be called.*/
public void buildTable(Tile tile, Table table) {}
- //TODO why make it a method?
- /**Returns whether this tile can be configured.*/
- public boolean isConfigurable(Tile tile){
- return false;
- }
-
- //TODO remove this
- public void configure(Tile tile, byte data){}
-
- //TODO remove this
- public void setConfigure(Tile tile, byte data){
- configure(tile, data);
- }
-
/**Called when another tile is tapped while this block is selected.
* Returns whether or not this block should be deselected.*/
public boolean onConfigureTileTapped(Tile tile, Tile other){
@@ -225,8 +219,8 @@ public class Block extends BaseBlock implements UnlockableContent{
//TODO make this easier to config.
public void setBars(){
- if(hasPower) bars.add(new BlockBar(BarType.power, true, tile -> tile.entity.power.amount / powerCapacity));
- if(hasLiquids) bars.add(new BlockBar(BarType.liquid, true, tile -> tile.entity.liquids.amount / liquidCapacity));
+ if(hasPower) bars.add(new io.anuke.mindustry.world.meta.BlockBar(BarType.power, true, tile -> tile.entity.power.amount / powerCapacity));
+ if(hasLiquids) bars.add(new io.anuke.mindustry.world.meta.BlockBar(BarType.liquid, true, tile -> tile.entity.liquids.amount / liquidCapacity));
if(hasItems) bars.add(new BlockBar(BarType.inventory, true, tile -> (float)tile.entity.items.totalItems() / itemCapacity));
}
diff --git a/core/src/io/anuke/mindustry/world/Build.java b/core/src/io/anuke/mindustry/world/Build.java
index 12b41e37a6..9028092d88 100644
--- a/core/src/io/anuke/mindustry/world/Build.java
+++ b/core/src/io/anuke/mindustry/world/Build.java
@@ -7,7 +7,7 @@ import io.anuke.mindustry.content.fx.Fx;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.type.Recipe;
-import io.anuke.mindustry.world.blocks.types.BuildBlock.BuildEntity;
+import io.anuke.mindustry.world.blocks.BuildBlock.BuildEntity;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.entities.Entities;
diff --git a/core/src/io/anuke/mindustry/world/Tile.java b/core/src/io/anuke/mindustry/world/Tile.java
index f6b4a3d642..060e3e5565 100644
--- a/core/src/io/anuke/mindustry/world/Tile.java
+++ b/core/src/io/anuke/mindustry/world/Tile.java
@@ -9,10 +9,10 @@ import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.type.Recipe;
-import io.anuke.mindustry.world.blocks.types.Floor;
-import io.anuke.mindustry.world.blocks.types.modules.InventoryModule;
-import io.anuke.mindustry.world.blocks.types.modules.LiquidModule;
-import io.anuke.mindustry.world.blocks.types.modules.PowerModule;
+import io.anuke.mindustry.world.blocks.Floor;
+import io.anuke.mindustry.world.blocks.modules.InventoryModule;
+import io.anuke.mindustry.world.blocks.modules.LiquidModule;
+import io.anuke.mindustry.world.blocks.modules.PowerModule;
import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.util.Bits;
import io.anuke.ucore.entities.trait.PosTrait;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/BlendBlock.java b/core/src/io/anuke/mindustry/world/blocks/BlendBlock.java
similarity index 94%
rename from core/src/io/anuke/mindustry/world/blocks/types/BlendBlock.java
rename to core/src/io/anuke/mindustry/world/blocks/BlendBlock.java
index cd27addbf2..7c01a052be 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/BlendBlock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/BlendBlock.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/BlockModule.java b/core/src/io/anuke/mindustry/world/blocks/BlockModule.java
similarity index 85%
rename from core/src/io/anuke/mindustry/world/blocks/types/BlockModule.java
rename to core/src/io/anuke/mindustry/world/blocks/BlockModule.java
index 1ecd5b4774..97555ced39 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/BlockModule.java
+++ b/core/src/io/anuke/mindustry/world/blocks/BlockModule.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import java.io.DataInputStream;
import java.io.DataOutputStream;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java b/core/src/io/anuke/mindustry/world/blocks/BlockPart.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java
rename to core/src/io/anuke/mindustry/world/blocks/BlockPart.java
index 5e8776c2b2..37788c5f23 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java
+++ b/core/src/io/anuke/mindustry/world/blocks/BlockPart.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Liquid;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java
similarity index 95%
rename from core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java
rename to core/src/io/anuke/mindustry/world/blocks/BuildBlock.java
index e658ecf63f..cbad72aead 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.content.fx.ExplosionFx;
@@ -14,9 +14,9 @@ import io.anuke.mindustry.graphics.Shaders;
import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.world.BarType;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.modules.InventoryModule;
+import io.anuke.mindustry.world.blocks.modules.InventoryModule;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.graphics.Draw;
@@ -31,6 +31,7 @@ public class BuildBlock extends Block {
size = Integer.parseInt(name.charAt(name.length()-1) + "");
health = 1;
layer = Layer.placement;
+ configurable = true;
}
@Override
@@ -43,11 +44,6 @@ public class BuildBlock extends Block {
return true;
}
- @Override
- public boolean isCursor(Tile tile) {
- return true;
- }
-
@Override
public void setBars(){
bars.replace(new BlockBar(BarType.health, true, tile -> (float)tile.entity().progress));
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/Floor.java b/core/src/io/anuke/mindustry/world/blocks/Floor.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/Floor.java
rename to core/src/io/anuke/mindustry/world/blocks/Floor.java
index 0eb25ee907..3b5988ebd3 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/Floor.java
+++ b/core/src/io/anuke/mindustry/world/blocks/Floor.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/LiquidBlock.java b/core/src/io/anuke/mindustry/world/blocks/LiquidBlock.java
similarity index 86%
rename from core/src/io/anuke/mindustry/world/blocks/types/LiquidBlock.java
rename to core/src/io/anuke/mindustry/world/blocks/LiquidBlock.java
index 3254b17dfa..ff60b5c1cd 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/LiquidBlock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/LiquidBlock.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.modules.LiquidModule;
+import io.anuke.mindustry.world.blocks.modules.LiquidModule;
import io.anuke.ucore.graphics.Draw;
public class LiquidBlock extends Block{
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/Ore.java b/core/src/io/anuke/mindustry/world/blocks/Ore.java
similarity index 80%
rename from core/src/io/anuke/mindustry/world/blocks/types/Ore.java
rename to core/src/io/anuke/mindustry/world/blocks/Ore.java
index 1dc567e078..ff0f155849 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/Ore.java
+++ b/core/src/io/anuke/mindustry/world/blocks/Ore.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import io.anuke.mindustry.content.blocks.Blocks;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java b/core/src/io/anuke/mindustry/world/blocks/PowerBlock.java
similarity index 71%
rename from core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java
rename to core/src/io/anuke/mindustry/world/blocks/PowerBlock.java
index 6df5bfd645..095aa42034 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/PowerBlock.java
@@ -1,7 +1,7 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
public abstract class PowerBlock extends Block{
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/Rock.java b/core/src/io/anuke/mindustry/world/blocks/Rock.java
similarity index 82%
rename from core/src/io/anuke/mindustry/world/blocks/types/Rock.java
rename to core/src/io/anuke/mindustry/world/blocks/Rock.java
index 79984aa745..f6c463ece5 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/Rock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/Rock.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import io.anuke.mindustry.world.Block;
diff --git a/core/src/io/anuke/mindustry/world/blocks/SelectionTrait.java b/core/src/io/anuke/mindustry/world/blocks/SelectionTrait.java
new file mode 100644
index 0000000000..59e8bbbbb6
--- /dev/null
+++ b/core/src/io/anuke/mindustry/world/blocks/SelectionTrait.java
@@ -0,0 +1,42 @@
+package io.anuke.mindustry.world.blocks;
+
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
+import com.badlogic.gdx.utils.Array;
+import io.anuke.mindustry.type.Item;
+import io.anuke.ucore.function.Consumer;
+import io.anuke.ucore.function.Supplier;
+import io.anuke.ucore.scene.style.TextureRegionDrawable;
+import io.anuke.ucore.scene.ui.ButtonGroup;
+import io.anuke.ucore.scene.ui.ImageButton;
+import io.anuke.ucore.scene.ui.layout.Table;
+
+public interface SelectionTrait {
+
+ default void buildItemTable(Table table, Supplier- holder, Consumer
- consumer){
+
+ Array
- items = Item.all();
+
+ ButtonGroup group = new ButtonGroup<>();
+ Table cont = new Table();
+ cont.margin(4);
+ cont.marginBottom(5);
+
+ cont.add().colspan(4).height(50f * (int)(items.size/4f + 1f));
+ cont.row();
+
+ for(int i = 0; i < items.size; i ++){
+
+ final int f = i;
+ ImageButton button = cont.addImageButton("white", "toggle", 24, () -> consumer.accept(items.get(f)))
+ .size(38, 42).padBottom(-5.1f).group(group).get();
+ button.getStyle().imageUp = new TextureRegionDrawable(new TextureRegion(items.get(i).region));
+ button.setChecked(holder.get().id == f);
+
+ if(i%4 == 3){
+ cont.row();
+ }
+ }
+
+ table.add(cont);
+ }
+}
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/StaticBlock.java b/core/src/io/anuke/mindustry/world/blocks/StaticBlock.java
similarity index 82%
rename from core/src/io/anuke/mindustry/world/blocks/types/StaticBlock.java
rename to core/src/io/anuke/mindustry/world/blocks/StaticBlock.java
index dca911701d..61f11a5549 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/StaticBlock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/StaticBlock.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import io.anuke.mindustry.graphics.CacheLayer;
import io.anuke.mindustry.world.Block;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/Wall.java b/core/src/io/anuke/mindustry/world/blocks/Wall.java
similarity index 78%
rename from core/src/io/anuke/mindustry/world/blocks/types/Wall.java
rename to core/src/io/anuke/mindustry/world/blocks/Wall.java
index fc3e551ffc..97004f598f 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/Wall.java
+++ b/core/src/io/anuke/mindustry/world/blocks/Wall.java
@@ -1,7 +1,7 @@
-package io.anuke.mindustry.world.blocks.types;
+package io.anuke.mindustry.world.blocks;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
public class Wall extends Block{
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/Door.java b/core/src/io/anuke/mindustry/world/blocks/defense/Door.java
similarity index 90%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/Door.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/Door.java
index 4efda5b0e4..ae11c0b9a7 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/Door.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/Door.java
@@ -1,12 +1,13 @@
-package io.anuke.mindustry.world.blocks.types.defense;
+package io.anuke.mindustry.world.blocks.defense;
import com.badlogic.gdx.math.Rectangle;
import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.entities.Units;
+import io.anuke.mindustry.input.CursorType;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.Wall;
+import io.anuke.mindustry.world.blocks.Wall;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
import io.anuke.ucore.graphics.Draw;
@@ -39,8 +40,8 @@ public class Door extends Wall{
}
@Override
- public boolean isCursor(Tile tile){
- return true;
+ public CursorType getCursor(Tile tile){
+ return CursorType.hand;
}
@Override
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/RepairTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/RepairTurret.java
similarity index 95%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/RepairTurret.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/RepairTurret.java
index f0be3cbe0b..107c16d8ef 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/RepairTurret.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/RepairTurret.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.world.blocks.types.defense;
+package io.anuke.mindustry.world.blocks.defense;
import com.badlogic.gdx.math.MathUtils;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.defense.turrets.PowerTurret;
+import io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Hue;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java b/core/src/io/anuke/mindustry/world/blocks/defense/ShieldBlock.java
similarity index 95%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/ShieldBlock.java
index 90a7c404b3..fffaee5fcc 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/ShieldBlock.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.world.blocks.types.defense;
+package io.anuke.mindustry.world.blocks.defense;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.entities.effect.Shield;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.PowerBlock;
+import io.anuke.mindustry.world.blocks.PowerBlock;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.entities.impl.BulletEntity;
import io.anuke.ucore.util.Mathf;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldedWallBlock.java b/core/src/io/anuke/mindustry/world/blocks/defense/ShieldedWallBlock.java
similarity index 94%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldedWallBlock.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/ShieldedWallBlock.java
index 970ed00fcf..c99861f3d9 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldedWallBlock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/ShieldedWallBlock.java
@@ -1,9 +1,9 @@
-package io.anuke.mindustry.world.blocks.types.defense;
+package io.anuke.mindustry.world.blocks.defense;
import com.badlogic.gdx.graphics.Color;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.PowerBlock;
+import io.anuke.mindustry.world.blocks.PowerBlock;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Strings;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java b/core/src/io/anuke/mindustry/world/blocks/defense/Turret.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/Turret.java
index ce41b79835..5a5d69cfca 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/Turret.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.defense;
+package io.anuke.mindustry.world.blocks.defense;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
@@ -14,7 +14,7 @@ import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.type.AmmoEntry;
import io.anuke.mindustry.type.AmmoType;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/BurstTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/BurstTurret.java
similarity index 93%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/BurstTurret.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/turrets/BurstTurret.java
index ca939bfeb8..a686e6bb11 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/BurstTurret.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/BurstTurret.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.defense.turrets;
+package io.anuke.mindustry.world.blocks.defense.turrets;
import io.anuke.mindustry.type.AmmoType;
import io.anuke.mindustry.world.Tile;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/DoubleTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/DoubleTurret.java
similarity index 92%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/DoubleTurret.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/turrets/DoubleTurret.java
index 9991011cf4..1cdabfbaa8 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/DoubleTurret.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/DoubleTurret.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.defense.turrets;
+package io.anuke.mindustry.world.blocks.defense.turrets;
import io.anuke.mindustry.type.AmmoType;
import io.anuke.mindustry.world.Tile;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/ItemTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java
similarity index 94%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/ItemTurret.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java
index dd8ffd0e04..23082d1c41 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/ItemTurret.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.defense.turrets;
+package io.anuke.mindustry.world.blocks.defense.turrets;
import com.badlogic.gdx.utils.ObjectMap;
import io.anuke.mindustry.entities.Unit;
@@ -6,9 +6,9 @@ import io.anuke.mindustry.type.AmmoEntry;
import io.anuke.mindustry.type.AmmoType;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.BarType;
-import io.anuke.mindustry.world.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.defense.Turret;
+import io.anuke.mindustry.world.blocks.defense.Turret;
public class ItemTurret extends Turret {
protected int maxAmmo = 100;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LaserTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java
similarity index 96%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LaserTurret.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java
index 75282011e6..1b69866132 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LaserTurret.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.defense.turrets;
+package io.anuke.mindustry.world.blocks.defense.turrets;
import io.anuke.mindustry.content.fx.Fx;
import io.anuke.mindustry.type.AmmoType;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LiquidTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LiquidTurret.java
similarity index 94%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LiquidTurret.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/turrets/LiquidTurret.java
index 9f6f7f6a40..1fa1b21eda 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/LiquidTurret.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LiquidTurret.java
@@ -1,13 +1,13 @@
-package io.anuke.mindustry.world.blocks.types.defense.turrets;
+package io.anuke.mindustry.world.blocks.defense.turrets;
import com.badlogic.gdx.utils.ObjectMap;
import io.anuke.mindustry.type.AmmoType;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.BarType;
-import io.anuke.mindustry.world.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.defense.Turret;
+import io.anuke.mindustry.world.blocks.defense.Turret;
import io.anuke.ucore.core.Effects;
public abstract class LiquidTurret extends Turret {
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/PowerTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java
similarity index 85%
rename from core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/PowerTurret.java
rename to core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java
index c0630f9d2b..e5123cd143 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/defense/turrets/PowerTurret.java
+++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/PowerTurret.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.world.blocks.types.defense.turrets;
+package io.anuke.mindustry.world.blocks.defense.turrets;
import io.anuke.mindustry.type.AmmoType;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.defense.Turret;
+import io.anuke.mindustry.world.blocks.defense.Turret;
import io.anuke.ucore.util.Strings;
public abstract class PowerTurret extends Turret {
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/BufferedItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java
similarity index 96%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/BufferedItemBridge.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java
index c224b64b14..0ed3c2ec1a 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/BufferedItemBridge.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Item;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conduit.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Conduit.java
similarity index 93%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/Conduit.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/Conduit.java
index fa3cb0cf03..ecaf8d1cea 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conduit.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Conduit.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.LiquidBlock;
-import io.anuke.mindustry.world.blocks.types.modules.LiquidModule;
+import io.anuke.mindustry.world.blocks.LiquidBlock;
+import io.anuke.mindustry.world.blocks.modules.LiquidModule;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Mathf;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java
index 4ccfb6d511..8f53d113fb 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Conveyor.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import com.badlogic.gdx.utils.LongArray;
import io.anuke.mindustry.content.Items;
@@ -7,7 +7,7 @@ import io.anuke.mindustry.entities.Unit;
import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/ExtendingItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/ExtendingItemBridge.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/ExtendingItemBridge.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/ExtendingItemBridge.java
index 70171486e1..5cec679fbf 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/ExtendingItemBridge.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ExtendingItemBridge.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.graphics.CapStyle;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/ItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/ItemBridge.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java
index 2f2e8a1ed5..e31a6ac838 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/ItemBridge.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.IntArray;
@@ -41,6 +41,7 @@ public class ItemBridge extends Block {
layer = Layer.power;
expanded = true;
itemCapacity = 30;
+ configurable = true;
}
@Override
@@ -55,11 +56,6 @@ public class ItemBridge extends Block {
lastPlaced = tile.packedPosition();
}
- @Override
- public boolean isConfigurable(Tile tile) {
- return true;
- }
-
@Override
public void drawPlace(int x, int y, int rotation, boolean valid) {
Lines.stroke(2f);
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java
index 16672ec700..af21d078ac 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.NumberUtils;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.function.Consumer;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidBridge.java
similarity index 96%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidBridge.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/LiquidBridge.java
index b07aabab99..f014f8574a 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidBridge.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidBridge.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Tile;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidExtendingBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidExtendingBridge.java
similarity index 96%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidExtendingBridge.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/LiquidExtendingBridge.java
index c86abaf771..7f3c908359 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidExtendingBridge.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidExtendingBridge.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Tile;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidJunction.java b/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidJunction.java
similarity index 90%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidJunction.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/LiquidJunction.java
index 1de5a382b6..3d1a47f8c3 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidJunction.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidJunction.java
@@ -1,9 +1,9 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.LiquidBlock;
+import io.anuke.mindustry.world.blocks.LiquidBlock;
import io.anuke.ucore.graphics.Draw;
public class LiquidJunction extends LiquidBlock{
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidRouter.java b/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidRouter.java
similarity index 68%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidRouter.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/LiquidRouter.java
index 92e38eb8a2..e2c42784d7 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/LiquidRouter.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/LiquidRouter.java
@@ -1,7 +1,7 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.LiquidBlock;
+import io.anuke.mindustry.world.blocks.LiquidBlock;
public class LiquidRouter extends LiquidBlock{
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/MassDriver.java b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java
similarity index 71%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/MassDriver.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java
index 8117446de9..13d8ce7d7f 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/MassDriver.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import io.anuke.mindustry.world.Block;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/OverflowGate.java b/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java
similarity index 96%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/OverflowGate.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java
index e1197d31db..eba073e898 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/OverflowGate.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Tile;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java
similarity index 92%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/Router.java
index 1845faf89e..231ad4d4cf 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Sorter.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java
similarity index 67%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/Sorter.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java
index fb2260c7d1..3fc0680b3a 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Sorter.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java
@@ -1,17 +1,13 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
-import com.badlogic.gdx.graphics.g2d.TextureRegion;
-import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.content.Items;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
import io.anuke.mindustry.world.Tile;
+import io.anuke.mindustry.world.blocks.SelectionTrait;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.ucore.graphics.Draw;
-import io.anuke.ucore.scene.style.TextureRegionDrawable;
-import io.anuke.ucore.scene.ui.ButtonGroup;
-import io.anuke.ucore.scene.ui.ImageButton;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.util.Mathf;
@@ -19,7 +15,7 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
-public class Sorter extends Block{
+public class Sorter extends Block implements SelectionTrait{
public Sorter(String name) {
super(name);
@@ -27,11 +23,14 @@ public class Sorter extends Block{
solid = true;
instantTransfer = true;
group = BlockGroup.transportation;
+ configurable = true;
}
@Override
public void draw(Tile tile){
super.draw(tile);
+
+ //TODO call event for change
SorterEntity entity = tile.entity();
@@ -92,48 +91,11 @@ public class Sorter extends Block{
return to;
}
-
- @Override
- public void configure(Tile tile, byte data) {
- SorterEntity entity = tile.entity();
- if(entity != null){
- entity.sortItem = Item.getByID(data);
- }
- }
-
- @Override
- public boolean isConfigurable(Tile tile){
- return true;
- }
@Override
public void buildTable(Tile tile, Table table){
SorterEntity entity = tile.entity();
-
- Array
- items = Item.all();
-
- ButtonGroup group = new ButtonGroup<>();
- Table cont = new Table();
- cont.margin(4);
- cont.marginBottom(5);
-
- cont.add().colspan(4).height(50f * (int)(items.size/4f + 1f));
- cont.row();
-
- for(int i = 0; i < items.size; i ++){
- final int f = i;
- ImageButton button = cont.addImageButton("white", "toggle", 24, () -> {
- setConfigure(tile, (byte)f);
- }).size(38, 42).padBottom(-5.1f).group(group).get();
- button.getStyle().imageUp = new TextureRegionDrawable(new TextureRegion(items.get(i).region));
- button.setChecked(entity.sortItem.id == f);
-
- if(i%4 == 3){
- cont.row();
- }
- }
-
- table.add(cont);
+ buildItemTable(table, () -> entity.sortItem, item -> entity.sortItem = item);
}
@Override
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Splitter.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java
similarity index 94%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/Splitter.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java
index ede5a95e01..4fa776dc01 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Splitter.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.util.Mathf;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Teleporter.java
similarity index 95%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/Teleporter.java
index b2eb1a0e88..5023d3a85a 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Teleporter.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Array;
@@ -9,7 +9,7 @@ import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.PowerBlock;
+import io.anuke.mindustry.world.blocks.PowerBlock;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
import io.anuke.ucore.core.Timers;
@@ -65,15 +65,7 @@ public class Teleporter extends PowerBlock{
itemCapacity = 100;
hasLiquids = true;
liquidCapacity = 100f;
- }
-
- @Override
- public void configure(Tile tile, byte data) {
- TeleporterEntity entity = tile.entity();
- if(entity != null){
- entity.color = data;
- entity.items.clear();
- }
+ configurable = true;
}
@Override
@@ -84,7 +76,7 @@ public class Teleporter extends PowerBlock{
@Override
public void placed(Tile tile){
tile.entity().color = lastColor;
- setConfigure(tile, lastColor);
+ tile.entity().color = lastColor;
}
@Override
@@ -211,16 +203,13 @@ public class Teleporter extends PowerBlock{
}
}
}
-
- @Override
- public boolean isConfigurable(Tile tile){
- return true;
- }
@Override
public void buildTable(Tile tile, Table table){
TeleporterEntity entity = tile.entity();
+ //TODO call event for change
+
ButtonGroup group = new ButtonGroup<>();
Table cont = new Table();
cont.margin(4);
@@ -233,7 +222,6 @@ public class Teleporter extends PowerBlock{
final int f = i;
ImageButton button = cont.addImageButton("white", "toggle", 24, () -> {
lastColor = (byte)f;
- setConfigure(tile, (byte)f);
}).size(34, 38).padBottom(-5.1f).group(group).get();
button.getStyle().imageUpColor = colorArray[f];
button.setChecked(entity.color == f);
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConduit.java b/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConduit.java
similarity index 95%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConduit.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConduit.java
index 82423dbfcb..d53f00d00f 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConduit.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConduit.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.BarType;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.LiquidBlock;
+import io.anuke.mindustry.world.blocks.LiquidBlock;
import io.anuke.ucore.graphics.Draw;
public class TunnelConduit extends LiquidBlock {
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConveyor.java b/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConveyor.java
similarity index 92%
rename from core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConveyor.java
rename to core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConveyor.java
index 7eed31a1b9..da3410c575 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/TunnelConveyor.java
+++ b/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConveyor.java
@@ -1,10 +1,11 @@
-package io.anuke.mindustry.world.blocks.types.distribution;
+package io.anuke.mindustry.world.blocks.distribution;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.NumberUtils;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.*;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.util.Bits;
@@ -20,7 +21,7 @@ public class TunnelConveyor extends Block{
solid = true;
health = 70;
instantTransfer = true;
- bars.add(new BlockBar(BarType.inventory, true, tile -> (float)tile.entity().index/capacity));
+ bars.add(new io.anuke.mindustry.world.meta.BlockBar(BarType.inventory, true, tile -> (float)tile.entity().index/capacity));
group = BlockGroup.transportation;
}
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/logic/LogicBlock.java b/core/src/io/anuke/mindustry/world/blocks/logic/LogicBlock.java
similarity index 73%
rename from core/src/io/anuke/mindustry/world/blocks/types/logic/LogicBlock.java
rename to core/src/io/anuke/mindustry/world/blocks/logic/LogicBlock.java
index a5fc8b5fba..2e1a11c3b1 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/logic/LogicBlock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/logic/LogicBlock.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.logic;
+package io.anuke.mindustry.world.blocks.logic;
import io.anuke.mindustry.world.Block;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java b/core/src/io/anuke/mindustry/world/blocks/modules/InventoryModule.java
similarity index 95%
rename from core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java
rename to core/src/io/anuke/mindustry/world/blocks/modules/InventoryModule.java
index a104acedc6..466dff490c 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java
+++ b/core/src/io/anuke/mindustry/world/blocks/modules/InventoryModule.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.world.blocks.types.modules;
+package io.anuke.mindustry.world.blocks.modules;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack;
-import io.anuke.mindustry.world.blocks.types.BlockModule;
+import io.anuke.mindustry.world.blocks.BlockModule;
import java.io.DataInputStream;
import java.io.DataOutputStream;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/modules/LiquidModule.java b/core/src/io/anuke/mindustry/world/blocks/modules/LiquidModule.java
similarity index 85%
rename from core/src/io/anuke/mindustry/world/blocks/types/modules/LiquidModule.java
rename to core/src/io/anuke/mindustry/world/blocks/modules/LiquidModule.java
index 8637de3261..99c72f7021 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/modules/LiquidModule.java
+++ b/core/src/io/anuke/mindustry/world/blocks/modules/LiquidModule.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.world.blocks.types.modules;
+package io.anuke.mindustry.world.blocks.modules;
import io.anuke.mindustry.content.Liquids;
import io.anuke.mindustry.type.Liquid;
-import io.anuke.mindustry.world.blocks.types.BlockModule;
+import io.anuke.mindustry.world.blocks.BlockModule;
import java.io.DataInputStream;
import java.io.DataOutputStream;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/modules/PowerModule.java b/core/src/io/anuke/mindustry/world/blocks/modules/PowerModule.java
similarity index 87%
rename from core/src/io/anuke/mindustry/world/blocks/types/modules/PowerModule.java
rename to core/src/io/anuke/mindustry/world/blocks/modules/PowerModule.java
index 32fa5079cd..5f9ee24ca8 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/modules/PowerModule.java
+++ b/core/src/io/anuke/mindustry/world/blocks/modules/PowerModule.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.world.blocks.types.modules;
+package io.anuke.mindustry.world.blocks.modules;
-import io.anuke.mindustry.world.blocks.types.BlockModule;
+import io.anuke.mindustry.world.blocks.BlockModule;
import java.io.DataInputStream;
import java.io.DataOutputStream;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/BurnerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/BurnerGenerator.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/power/BurnerGenerator.java
rename to core/src/io/anuke/mindustry/world/blocks/power/BurnerGenerator.java
index c337ed8b78..30d5dbeffa 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/power/BurnerGenerator.java
+++ b/core/src/io/anuke/mindustry/world/blocks/power/BurnerGenerator.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.world.blocks.types.power;
+package io.anuke.mindustry.world.blocks.power;
import com.badlogic.gdx.graphics.Color;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.BarType;
-import io.anuke.mindustry.world.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/DecayGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/DecayGenerator.java
similarity index 83%
rename from core/src/io/anuke/mindustry/world/blocks/types/power/DecayGenerator.java
rename to core/src/io/anuke/mindustry/world/blocks/power/DecayGenerator.java
index 90f9d9aa16..ce5f1599c7 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/power/DecayGenerator.java
+++ b/core/src/io/anuke/mindustry/world/blocks/power/DecayGenerator.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.power;
+package io.anuke.mindustry.world.blocks.power;
import io.anuke.mindustry.type.Item;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/FusionReactor.java b/core/src/io/anuke/mindustry/world/blocks/power/FusionReactor.java
similarity index 96%
rename from core/src/io/anuke/mindustry/world/blocks/types/power/FusionReactor.java
rename to core/src/io/anuke/mindustry/world/blocks/power/FusionReactor.java
index 06181c08c9..ddfa00ac43 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/power/FusionReactor.java
+++ b/core/src/io/anuke/mindustry/world/blocks/power/FusionReactor.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.power;
+package io.anuke.mindustry.world.blocks.power;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
@@ -6,7 +6,7 @@ import io.anuke.mindustry.content.Liquids;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.production.GenericCrafter.GenericCrafterEntity;
+import io.anuke.mindustry.world.blocks.production.GenericCrafter.GenericCrafterEntity;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidBurnerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/LiquidBurnerGenerator.java
similarity index 94%
rename from core/src/io/anuke/mindustry/world/blocks/types/power/LiquidBurnerGenerator.java
rename to core/src/io/anuke/mindustry/world/blocks/power/LiquidBurnerGenerator.java
index 1b172bb966..30d58eb13e 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidBurnerGenerator.java
+++ b/core/src/io/anuke/mindustry/world/blocks/power/LiquidBurnerGenerator.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.world.blocks.types.power;
+package io.anuke.mindustry.world.blocks.power;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.power.BurnerGenerator.BurnerEntity;
+import io.anuke.mindustry.world.blocks.power.BurnerGenerator.BurnerEntity;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
import io.anuke.ucore.core.Timers;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidHeatGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/LiquidHeatGenerator.java
similarity index 85%
rename from core/src/io/anuke/mindustry/world/blocks/types/power/LiquidHeatGenerator.java
rename to core/src/io/anuke/mindustry/world/blocks/power/LiquidHeatGenerator.java
index 2df1e0f4bd..be2b1b31de 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/power/LiquidHeatGenerator.java
+++ b/core/src/io/anuke/mindustry/world/blocks/power/LiquidHeatGenerator.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.power;
+package io.anuke.mindustry.world.blocks.power;
import io.anuke.mindustry.type.Liquid;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/NuclearReactor.java b/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/power/NuclearReactor.java
rename to core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java
index 7948a638e9..efaf40f7aa 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/power/NuclearReactor.java
+++ b/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.power;
+package io.anuke.mindustry.world.blocks.power;
import com.badlogic.gdx.graphics.Color;
import io.anuke.mindustry.content.Items;
@@ -9,7 +9,7 @@ import io.anuke.mindustry.content.fx.ExplosionFx;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.BarType;
-import io.anuke.mindustry.world.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Timers;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/PowerDistributor.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerDistributor.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/power/PowerDistributor.java
rename to core/src/io/anuke/mindustry/world/blocks/power/PowerDistributor.java
index c4da28af09..dfb61db967 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/power/PowerDistributor.java
+++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerDistributor.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.power;
+package io.anuke.mindustry.world.blocks.power;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.IntArray;
@@ -7,7 +7,7 @@ import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.world.Edges;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.PowerBlock;
+import io.anuke.mindustry.world.blocks.PowerBlock;
import io.anuke.ucore.core.Settings;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
@@ -44,6 +44,7 @@ public class PowerDistributor extends PowerBlock{
layer = Layer.power;
hasItems = false;
powerCapacity = 5f;
+ configurable = true;
}
@Override
@@ -59,11 +60,6 @@ public class PowerDistributor extends PowerBlock{
lastPlaced = tile.packedPosition();
}
- @Override
- public boolean isConfigurable(Tile tile){
- return true;
- }
-
@Override
public void setStats(){
super.setStats();
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/PowerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java
similarity index 92%
rename from core/src/io/anuke/mindustry/world/blocks/types/power/PowerGenerator.java
rename to core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java
index 6a929dd0f7..9ef2ab6874 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/power/PowerGenerator.java
+++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.world.blocks.types.power;
+package io.anuke.mindustry.world.blocks.power;
import com.badlogic.gdx.math.GridPoint2;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.world.Edges;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.PowerBlock;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.blocks.PowerBlock;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.util.EnumSet;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/power/SolarGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/SolarGenerator.java
similarity index 84%
rename from core/src/io/anuke/mindustry/world/blocks/types/power/SolarGenerator.java
rename to core/src/io/anuke/mindustry/world/blocks/power/SolarGenerator.java
index 3700327a55..3d8ff7338a 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/power/SolarGenerator.java
+++ b/core/src/io/anuke/mindustry/world/blocks/power/SolarGenerator.java
@@ -1,9 +1,9 @@
-package io.anuke.mindustry.world.blocks.types.power;
+package io.anuke.mindustry.world.blocks.power;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers;
-public class SolarGenerator extends io.anuke.mindustry.world.blocks.types.power.PowerGenerator {
+public class SolarGenerator extends io.anuke.mindustry.world.blocks.power.PowerGenerator {
/**power generated per frame*/
protected float generation = 0.005f;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Compressor.java b/core/src/io/anuke/mindustry/world/blocks/production/Compressor.java
similarity index 93%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/Compressor.java
rename to core/src/io/anuke/mindustry/world/blocks/production/Compressor.java
index df7c4b09e9..a7b85759f5 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/Compressor.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/Compressor.java
@@ -1,9 +1,9 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.production.GenericCrafter.GenericCrafterEntity;
+import io.anuke.mindustry.world.blocks.production.GenericCrafter.GenericCrafterEntity;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Mathf;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Cultivator.java b/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/Cultivator.java
rename to core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java
index 0fbc12db9c..d105930741 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/Cultivator.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java
rename to core/src/io/anuke/mindustry/world/blocks/production/Drill.java
index b599d7b511..2111868595 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/Drill.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
@@ -10,7 +10,7 @@ import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Fracker.java b/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/Fracker.java
rename to core/src/io/anuke/mindustry/world/blocks/production/Fracker.java
index ac5606992d..a7902a1e33 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/Fracker.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.entities.TileEntity;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/GenericCrafter.java b/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/GenericCrafter.java
rename to core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java
index 855d0ac257..94340fbac4 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/GenericCrafter.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.entities.TileEntity;
@@ -9,7 +9,7 @@ import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.BarType;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Incinerator.java b/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/Incinerator.java
rename to core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java
index bbcc8bc15c..e5e5f28432 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/Incinerator.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.Color;
import io.anuke.mindustry.content.fx.BlockFx;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidMixer.java b/core/src/io/anuke/mindustry/world/blocks/production/LiquidMixer.java
similarity index 94%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/LiquidMixer.java
rename to core/src/io/anuke/mindustry/world/blocks/production/LiquidMixer.java
index 6a8d7b7d0e..3c40b1b6d8 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidMixer.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/LiquidMixer.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import io.anuke.mindustry.content.Liquids;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.LiquidBlock;
+import io.anuke.mindustry.world.blocks.LiquidBlock;
import io.anuke.ucore.core.Timers;
public class LiquidMixer extends LiquidBlock{
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/PlasticFormer.java b/core/src/io/anuke/mindustry/world/blocks/production/PlasticFormer.java
similarity index 90%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/PlasticFormer.java
rename to core/src/io/anuke/mindustry/world/blocks/production/PlasticFormer.java
index 4919c8a131..b4e558224e 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/PlasticFormer.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/PlasticFormer.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.graphics.Draw;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/PowerCrafter.java b/core/src/io/anuke/mindustry/world/blocks/production/PowerCrafter.java
similarity index 93%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/PowerCrafter.java
rename to core/src/io/anuke/mindustry/world/blocks/production/PowerCrafter.java
index b8cfd433cf..7146af500f 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/PowerCrafter.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/PowerCrafter.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Item;
@@ -6,7 +6,7 @@ import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.production.GenericCrafter.GenericCrafterEntity;
+import io.anuke.mindustry.world.blocks.production.GenericCrafter.GenericCrafterEntity;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.util.Mathf;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/PowerSmelter.java b/core/src/io/anuke/mindustry/world/blocks/production/PowerSmelter.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/PowerSmelter.java
rename to core/src/io/anuke/mindustry/world/blocks/production/PowerSmelter.java
index 595d2ff4fb..25a76a51ad 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/PowerSmelter.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/PowerSmelter.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.Color;
import io.anuke.mindustry.entities.TileEntity;
@@ -6,9 +6,9 @@ import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.world.BarType;
-import io.anuke.mindustry.world.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.PowerBlock;
+import io.anuke.mindustry.world.blocks.PowerBlock;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
import io.anuke.ucore.core.Timers;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Pulverizer.java b/core/src/io/anuke/mindustry/world/blocks/production/Pulverizer.java
similarity index 91%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/Pulverizer.java
rename to core/src/io/anuke/mindustry/world/blocks/production/Pulverizer.java
index daf9d2a5eb..fd3015c915 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/Pulverizer.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/Pulverizer.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.world.Tile;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java b/core/src/io/anuke/mindustry/world/blocks/production/Pump.java
similarity index 91%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java
rename to core/src/io/anuke/mindustry/world/blocks/production/Pump.java
index af793e06a0..d8e0eb8fd1 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/Pump.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/Pump.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.type.Liquid;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.LiquidBlock;
+import io.anuke.mindustry.world.blocks.LiquidBlock;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Mathf;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Separator.java b/core/src/io/anuke/mindustry/world/blocks/production/Separator.java
similarity index 95%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/Separator.java
rename to core/src/io/anuke/mindustry/world/blocks/production/Separator.java
index 4a4660ec04..c0d33b99b0 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/Separator.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/Separator.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.Color;
import io.anuke.mindustry.entities.TileEntity;
@@ -6,7 +6,7 @@ import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.production.GenericCrafter.GenericCrafterEntity;
+import io.anuke.mindustry.world.blocks.production.GenericCrafter.GenericCrafterEntity;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Lines;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java b/core/src/io/anuke/mindustry/world/blocks/production/Smelter.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java
rename to core/src/io/anuke/mindustry/world/blocks/production/Smelter.java
index 07245f7382..53aa872de8 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/Smelter.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.Color;
import io.anuke.mindustry.entities.TileEntity;
@@ -6,7 +6,7 @@ import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.BarType;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/SolidPump.java b/core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/SolidPump.java
rename to core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java
index ef0c5c5c12..09731079c8 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/SolidPump.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.Array;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/WeaponFactory.java b/core/src/io/anuke/mindustry/world/blocks/production/WeaponFactory.java
similarity index 57%
rename from core/src/io/anuke/mindustry/world/blocks/types/production/WeaponFactory.java
rename to core/src/io/anuke/mindustry/world/blocks/production/WeaponFactory.java
index ff61137f1d..8ff8a2ba1a 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/production/WeaponFactory.java
+++ b/core/src/io/anuke/mindustry/world/blocks/production/WeaponFactory.java
@@ -1,11 +1,19 @@
-package io.anuke.mindustry.world.blocks.types.production;
+package io.anuke.mindustry.world.blocks.production;
-import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.Vars;
+import io.anuke.mindustry.content.fx.Fx;
+import io.anuke.mindustry.entities.TileEntity;
+import io.anuke.mindustry.graphics.Palette;
+import io.anuke.mindustry.graphics.Shaders;
+import io.anuke.mindustry.type.Weapon;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
+import io.anuke.ucore.core.Effects;
+import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
+import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.util.Mathf;
@@ -15,32 +23,67 @@ public class WeaponFactory extends Block{
super(name);
solid = true;
destructible = true;
+ configurable = true;
+ update = true;
}
@Override
public void draw(Tile tile) {
- super.draw(tile);
+ WeaponFactoryEntity entity = tile.entity();
- for(int i : Mathf.signs){
- Draw.color(Color.YELLOW);
- Draw.alpha(0.1f + Mathf.absin(Timers.time(), 12f, 0.2f));
- Draw.rect("white", tile.drawx() + i*3.5f, tile.drawy(), 1, 8);
- Draw.color(Color.ORANGE);
- Draw.alpha(0.5f);
- Draw.rect("white", tile.drawx() + i*3.5f, tile.drawy() + Mathf.sin(Timers.time() + i *77, 13f, 4f), 1, 2);
+ Draw.rect(name, tile.drawx(), tile.drawy());
+
+ Draw.alpha(entity.heat);
+ Draw.rect(name + "-top", tile.drawx(), tile.drawy());
+ Draw.color();
+
+ if(entity.current != null) {
+ TextureRegion region = Draw.region(entity.current.name);
+
+ Shaders.build.region = region;
+ Shaders.build.progress = entity.progress;
+ Shaders.build.color.set(Palette.accent);
+ Shaders.build.time = -entity.time / 10f;
+
+ Graphics.shader(Shaders.build, false);
+ Shaders.build.apply();
+ Draw.rect(region, tile.drawx(), tile.drawy());
+ Graphics.shader();
+
+ Draw.color(Palette.accent);
+
+ Lines.lineAngleCenter(
+ tile.drawx() + Mathf.sin(entity.time, 6f, Vars.tilesize / 3f * size),
+ tile.drawy(),
+ 90,
+ size * Vars.tilesize /2f);
+
+ Draw.reset();
}
-
- Draw.reset();
}
@Override
- public boolean isConfigurable(Tile tile){
- return !Vars.mobile;
+ public void update(Tile tile) {
+ WeaponFactoryEntity entity = tile.entity();
+
+ if(entity.current != null){
+ entity.heat = Mathf.lerpDelta(entity.heat, 1f, 0.1f);
+ entity.time += Timers.delta();
+ entity.progress += 1f / Vars.respawnduration;
+
+ if(entity.progress >= 1f){
+ Effects.effect(Fx.spawn, entity);
+ entity.progress = 0;
+
+ //TODO what now?
+ }
+ }else{
+ entity.heat = Mathf.lerpDelta(entity.heat, 0f, 0.1f);
+ }
}
@Override
public void buildTable(Tile tile, Table table) {
- int i = 0;
Table content = new Table();
@@ -118,4 +161,16 @@ public class WeaponFactory extends Block{
table.add(content).padTop(140f);
}
+
+ @Override
+ public TileEntity getEntity() {
+ return new WeaponFactoryEntity();
+ }
+
+ public class WeaponFactoryEntity extends TileEntity{
+ public Weapon current;
+ public float progress;
+ public float time;
+ public float heat;
+ }
}
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/storage/CoreBlock.java b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/storage/CoreBlock.java
rename to core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java
index 6786a040f4..78f3043281 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/storage/CoreBlock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.storage;
+package io.anuke.mindustry.world.blocks.storage;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Rectangle;
@@ -11,7 +11,7 @@ import io.anuke.mindustry.graphics.Shaders;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemType;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Graphics;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/storage/SortedUnloader.java b/core/src/io/anuke/mindustry/world/blocks/storage/SortedUnloader.java
similarity index 56%
rename from core/src/io/anuke/mindustry/world/blocks/types/storage/SortedUnloader.java
rename to core/src/io/anuke/mindustry/world/blocks/storage/SortedUnloader.java
index 8babd3d103..5c550c9ace 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/storage/SortedUnloader.java
+++ b/core/src/io/anuke/mindustry/world/blocks/storage/SortedUnloader.java
@@ -1,27 +1,26 @@
-package io.anuke.mindustry.world.blocks.types.storage;
+package io.anuke.mindustry.world.blocks.storage;
-import com.badlogic.gdx.graphics.g2d.TextureRegion;
-import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.content.Items;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Tile;
+import io.anuke.mindustry.world.blocks.SelectionTrait;
import io.anuke.ucore.graphics.Draw;
-import io.anuke.ucore.scene.style.TextureRegionDrawable;
-import io.anuke.ucore.scene.ui.ButtonGroup;
-import io.anuke.ucore.scene.ui.ImageButton;
import io.anuke.ucore.scene.ui.layout.Table;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
-public class SortedUnloader extends Unloader {
+public class SortedUnloader extends Unloader implements SelectionTrait{
public SortedUnloader(String name){
super(name);
+ configurable = true;
}
+ //TODO call event
+
@Override
public void update(Tile tile){
SortedUnloaderEntity entity = tile.entity();
@@ -51,49 +50,10 @@ public class SortedUnloader extends Unloader {
Draw.color();
}
- @Override
- public boolean isConfigurable(Tile tile){
- return true;
- }
-
- @Override
- public void configure(Tile tile, byte data) {
- SortedUnloaderEntity entity = tile.entity();
- if(entity != null){
- entity.sortItem = Item.getByID(data);
- entity.items.clear();
- }
- }
-
@Override
public void buildTable(Tile tile, Table table){
SortedUnloaderEntity entity = tile.entity();
-
- Array
- items = Item.all();
-
- ButtonGroup group = new ButtonGroup<>();
- Table cont = new Table();
- cont.margin(4);
- cont.marginBottom(5);
-
- cont.add().colspan(4).height(50f * (int)(items.size/4f + 1f));
- cont.row();
-
- for(int i = 0; i < items.size; i ++){
-
- final int f = i;
- ImageButton button = cont.addImageButton("white", "toggle", 24, () -> {
- setConfigure(tile, (byte)f);
- }).size(38, 42).padBottom(-5.1f).group(group).get();
- button.getStyle().imageUp = new TextureRegionDrawable(new TextureRegion(items.get(i).region));
- button.setChecked(entity.sortItem.id == f);
-
- if(i%4 == 3){
- cont.row();
- }
- }
-
- table.add(cont);
+ buildItemTable(table, () -> entity.sortItem, item -> entity.sortItem = item);
}
@Override
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/storage/StorageBlock.java b/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java
similarity index 95%
rename from core/src/io/anuke/mindustry/world/blocks/types/storage/StorageBlock.java
rename to core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java
index 652d56d542..fd20d72728 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/storage/StorageBlock.java
+++ b/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.storage;
+package io.anuke.mindustry.world.blocks.storage;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Item;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/storage/Unloader.java b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java
similarity index 92%
rename from core/src/io/anuke/mindustry/world/blocks/types/storage/Unloader.java
rename to core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java
index c097dfcefc..3f935e1c1d 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/storage/Unloader.java
+++ b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.world.blocks.types.storage;
+package io.anuke.mindustry.world.blocks.storage;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockGroup;
+import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.mindustry.world.Tile;
public class Unloader extends Block {
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/storage/Vault.java b/core/src/io/anuke/mindustry/world/blocks/storage/Vault.java
similarity index 95%
rename from core/src/io/anuke/mindustry/world/blocks/types/storage/Vault.java
rename to core/src/io/anuke/mindustry/world/blocks/storage/Vault.java
index 4da2b899c3..314f22b0fc 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/storage/Vault.java
+++ b/core/src/io/anuke/mindustry/world/blocks/storage/Vault.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.storage;
+package io.anuke.mindustry.world.blocks.storage;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Tile;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/units/UnloadPoint.java b/core/src/io/anuke/mindustry/world/blocks/types/units/UnloadPoint.java
deleted file mode 100644
index dd5e7c36c4..0000000000
--- a/core/src/io/anuke/mindustry/world/blocks/types/units/UnloadPoint.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package io.anuke.mindustry.world.blocks.types.units;
-
-public class UnloadPoint {
-}
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/units/CommandCenter.java b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java
similarity index 74%
rename from core/src/io/anuke/mindustry/world/blocks/types/units/CommandCenter.java
rename to core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java
index c775787442..830b215b2d 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/units/CommandCenter.java
+++ b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.units;
+package io.anuke.mindustry.world.blocks.units;
import io.anuke.mindustry.world.Block;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/units/DropPoint.java b/core/src/io/anuke/mindustry/world/blocks/units/DropPoint.java
similarity index 91%
rename from core/src/io/anuke/mindustry/world/blocks/types/units/DropPoint.java
rename to core/src/io/anuke/mindustry/world/blocks/units/DropPoint.java
index dc69a79073..1834531712 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/units/DropPoint.java
+++ b/core/src/io/anuke/mindustry/world/blocks/units/DropPoint.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.units;
+package io.anuke.mindustry.world.blocks.units;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Block;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/units/RepairPoint.java b/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/units/RepairPoint.java
rename to core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java
index a3759223eb..4ed94ae4cc 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/units/RepairPoint.java
+++ b/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.units;
+package io.anuke.mindustry.world.blocks.units;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.Rectangle;
@@ -8,7 +8,7 @@ import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/units/ResupplyPoint.java b/core/src/io/anuke/mindustry/world/blocks/units/ResupplyPoint.java
similarity index 98%
rename from core/src/io/anuke/mindustry/world/blocks/types/units/ResupplyPoint.java
rename to core/src/io/anuke/mindustry/world/blocks/units/ResupplyPoint.java
index 575dbd9edf..7c2e6177a7 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/units/ResupplyPoint.java
+++ b/core/src/io/anuke/mindustry/world/blocks/units/ResupplyPoint.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.units;
+package io.anuke.mindustry.world.blocks.units;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
@@ -9,7 +9,7 @@ import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockFlag;
+import io.anuke.mindustry.world.meta.BlockFlag;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
diff --git a/core/src/io/anuke/mindustry/world/blocks/types/units/UnitFactory.java b/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java
similarity index 97%
rename from core/src/io/anuke/mindustry/world/blocks/types/units/UnitFactory.java
rename to core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java
index f738602ebd..3e57e76e95 100644
--- a/core/src/io/anuke/mindustry/world/blocks/types/units/UnitFactory.java
+++ b/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world.blocks.types.units;
+package io.anuke.mindustry.world.blocks.units;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Rectangle;
@@ -14,9 +14,9 @@ import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.world.BarType;
import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.BlockBar;
+import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.types.modules.InventoryModule;
+import io.anuke.mindustry.world.blocks.modules.InventoryModule;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.core.Timers;
diff --git a/core/src/io/anuke/mindustry/world/blocks/units/UnloadPoint.java b/core/src/io/anuke/mindustry/world/blocks/units/UnloadPoint.java
new file mode 100644
index 0000000000..6d2ef8d2d6
--- /dev/null
+++ b/core/src/io/anuke/mindustry/world/blocks/units/UnloadPoint.java
@@ -0,0 +1,4 @@
+package io.anuke.mindustry.world.blocks.units;
+
+public class UnloadPoint {
+}
diff --git a/core/src/io/anuke/mindustry/world/BlockBar.java b/core/src/io/anuke/mindustry/world/meta/BlockBar.java
similarity index 74%
rename from core/src/io/anuke/mindustry/world/BlockBar.java
rename to core/src/io/anuke/mindustry/world/meta/BlockBar.java
index 8ece33dc40..d322dffa5f 100644
--- a/core/src/io/anuke/mindustry/world/BlockBar.java
+++ b/core/src/io/anuke/mindustry/world/meta/BlockBar.java
@@ -1,4 +1,7 @@
-package io.anuke.mindustry.world;
+package io.anuke.mindustry.world.meta;
+
+import io.anuke.mindustry.world.BarType;
+import io.anuke.mindustry.world.Tile;
public class BlockBar {
public final ValueSupplier value;
diff --git a/core/src/io/anuke/mindustry/world/BlockBars.java b/core/src/io/anuke/mindustry/world/meta/BlockBars.java
similarity index 91%
rename from core/src/io/anuke/mindustry/world/BlockBars.java
rename to core/src/io/anuke/mindustry/world/meta/BlockBars.java
index c68807b386..6b02067976 100644
--- a/core/src/io/anuke/mindustry/world/BlockBars.java
+++ b/core/src/io/anuke/mindustry/world/meta/BlockBars.java
@@ -1,6 +1,7 @@
-package io.anuke.mindustry.world;
+package io.anuke.mindustry.world.meta;
import com.badlogic.gdx.utils.Array;
+import io.anuke.mindustry.world.BarType;
public class BlockBars {
private Array list = Array.with(new BlockBar(BarType.health, false, tile -> tile.entity.health / (float)tile.block().health));
diff --git a/core/src/io/anuke/mindustry/world/BlockFlag.java b/core/src/io/anuke/mindustry/world/meta/BlockFlag.java
similarity index 93%
rename from core/src/io/anuke/mindustry/world/BlockFlag.java
rename to core/src/io/anuke/mindustry/world/meta/BlockFlag.java
index e1818264a4..9fb0025c0c 100644
--- a/core/src/io/anuke/mindustry/world/BlockFlag.java
+++ b/core/src/io/anuke/mindustry/world/meta/BlockFlag.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world;
+package io.anuke.mindustry.world.meta;
public enum BlockFlag {
/**General important target for all types of units.*/
diff --git a/core/src/io/anuke/mindustry/world/BlockGroup.java b/core/src/io/anuke/mindustry/world/meta/BlockGroup.java
similarity index 70%
rename from core/src/io/anuke/mindustry/world/BlockGroup.java
rename to core/src/io/anuke/mindustry/world/meta/BlockGroup.java
index 1990b85032..e9795a956a 100644
--- a/core/src/io/anuke/mindustry/world/BlockGroup.java
+++ b/core/src/io/anuke/mindustry/world/meta/BlockGroup.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world;
+package io.anuke.mindustry.world.meta;
public enum BlockGroup {
none, walls, turrets, transportation, power, liquids, drills
diff --git a/core/src/io/anuke/mindustry/world/BlockStats.java b/core/src/io/anuke/mindustry/world/meta/BlockStats.java
similarity index 89%
rename from core/src/io/anuke/mindustry/world/BlockStats.java
rename to core/src/io/anuke/mindustry/world/meta/BlockStats.java
index eeacc48c5e..0b1da0ece1 100644
--- a/core/src/io/anuke/mindustry/world/BlockStats.java
+++ b/core/src/io/anuke/mindustry/world/meta/BlockStats.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.world;
+package io.anuke.mindustry.world.meta;
import com.badlogic.gdx.utils.OrderedMap;
import io.anuke.ucore.util.Bundles;
@@ -13,7 +13,7 @@ public class BlockStats {
}
public void remove(String label){
- Object o = map.remove(label) != null;
+ Object o = map.remove(label);
if(o == null) throw new RuntimeException("No label entry found with name \"" + label + "\"!");
}