Moved many block files; work on annotation processor
@@ -6,7 +6,7 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Goal: To create a system to send events to the server from the client and vice versa.<br>
|
* 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.<br>
|
||||||
* These events may optionally also trigger on the caller client/server as well.<br>
|
* These events may optionally also trigger on the caller client/server as well.<br>
|
||||||
*<br>
|
*<br>
|
||||||
* Three annotations are used for this purpose.<br>
|
* Three annotations are used for this purpose.<br>
|
||||||
@@ -22,7 +22,12 @@ public class Annotations {
|
|||||||
/**Marks a method as invokable remotely from a server on a client.*/
|
/**Marks a method as invokable remotely from a server on a client.*/
|
||||||
@Target(ElementType.METHOD)
|
@Target(ElementType.METHOD)
|
||||||
@Retention(RetentionPolicy.CLASS)
|
@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.
|
/**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.
|
* All RemoteServer methods must have their first formal parameter be of type Player.
|
||||||
@@ -42,4 +47,30 @@ public class Annotations {
|
|||||||
@Target(ElementType.METHOD)
|
@Target(ElementType.METHOD)
|
||||||
@Retention(RetentionPolicy.CLASS)
|
@Retention(RetentionPolicy.CLASS)
|
||||||
public @interface Unreliable{}
|
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()}.<br>
|
||||||
|
* 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()}. <br>
|
||||||
|
* 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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
15
annotations/src/io/anuke/annotations/ClassEntry.java
Normal file
@@ -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<MethodEntry> methods = new ArrayList<>();
|
||||||
|
/**Simple class name.*/
|
||||||
|
public final String name;
|
||||||
|
|
||||||
|
public ClassEntry(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
72
annotations/src/io/anuke/annotations/IOFinder.java
Normal file
@@ -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<String, ClassSerializer> findSerializers(RoundEnvironment env){
|
||||||
|
HashMap<String, ClassSerializer> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
23
annotations/src/io/anuke/annotations/MethodEntry.java
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import io.anuke.annotations.Annotations.Local;
|
|||||||
import io.anuke.annotations.Annotations.RemoteClient;
|
import io.anuke.annotations.Annotations.RemoteClient;
|
||||||
import io.anuke.annotations.Annotations.RemoteServer;
|
import io.anuke.annotations.Annotations.RemoteServer;
|
||||||
import io.anuke.annotations.Annotations.Unreliable;
|
import io.anuke.annotations.Annotations.Unreliable;
|
||||||
|
import io.anuke.annotations.IOFinder.ClassSerializer;
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
import javax.annotation.processing.*;
|
||||||
import javax.lang.model.SourceVersion;
|
import javax.lang.model.SourceVersion;
|
||||||
@@ -34,60 +35,30 @@ import java.util.Set;
|
|||||||
"io.anuke.annotations.Annotations.RemoteClient",
|
"io.anuke.annotations.Annotations.RemoteClient",
|
||||||
"io.anuke.annotations.Annotations.RemoteServer",
|
"io.anuke.annotations.Annotations.RemoteServer",
|
||||||
"io.anuke.annotations.Annotations.Local",
|
"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 {
|
public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
|
||||||
private static final int maxPacketSize = 128;
|
/**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";
|
/**Maps fully qualified class names to serializers.*/
|
||||||
private static final String serverFullClassName = "io.anuke.mindustry.gen.CallServer";
|
private HashMap<String, ClassSerializer> serializers;
|
||||||
|
/**Whether the initial round is done.*/
|
||||||
private static final HashMap<String, String[][]> writeMap = new HashMap<String, String[][]>(){{
|
|
||||||
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;
|
|
||||||
private boolean done;
|
private boolean done;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void init(ProcessingEnvironment processingEnv) {
|
public synchronized void init(ProcessingEnvironment processingEnv) {
|
||||||
super.init(processingEnv);
|
super.init(processingEnv);
|
||||||
typeUtils = processingEnv.getTypeUtils();
|
//put all relevant utils into utils class
|
||||||
elementUtils = processingEnv.getElementUtils();
|
Utils.typeUtils = processingEnv.getTypeUtils();
|
||||||
filer = processingEnv.getFiler();
|
Utils.elementUtils = processingEnv.getElementUtils();
|
||||||
messager = processingEnv.getMessager();
|
Utils.filer = processingEnv.getFiler();
|
||||||
|
Utils.messager = processingEnv.getMessager();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -95,13 +66,15 @@ public class AnnotationProcessor extends AbstractProcessor {
|
|||||||
if(done) return false;
|
if(done) return false;
|
||||||
done = true;
|
done = true;
|
||||||
|
|
||||||
|
serializers = new IOFinder().findSerializers(roundEnv);
|
||||||
|
|
||||||
writeElements(roundEnv, clientFullClassName, RemoteClient.class);
|
writeElements(roundEnv, clientFullClassName, RemoteClient.class);
|
||||||
writeElements(roundEnv, serverFullClassName, RemoteServer.class);
|
writeElements(roundEnv, serverFullClassName, RemoteServer.class);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeElements(RoundEnvironment env, String fullClassName, Class<? extends Annotation> annotation){
|
private void writeElements(RoundEnvironment env){
|
||||||
try {
|
try {
|
||||||
boolean client = annotation == RemoteServer.class;
|
boolean client = annotation == RemoteServer.class;
|
||||||
String className = fullClassName.substring(1 + fullClassName.lastIndexOf('.'));
|
String className = fullClassName.substring(1 + fullClassName.lastIndexOf('.'));
|
||||||
@@ -279,15 +252,14 @@ public class AnnotationProcessor extends AbstractProcessor {
|
|||||||
TypeSpec spec = classBuilder.build();
|
TypeSpec spec = classBuilder.build();
|
||||||
|
|
||||||
JavaFile.builder(packageName, spec).build().writeTo(filer);
|
JavaFile.builder(packageName, spec).build().writeTo(filer);
|
||||||
|
|
||||||
|
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
throw new RuntimeException(e);
|
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");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.annotations;
|
|
||||||
|
|
||||||
public class Serializers {
|
|
||||||
}
|
|
||||||
18
annotations/src/io/anuke/annotations/Utils.java
Normal file
@@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -149,7 +149,7 @@ project(":core") {
|
|||||||
apply plugin: "java"
|
apply plugin: "java"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
//compileOnly project(":annotations")
|
compileOnly project(":annotations")
|
||||||
|
|
||||||
boolean comp = System.properties["release"] == null || System.properties["release"] == "false"
|
boolean comp = System.properties["release"] == null || System.properties["release"] == "false"
|
||||||
|
|
||||||
@@ -174,9 +174,9 @@ project(":core") {
|
|||||||
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
|
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
|
||||||
}
|
}
|
||||||
|
|
||||||
//compileJava.options.compilerArgs = [
|
compileJava.options.compilerArgs = [
|
||||||
// "-processor", "io.anuke.annotations.AnnotationProcessor"
|
"-processor", "io.anuke.annotations.RemoteMethodAnnotationProcessor"
|
||||||
//]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
project(":server") {
|
project(":server") {
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 411 B |
BIN
core/assets-raw/sprites/blocks/production/weaponfactory.png
Normal file
|
After Width: | Height: | Size: 381 B |
|
Before Width: | Height: | Size: 602 B After Width: | Height: | Size: 602 B |
|
Before Width: | Height: | Size: 580 B After Width: | Height: | Size: 580 B |
|
Before Width: | Height: | Size: 575 B After Width: | Height: | Size: 575 B |
|
Before Width: | Height: | Size: 276 B After Width: | Height: | Size: 276 B |
|
Before Width: | Height: | Size: 267 B After Width: | Height: | Size: 267 B |
|
Before Width: | Height: | Size: 582 B After Width: | Height: | Size: 582 B |
@@ -109,27 +109,6 @@ conveyortunnel
|
|||||||
orig: 8, 8
|
orig: 8, 8
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
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
|
junction
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 221, 24
|
xy: 221, 24
|
||||||
@@ -298,13 +277,6 @@ router
|
|||||||
orig: 8, 8
|
orig: 8, 8
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
index: -1
|
||||||
sortedunloader
|
|
||||||
rotate: false
|
|
||||||
xy: 435, 95
|
|
||||||
size: 8, 8
|
|
||||||
orig: 8, 8
|
|
||||||
offset: 0, 0
|
|
||||||
index: -1
|
|
||||||
sorter
|
sorter
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 445, 96
|
xy: 445, 96
|
||||||
@@ -340,27 +312,6 @@ teleporter-top
|
|||||||
orig: 24, 24
|
orig: 24, 24
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
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
|
blackrock1
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 183, 100
|
xy: 183, 100
|
||||||
@@ -1866,6 +1817,55 @@ waterextractor-top
|
|||||||
orig: 16, 16
|
orig: 16, 16
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
index: -1
|
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
|
block-1
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 189, 54
|
xy: 189, 54
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
@@ -18,6 +18,6 @@
|
|||||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.Bullet" />
|
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.Bullet" />
|
||||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.type.Recipe" />
|
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.type.Recipe" />
|
||||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Streamable" />
|
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Streamable" />
|
||||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.BlockBar" />
|
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.meta.BlockBar" />
|
||||||
<extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.utils.Predicate" />
|
<extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.utils.Predicate" />
|
||||||
</module>
|
</module>
|
||||||
@@ -8,7 +8,7 @@ import io.anuke.mindustry.game.EventType.TileChangeEvent;
|
|||||||
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
|
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.type.Item;
|
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.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.core.Events;
|
import io.anuke.ucore.core.Events;
|
||||||
import io.anuke.ucore.util.EnumSet;
|
import io.anuke.ucore.util.EnumSet;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import io.anuke.mindustry.game.EventType.TileChangeEvent;
|
|||||||
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
|
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.game.TeamInfo.TeamData;
|
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.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.core.Events;
|
import io.anuke.ucore.core.Events;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import io.anuke.mindustry.type.ContentList;
|
|||||||
import io.anuke.mindustry.type.ItemStack;
|
import io.anuke.mindustry.type.ItemStack;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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 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;
|
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;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import io.anuke.mindustry.type.ContentList;
|
|||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.mindustry.type.ItemStack;
|
import io.anuke.mindustry.type.ItemStack;
|
||||||
import io.anuke.mindustry.world.Block;
|
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 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;
|
public static Block smelter, alloysmelter, siliconsmelter, poweralloysmelter, powersmelter, cryofluidmixer, melter, separator, centrifuge, plasticFormer, biomatterCompressor, pulverizer, oilRefinery, stoneFormer, weaponFactory, incinerator;
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ import io.anuke.mindustry.type.Item;
|
|||||||
import io.anuke.mindustry.type.Liquid;
|
import io.anuke.mindustry.type.Liquid;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.PowerBlock;
|
import io.anuke.mindustry.world.blocks.PowerBlock;
|
||||||
import io.anuke.mindustry.world.blocks.types.distribution.Sorter;
|
import io.anuke.mindustry.world.blocks.distribution.Sorter;
|
||||||
import io.anuke.mindustry.world.blocks.types.power.PowerDistributor;
|
import io.anuke.mindustry.world.blocks.power.PowerDistributor;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.scene.ui.ButtonGroup;
|
import io.anuke.ucore.scene.ui.ButtonGroup;
|
||||||
import io.anuke.ucore.scene.ui.ImageButton;
|
import io.anuke.ucore.scene.ui.ImageButton;
|
||||||
@@ -64,11 +64,7 @@ public class DebugBlocks extends BlockList implements ContentList{
|
|||||||
solid = true;
|
solid = true;
|
||||||
hasLiquids = true;
|
hasLiquids = true;
|
||||||
liquidCapacity = 100f;
|
liquidCapacity = 100f;
|
||||||
}
|
configurable = true;
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isConfigurable(Tile tile) {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package io.anuke.mindustry.content.blocks;
|
|||||||
import io.anuke.mindustry.content.fx.BlockFx;
|
import io.anuke.mindustry.content.fx.BlockFx;
|
||||||
import io.anuke.mindustry.type.ContentList;
|
import io.anuke.mindustry.type.ContentList;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.blocks.types.Wall;
|
import io.anuke.mindustry.world.blocks.Wall;
|
||||||
import io.anuke.mindustry.world.blocks.types.defense.Door;
|
import io.anuke.mindustry.world.blocks.defense.Door;
|
||||||
import io.anuke.mindustry.world.blocks.types.defense.ShieldedWallBlock;
|
import io.anuke.mindustry.world.blocks.defense.ShieldedWallBlock;
|
||||||
|
|
||||||
public class DefenseBlocks extends BlockList implements ContentList {
|
public class DefenseBlocks extends BlockList implements ContentList {
|
||||||
public static Block stonewall, ironwall, steelwall, titaniumwall, diriumwall, compositewall, steelwalllarge, titaniumwalllarge, diriumwalllarge, titaniumshieldwall, door, largedoor;
|
public static Block stonewall, ironwall, steelwall, titaniumwall, diriumwall, compositewall, steelwalllarge, titaniumwalllarge, diriumwalllarge, titaniumshieldwall, door, largedoor;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package io.anuke.mindustry.content.blocks;
|
|||||||
|
|
||||||
import io.anuke.mindustry.type.ContentList;
|
import io.anuke.mindustry.type.ContentList;
|
||||||
import io.anuke.mindustry.world.Block;
|
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 class DistributionBlocks extends BlockList implements ContentList{
|
||||||
public static Block conveyor, steelconveyor, pulseconveyor, router, multiplexer, junction, bridgeconveyor, laserconveyor, sorter, splitter, overflowgate;
|
public static Block conveyor, steelconveyor, pulseconveyor, router, multiplexer, junction, bridgeconveyor, laserconveyor, sorter, splitter, overflowgate;
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package io.anuke.mindustry.content.blocks;
|
|||||||
|
|
||||||
import io.anuke.mindustry.type.ContentList;
|
import io.anuke.mindustry.type.ContentList;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.blocks.types.distribution.*;
|
import io.anuke.mindustry.world.blocks.distribution.*;
|
||||||
import io.anuke.mindustry.world.blocks.types.production.Pump;
|
import io.anuke.mindustry.world.blocks.production.Pump;
|
||||||
|
|
||||||
public class LiquidBlocks extends BlockList implements ContentList{
|
public class LiquidBlocks extends BlockList implements ContentList{
|
||||||
public static Block pump, fluxpump, conduit, pulseconduit, liquidrouter, liquidtank, liquidjunction, bridgeconduit, laserconduit;
|
public static Block pump, fluxpump, conduit, pulseconduit, liquidrouter, liquidtank, liquidjunction, bridgeconduit, laserconduit;
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ package io.anuke.mindustry.content.blocks;
|
|||||||
import io.anuke.mindustry.content.fx.BlockFx;
|
import io.anuke.mindustry.content.fx.BlockFx;
|
||||||
import io.anuke.mindustry.type.ContentList;
|
import io.anuke.mindustry.type.ContentList;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.blocks.types.defense.RepairTurret;
|
import io.anuke.mindustry.world.blocks.defense.RepairTurret;
|
||||||
import io.anuke.mindustry.world.blocks.types.defense.ShieldBlock;
|
import io.anuke.mindustry.world.blocks.defense.ShieldBlock;
|
||||||
import io.anuke.mindustry.world.blocks.types.distribution.Teleporter;
|
import io.anuke.mindustry.world.blocks.distribution.Teleporter;
|
||||||
import io.anuke.mindustry.world.blocks.types.power.*;
|
import io.anuke.mindustry.world.blocks.power.*;
|
||||||
|
|
||||||
public class PowerBlocks extends BlockList implements ContentList {
|
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;
|
public static Block combustiongenerator, thermalgenerator, liquidcombustiongenerator, rtgenerator, solarpanel, largesolarpanel, nuclearReactor, fusionReactor, repairturret, megarepairturret, shieldgenerator, battery, batteryLarge, powernode, powernodelarge, teleporter;
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ import io.anuke.mindustry.content.Liquids;
|
|||||||
import io.anuke.mindustry.content.fx.BlockFx;
|
import io.anuke.mindustry.content.fx.BlockFx;
|
||||||
import io.anuke.mindustry.type.ContentList;
|
import io.anuke.mindustry.type.ContentList;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.blocks.types.production.Cultivator;
|
import io.anuke.mindustry.world.blocks.production.Cultivator;
|
||||||
import io.anuke.mindustry.world.blocks.types.production.Drill;
|
import io.anuke.mindustry.world.blocks.production.Drill;
|
||||||
import io.anuke.mindustry.world.blocks.types.production.Fracker;
|
import io.anuke.mindustry.world.blocks.production.Fracker;
|
||||||
import io.anuke.mindustry.world.blocks.types.production.SolidPump;
|
import io.anuke.mindustry.world.blocks.production.SolidPump;
|
||||||
|
|
||||||
public class ProductionBlocks extends BlockList implements ContentList {
|
public class ProductionBlocks extends BlockList implements ContentList {
|
||||||
public static Block ironDrill, reinforcedDrill, steelDrill, titaniumDrill, laserdrill, nucleardrill, plasmadrill, waterextractor, oilextractor, cultivator;
|
public static Block ironDrill, reinforcedDrill, steelDrill, titaniumDrill, laserdrill, nucleardrill, plasmadrill, waterextractor, oilextractor, cultivator;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package io.anuke.mindustry.content.blocks;
|
|||||||
|
|
||||||
import io.anuke.mindustry.type.ContentList;
|
import io.anuke.mindustry.type.ContentList;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.blocks.types.storage.CoreBlock;
|
import io.anuke.mindustry.world.blocks.storage.CoreBlock;
|
||||||
import io.anuke.mindustry.world.blocks.types.storage.SortedUnloader;
|
import io.anuke.mindustry.world.blocks.storage.SortedUnloader;
|
||||||
import io.anuke.mindustry.world.blocks.types.storage.Unloader;
|
import io.anuke.mindustry.world.blocks.storage.Unloader;
|
||||||
import io.anuke.mindustry.world.blocks.types.storage.Vault;
|
import io.anuke.mindustry.world.blocks.storage.Vault;
|
||||||
|
|
||||||
public class StorageBlocks extends BlockList implements ContentList {
|
public class StorageBlocks extends BlockList implements ContentList {
|
||||||
public static Block core, vault, unloader, sortedunloader;
|
public static Block core, vault, unloader, sortedunloader;
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ import io.anuke.mindustry.content.UnitTypes;
|
|||||||
import io.anuke.mindustry.type.ContentList;
|
import io.anuke.mindustry.type.ContentList;
|
||||||
import io.anuke.mindustry.type.ItemStack;
|
import io.anuke.mindustry.type.ItemStack;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.blocks.types.units.DropPoint;
|
import io.anuke.mindustry.world.blocks.units.DropPoint;
|
||||||
import io.anuke.mindustry.world.blocks.types.units.RepairPoint;
|
import io.anuke.mindustry.world.blocks.units.RepairPoint;
|
||||||
import io.anuke.mindustry.world.blocks.types.units.ResupplyPoint;
|
import io.anuke.mindustry.world.blocks.units.ResupplyPoint;
|
||||||
import io.anuke.mindustry.world.blocks.types.units.UnitFactory;
|
import io.anuke.mindustry.world.blocks.units.UnitFactory;
|
||||||
|
|
||||||
public class UnitBlocks extends BlockList implements ContentList {
|
public class UnitBlocks extends BlockList implements ContentList {
|
||||||
public static Block resupplyPoint, repairPoint, droneFactory, dropPoint;
|
public static Block resupplyPoint, repairPoint, droneFactory, dropPoint;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import io.anuke.mindustry.content.fx.ShootFx;
|
|||||||
import io.anuke.mindustry.type.AmmoType;
|
import io.anuke.mindustry.type.AmmoType;
|
||||||
import io.anuke.mindustry.type.ContentList;
|
import io.anuke.mindustry.type.ContentList;
|
||||||
import io.anuke.mindustry.world.Block;
|
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.graphics.Draw;
|
||||||
import io.anuke.ucore.util.Angles;
|
import io.anuke.ucore.util.Angles;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|||||||
@@ -81,8 +81,8 @@ public class Logic extends Module {
|
|||||||
|
|
||||||
public void runWave(){
|
public void runWave(){
|
||||||
|
|
||||||
//TODO spawn enemies
|
//TODO spawn enemies properly
|
||||||
for(int i = 0; i < 100; i ++){
|
for(int i = 0; i < 10; i ++){
|
||||||
BaseUnit unit = UnitTypes.vtol.create(Team.red);
|
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);
|
Vector2 offset = new Vector2().setToRandomDirection().scl(world.width()/2f*tilesize).add(world.width()/2f*tilesize, world.height()/2f*tilesize);
|
||||||
unit.inventory.addAmmo(AmmoTypes.bulletIron);
|
unit.inventory.addAmmo(AmmoTypes.bulletIron);
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import io.anuke.mindustry.entities.traits.BelowLiquidTrait;
|
|||||||
import io.anuke.mindustry.entities.units.BaseUnit;
|
import io.anuke.mindustry.entities.units.BaseUnit;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.graphics.*;
|
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.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.core.Core;
|
import io.anuke.ucore.core.Core;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import com.badlogic.gdx.utils.IntSet;
|
|||||||
import io.anuke.mindustry.io.MapTileData.DataPosition;
|
import io.anuke.mindustry.io.MapTileData.DataPosition;
|
||||||
import io.anuke.mindustry.io.MapTileData.TileDataMarker;
|
import io.anuke.mindustry.io.MapTileData.TileDataMarker;
|
||||||
import io.anuke.mindustry.world.Block;
|
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.Bits;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.ui;
|
import static io.anuke.mindustry.Vars.ui;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import io.anuke.mindustry.io.MapTileData;
|
|||||||
import io.anuke.mindustry.io.MapTileData.DataPosition;
|
import io.anuke.mindustry.io.MapTileData.DataPosition;
|
||||||
import io.anuke.mindustry.io.MapTileData.TileDataMarker;
|
import io.anuke.mindustry.io.MapTileData.TileDataMarker;
|
||||||
import io.anuke.mindustry.world.Block;
|
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.Bits;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import io.anuke.mindustry.world.Block;
|
|||||||
import io.anuke.mindustry.world.ColorMapper;
|
import io.anuke.mindustry.world.ColorMapper;
|
||||||
import io.anuke.mindustry.world.ColorMapper.BlockPair;
|
import io.anuke.mindustry.world.ColorMapper.BlockPair;
|
||||||
import io.anuke.mindustry.content.blocks.Blocks;
|
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.graphics.Pixmaps;
|
||||||
import io.anuke.ucore.noise.RidgedPerlin;
|
import io.anuke.ucore.noise.RidgedPerlin;
|
||||||
import io.anuke.ucore.noise.Simplex;
|
import io.anuke.ucore.noise.Simplex;
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ import io.anuke.mindustry.graphics.Palette;
|
|||||||
import io.anuke.mindustry.graphics.Trail;
|
import io.anuke.mindustry.graphics.Trail;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.Floor;
|
import io.anuke.mindustry.world.blocks.Floor;
|
||||||
import io.anuke.mindustry.world.blocks.types.storage.CoreBlock.CoreEntity;
|
import io.anuke.mindustry.world.blocks.storage.CoreBlock.CoreEntity;
|
||||||
import io.anuke.ucore.core.*;
|
import io.anuke.ucore.core.*;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.trait.SolidTrait;
|
import io.anuke.ucore.entities.trait.SolidTrait;
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ import io.anuke.mindustry.entities.traits.TargetTrait;
|
|||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.Wall;
|
import io.anuke.mindustry.world.blocks.Wall;
|
||||||
import io.anuke.mindustry.world.blocks.types.modules.InventoryModule;
|
import io.anuke.mindustry.world.blocks.modules.InventoryModule;
|
||||||
import io.anuke.mindustry.world.blocks.types.modules.LiquidModule;
|
import io.anuke.mindustry.world.blocks.modules.LiquidModule;
|
||||||
import io.anuke.mindustry.world.blocks.types.modules.PowerModule;
|
import io.anuke.mindustry.world.blocks.modules.PowerModule;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import io.anuke.mindustry.net.Interpolator;
|
|||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.mindustry.type.StatusEffect;
|
import io.anuke.mindustry.type.StatusEffect;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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.Effects;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.entities.impl.DestructibleEntity;
|
import io.anuke.ucore.entities.impl.DestructibleEntity;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package io.anuke.mindustry.entities.effect;
|
|||||||
|
|
||||||
import com.badlogic.gdx.math.Interpolation;
|
import com.badlogic.gdx.math.Interpolation;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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.core.Timers;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.impl.BaseEntity;
|
import io.anuke.ucore.entities.impl.BaseEntity;
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ import io.anuke.mindustry.type.Item;
|
|||||||
import io.anuke.mindustry.type.Recipe;
|
import io.anuke.mindustry.type.Recipe;
|
||||||
import io.anuke.mindustry.world.Build;
|
import io.anuke.mindustry.world.Build;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.BuildBlock;
|
import io.anuke.mindustry.world.blocks.BuildBlock;
|
||||||
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.core.Effects;
|
||||||
import io.anuke.ucore.core.Events;
|
import io.anuke.ucore.core.Events;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import io.anuke.mindustry.game.Team;
|
|||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.net.Net;
|
||||||
import io.anuke.mindustry.type.AmmoType;
|
import io.anuke.mindustry.type.AmmoType;
|
||||||
import io.anuke.mindustry.type.Item;
|
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.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.core.Effects.Effect;
|
import io.anuke.ucore.core.Effects.Effect;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import io.anuke.mindustry.game.Team;
|
|||||||
import io.anuke.mindustry.graphics.Palette;
|
import io.anuke.mindustry.graphics.Palette;
|
||||||
import io.anuke.mindustry.graphics.Trail;
|
import io.anuke.mindustry.graphics.Trail;
|
||||||
import io.anuke.mindustry.type.AmmoType;
|
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.Tile;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ import io.anuke.mindustry.Vars;
|
|||||||
import io.anuke.mindustry.entities.Units;
|
import io.anuke.mindustry.entities.Units;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.type.AmmoType;
|
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.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.core.Timers;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.util.*;
|
import io.anuke.ucore.util.*;
|
||||||
|
|||||||
@@ -13,10 +13,10 @@ import io.anuke.mindustry.entities.units.UnitType;
|
|||||||
import io.anuke.mindustry.game.EventType.BlockBuildEvent;
|
import io.anuke.mindustry.game.EventType.BlockBuildEvent;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.graphics.Palette;
|
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.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.BuildBlock;
|
import io.anuke.mindustry.world.blocks.BuildBlock;
|
||||||
import io.anuke.mindustry.world.blocks.types.BuildBlock.BuildEntity;
|
import io.anuke.mindustry.world.blocks.BuildBlock.BuildEntity;
|
||||||
import io.anuke.ucore.core.Events;
|
import io.anuke.ucore.core.Events;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package io.anuke.mindustry.entities.units.types;
|
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.FlyingUnit;
|
||||||
import io.anuke.mindustry.entities.units.UnitType;
|
import io.anuke.mindustry.entities.units.UnitType;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
@@ -9,10 +8,6 @@ import io.anuke.ucore.graphics.Draw;
|
|||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|
||||||
public class Vtol extends FlyingUnit {
|
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) {
|
public Vtol(UnitType type, Team team) {
|
||||||
super(type, team);
|
super(type, team);
|
||||||
@@ -22,10 +17,11 @@ public class Vtol extends FlyingUnit {
|
|||||||
public void draw() {
|
public void draw() {
|
||||||
Draw.alpha(hitTime / hitDuration);
|
Draw.alpha(hitTime / hitDuration);
|
||||||
|
|
||||||
Draw.rect(region, x, y, rotation - 90);
|
Draw.rect("vtol", x, y, rotation - 90);
|
||||||
|
|
||||||
for(int i : Mathf.signs){
|
for(int i : Mathf.signs){
|
||||||
Draw.rect(booster1, x, y, 12*i, 12, rotation - 90);
|
Draw.rect("vtol-booster-1", x, y, 12*i, 12, rotation - 90);
|
||||||
Draw.rect(booster2, x, y, 12*i, 12, rotation - 90);
|
Draw.rect("vtol-booster-2", x, y, 12*i, 12, rotation - 90);
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.alpha(1f);
|
Draw.alpha(1f);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import io.anuke.mindustry.content.blocks.Blocks;
|
|||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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.core.Graphics;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import io.anuke.mindustry.entities.Player;
|
|||||||
import io.anuke.mindustry.entities.Unit;
|
import io.anuke.mindustry.entities.Unit;
|
||||||
import io.anuke.mindustry.game.TeamInfo.TeamData;
|
import io.anuke.mindustry.game.TeamInfo.TeamData;
|
||||||
import io.anuke.mindustry.input.InputHandler;
|
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.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.core.Graphics;
|
import io.anuke.ucore.core.Graphics;
|
||||||
import io.anuke.ucore.core.Inputs;
|
import io.anuke.ucore.core.Inputs;
|
||||||
|
|||||||
23
core/src/io/anuke/mindustry/input/CursorType.java
Normal file
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,15 +16,13 @@ import io.anuke.ucore.core.Inputs;
|
|||||||
import io.anuke.ucore.core.Inputs.DeviceType;
|
import io.anuke.ucore.core.Inputs.DeviceType;
|
||||||
import io.anuke.ucore.core.KeyBinds;
|
import io.anuke.ucore.core.KeyBinds;
|
||||||
import io.anuke.ucore.core.Settings;
|
import io.anuke.ucore.core.Settings;
|
||||||
import io.anuke.ucore.function.Callable;
|
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.graphics.Lines;
|
import io.anuke.ucore.graphics.Lines;
|
||||||
import io.anuke.ucore.scene.ui.layout.Unit;
|
import io.anuke.ucore.scene.ui.layout.Unit;
|
||||||
import io.anuke.ucore.scene.utils.Cursors;
|
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
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.*;
|
import static io.anuke.mindustry.input.PlaceMode.*;
|
||||||
|
|
||||||
public class DesktopInput extends InputHandler{
|
public class DesktopInput extends InputHandler{
|
||||||
@@ -154,9 +152,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
if(cursor != null){
|
if(cursor != null){
|
||||||
cursor = cursor.target();
|
cursor = cursor.target();
|
||||||
|
|
||||||
if(cursor.block().isCursor(cursor)) {
|
cursorType = cursor.block().getCursor(cursor);
|
||||||
cursorType = hand;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(canMine(cursor)){
|
if(canMine(cursor)){
|
||||||
cursorType = drill;
|
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public abstract class InputHandler extends InputAdapter{
|
|||||||
boolean showedInventory = false;
|
boolean showedInventory = false;
|
||||||
|
|
||||||
//check if tapped block is configurable
|
//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;
|
consumed = true;
|
||||||
if((!frag.config.isShown() //if the config fragment is hidden, show
|
if((!frag.config.isShown() //if the config fragment is hidden, show
|
||||||
//alternatively, the current selected block can 'agree' to switch config tiles
|
//alternatively, the current selected block can 'agree' to switch config tiles
|
||||||
|
|||||||
50
core/src/io/anuke/mindustry/io/TypeIO.java
Normal file
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,7 +11,7 @@ import io.anuke.mindustry.game.Team;
|
|||||||
import io.anuke.mindustry.io.SaveFileVersion;
|
import io.anuke.mindustry.io.SaveFileVersion;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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.Entities;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.EntityPhysics;
|
import io.anuke.ucore.entities.EntityPhysics;
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ import com.badlogic.gdx.utils.ObjectMap;
|
|||||||
import com.badlogic.gdx.utils.TimeUtils;
|
import com.badlogic.gdx.utils.TimeUtils;
|
||||||
import io.anuke.mindustry.entities.Player;
|
import io.anuke.mindustry.entities.Player;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.blocks.types.BlockPart;
|
import io.anuke.mindustry.world.blocks.BlockPart;
|
||||||
import io.anuke.mindustry.world.blocks.types.Floor;
|
import io.anuke.mindustry.world.blocks.Floor;
|
||||||
import io.anuke.mindustry.world.blocks.types.Rock;
|
import io.anuke.mindustry.world.blocks.Rock;
|
||||||
import io.anuke.mindustry.world.blocks.types.StaticBlock;
|
import io.anuke.mindustry.world.blocks.StaticBlock;
|
||||||
import io.anuke.ucore.core.Settings;
|
import io.anuke.ucore.core.Settings;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.world;
|
import static io.anuke.mindustry.Vars.world;
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ public class Interpolator {
|
|||||||
public Vector2 pos = new Vector2();
|
public Vector2 pos = new Vector2();
|
||||||
public float[] values = {};
|
public float[] values = {};
|
||||||
|
|
||||||
public Vector2 smoothPos = new Vector2();
|
|
||||||
|
|
||||||
public void read(float cx, float cy, float x, float y, long sent, float... target1ds){
|
public void read(float cx, float cy, float x, float y, long sent, float... target1ds){
|
||||||
targets = target1ds;
|
targets = target1ds;
|
||||||
time = 0f;
|
time = 0f;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import io.anuke.mindustry.game.Team;
|
|||||||
import io.anuke.mindustry.io.Version;
|
import io.anuke.mindustry.io.Version;
|
||||||
import io.anuke.mindustry.type.Upgrade;
|
import io.anuke.mindustry.type.Upgrade;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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.core.Timers;
|
||||||
import io.anuke.ucore.entities.Entities;
|
import io.anuke.ucore.entities.Entities;
|
||||||
import io.anuke.ucore.util.Bits;
|
import io.anuke.ucore.util.Bits;
|
||||||
|
|||||||
@@ -17,9 +17,15 @@ import io.anuke.mindustry.game.UnlockableContent;
|
|||||||
import io.anuke.mindustry.graphics.CacheLayer;
|
import io.anuke.mindustry.graphics.CacheLayer;
|
||||||
import io.anuke.mindustry.graphics.Layer;
|
import io.anuke.mindustry.graphics.Layer;
|
||||||
import io.anuke.mindustry.graphics.Palette;
|
import io.anuke.mindustry.graphics.Palette;
|
||||||
|
import io.anuke.mindustry.input.CursorType;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.mindustry.type.ItemStack;
|
import io.anuke.mindustry.type.ItemStack;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
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.core.Timers;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.graphics.Hue;
|
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.*/
|
/**whether this block has instant transfer checking. used for calculations to prevent infinite loops.*/
|
||||||
public boolean instantTransfer = false;
|
public boolean instantTransfer = false;
|
||||||
/**The block group. Unless {@link #canReplace} is overriden, blocks in the same group can replace each other.*/
|
/**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.*/
|
/**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.*/
|
/**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.*/
|
/**List of block flags. Used for AI indexing.*/
|
||||||
public EnumSet<BlockFlag> flags;
|
public EnumSet<BlockFlag> flags;
|
||||||
/**Whether to automatically set the entity to 'sleeping' when created.*/
|
/**Whether to automatically set the entity to 'sleeping' when created.*/
|
||||||
@@ -113,6 +119,8 @@ public class Block extends BaseBlock implements UnlockableContent{
|
|||||||
public TextureRegion shadowRegion;
|
public TextureRegion shadowRegion;
|
||||||
/**Texture region array for drawing multiple shadows.*/
|
/**Texture region array for drawing multiple shadows.*/
|
||||||
public TextureRegion[] shadowRegions;
|
public TextureRegion[] shadowRegions;
|
||||||
|
/**Whether the block can be tapped and selected to configure.*/
|
||||||
|
public boolean configurable;
|
||||||
|
|
||||||
public Block(String name) {
|
public Block(String name) {
|
||||||
this.name = 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.*/
|
/**Returns whether or not a hand cursor should be shown over this block.*/
|
||||||
public boolean isCursor(Tile tile){
|
public CursorType getCursor(Tile tile){
|
||||||
return isConfigurable(tile);
|
return configurable ? CursorType.normal : CursorType.hand;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**Called when this block is tapped to build a UI on the table.
|
/**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) {}
|
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.
|
/**Called when another tile is tapped while this block is selected.
|
||||||
* Returns whether or not this block should be deselected.*/
|
* Returns whether or not this block should be deselected.*/
|
||||||
public boolean onConfigureTileTapped(Tile tile, Tile other){
|
public boolean onConfigureTileTapped(Tile tile, Tile other){
|
||||||
@@ -225,8 +219,8 @@ public class Block extends BaseBlock implements UnlockableContent{
|
|||||||
|
|
||||||
//TODO make this easier to config.
|
//TODO make this easier to config.
|
||||||
public void setBars(){
|
public void setBars(){
|
||||||
if(hasPower) bars.add(new BlockBar(BarType.power, true, tile -> tile.entity.power.amount / powerCapacity));
|
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 BlockBar(BarType.liquid, true, tile -> tile.entity.liquids.amount / liquidCapacity));
|
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));
|
if(hasItems) bars.add(new BlockBar(BarType.inventory, true, tile -> (float)tile.entity.items.totalItems() / itemCapacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import io.anuke.mindustry.content.fx.Fx;
|
|||||||
import io.anuke.mindustry.entities.Units;
|
import io.anuke.mindustry.entities.Units;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.type.Recipe;
|
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.core.Effects;
|
||||||
import io.anuke.ucore.entities.Entities;
|
import io.anuke.ucore.entities.Entities;
|
||||||
|
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ import io.anuke.mindustry.entities.traits.TargetTrait;
|
|||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.type.Recipe;
|
import io.anuke.mindustry.type.Recipe;
|
||||||
import io.anuke.mindustry.world.blocks.types.Floor;
|
import io.anuke.mindustry.world.blocks.Floor;
|
||||||
import io.anuke.mindustry.world.blocks.types.modules.InventoryModule;
|
import io.anuke.mindustry.world.blocks.modules.InventoryModule;
|
||||||
import io.anuke.mindustry.world.blocks.types.modules.LiquidModule;
|
import io.anuke.mindustry.world.blocks.modules.LiquidModule;
|
||||||
import io.anuke.mindustry.world.blocks.types.modules.PowerModule;
|
import io.anuke.mindustry.world.blocks.modules.PowerModule;
|
||||||
import io.anuke.ucore.function.Consumer;
|
import io.anuke.ucore.function.Consumer;
|
||||||
import io.anuke.ucore.util.Bits;
|
import io.anuke.ucore.util.Bits;
|
||||||
import io.anuke.ucore.entities.trait.PosTrait;
|
import io.anuke.ucore.entities.trait.PosTrait;
|
||||||
|
|||||||
@@ -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.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.mindustry.world.blocks.types;
|
package io.anuke.mindustry.world.blocks;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
@@ -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.Item;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
import io.anuke.mindustry.type.Liquid;
|
||||||
@@ -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 com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
import io.anuke.mindustry.content.fx.ExplosionFx;
|
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.type.Recipe;
|
||||||
import io.anuke.mindustry.world.BarType;
|
import io.anuke.mindustry.world.BarType;
|
||||||
import io.anuke.mindustry.world.Block;
|
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.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.Effects;
|
||||||
import io.anuke.ucore.core.Graphics;
|
import io.anuke.ucore.core.Graphics;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
@@ -31,6 +31,7 @@ public class BuildBlock extends Block {
|
|||||||
size = Integer.parseInt(name.charAt(name.length()-1) + "");
|
size = Integer.parseInt(name.charAt(name.length()-1) + "");
|
||||||
health = 1;
|
health = 1;
|
||||||
layer = Layer.placement;
|
layer = Layer.placement;
|
||||||
|
configurable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -43,11 +44,6 @@ public class BuildBlock extends Block {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isCursor(Tile tile) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setBars(){
|
public void setBars(){
|
||||||
bars.replace(new BlockBar(BarType.health, true, tile -> (float)tile.<BuildEntity>entity().progress));
|
bars.replace(new BlockBar(BarType.health, true, tile -> (float)tile.<BuildEntity>entity().progress));
|
||||||
@@ -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.Color;
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
@@ -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 com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
import io.anuke.mindustry.world.Block;
|
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.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.modules.LiquidModule;
|
import io.anuke.mindustry.world.blocks.modules.LiquidModule;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
|
|
||||||
public class LiquidBlock extends Block{
|
public class LiquidBlock extends Block{
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.mindustry.world.blocks.types;
|
package io.anuke.mindustry.world.blocks;
|
||||||
|
|
||||||
import io.anuke.mindustry.content.blocks.Blocks;
|
import io.anuke.mindustry.content.blocks.Blocks;
|
||||||
|
|
||||||
@@ -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.Block;
|
||||||
import io.anuke.mindustry.world.BlockGroup;
|
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||||
|
|
||||||
public abstract class PowerBlock extends Block{
|
public abstract class PowerBlock extends Block{
|
||||||
|
|
||||||
@@ -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.Block;
|
||||||
|
|
||||||
42
core/src/io/anuke/mindustry/world/blocks/SelectionTrait.java
Normal file
@@ -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<Item> holder, Consumer<Item> consumer){
|
||||||
|
|
||||||
|
Array<Item> items = Item.all();
|
||||||
|
|
||||||
|
ButtonGroup<ImageButton> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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.graphics.CacheLayer;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
@@ -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.Block;
|
||||||
import io.anuke.mindustry.world.BlockGroup;
|
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||||
|
|
||||||
public class Wall extends Block{
|
public class Wall extends Block{
|
||||||
|
|
||||||
@@ -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 com.badlogic.gdx.math.Rectangle;
|
||||||
import io.anuke.mindustry.content.fx.BlockFx;
|
import io.anuke.mindustry.content.fx.BlockFx;
|
||||||
import io.anuke.mindustry.entities.Player;
|
import io.anuke.mindustry.entities.Player;
|
||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.entities.Units;
|
import io.anuke.mindustry.entities.Units;
|
||||||
|
import io.anuke.mindustry.input.CursorType;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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;
|
||||||
import io.anuke.ucore.core.Effects.Effect;
|
import io.anuke.ucore.core.Effects.Effect;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
@@ -39,8 +40,8 @@ public class Door extends Wall{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isCursor(Tile tile){
|
public CursorType getCursor(Tile tile){
|
||||||
return true;
|
return CursorType.hand;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -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 com.badlogic.gdx.math.MathUtils;
|
||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.entities.Units;
|
import io.anuke.mindustry.entities.Units;
|
||||||
import io.anuke.mindustry.graphics.Layer;
|
import io.anuke.mindustry.graphics.Layer;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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.core.Timers;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.graphics.Hue;
|
import io.anuke.ucore.graphics.Hue;
|
||||||
@@ -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.Vars;
|
||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.entities.effect.Shield;
|
import io.anuke.mindustry.entities.effect.Shield;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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.core.Timers;
|
||||||
import io.anuke.ucore.entities.impl.BulletEntity;
|
import io.anuke.ucore.entities.impl.BulletEntity;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
@@ -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 com.badlogic.gdx.graphics.Color;
|
||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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.core.Timers;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.util.Strings;
|
import io.anuke.ucore.util.Strings;
|
||||||
@@ -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.Color;
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
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.AmmoEntry;
|
||||||
import io.anuke.mindustry.type.AmmoType;
|
import io.anuke.mindustry.type.AmmoType;
|
||||||
import io.anuke.mindustry.world.Block;
|
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.Tile;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.core.Effects.Effect;
|
import io.anuke.ucore.core.Effects.Effect;
|
||||||
@@ -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.type.AmmoType;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
@@ -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.type.AmmoType;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
@@ -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 com.badlogic.gdx.utils.ObjectMap;
|
||||||
import io.anuke.mindustry.entities.Unit;
|
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.AmmoType;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.mindustry.world.BarType;
|
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.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.defense.Turret;
|
import io.anuke.mindustry.world.blocks.defense.Turret;
|
||||||
|
|
||||||
public class ItemTurret extends Turret {
|
public class ItemTurret extends Turret {
|
||||||
protected int maxAmmo = 100;
|
protected int maxAmmo = 100;
|
||||||
@@ -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.content.fx.Fx;
|
||||||
import io.anuke.mindustry.type.AmmoType;
|
import io.anuke.mindustry.type.AmmoType;
|
||||||
@@ -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 com.badlogic.gdx.utils.ObjectMap;
|
||||||
import io.anuke.mindustry.type.AmmoType;
|
import io.anuke.mindustry.type.AmmoType;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
import io.anuke.mindustry.type.Liquid;
|
||||||
import io.anuke.mindustry.world.BarType;
|
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.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.defense.Turret;
|
import io.anuke.mindustry.world.blocks.defense.Turret;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
|
|
||||||
public abstract class LiquidTurret extends Turret {
|
public abstract class LiquidTurret extends Turret {
|
||||||
@@ -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.type.AmmoType;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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;
|
import io.anuke.ucore.util.Strings;
|
||||||
|
|
||||||
public abstract class PowerTurret extends Turret {
|
public abstract class PowerTurret extends Turret {
|
||||||
@@ -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.entities.TileEntity;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
@@ -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 com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
import io.anuke.mindustry.type.Liquid;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.LiquidBlock;
|
import io.anuke.mindustry.world.blocks.LiquidBlock;
|
||||||
import io.anuke.mindustry.world.blocks.types.modules.LiquidModule;
|
import io.anuke.mindustry.world.blocks.modules.LiquidModule;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|
||||||
@@ -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 com.badlogic.gdx.utils.LongArray;
|
||||||
import io.anuke.mindustry.content.Items;
|
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.graphics.Layer;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.mindustry.world.Block;
|
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.Tile;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
@@ -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.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.graphics.CapStyle;
|
import io.anuke.ucore.graphics.CapStyle;
|
||||||
@@ -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.graphics.Color;
|
||||||
import com.badlogic.gdx.utils.IntArray;
|
import com.badlogic.gdx.utils.IntArray;
|
||||||
@@ -41,6 +41,7 @@ public class ItemBridge extends Block {
|
|||||||
layer = Layer.power;
|
layer = Layer.power;
|
||||||
expanded = true;
|
expanded = true;
|
||||||
itemCapacity = 30;
|
itemCapacity = 30;
|
||||||
|
configurable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -55,11 +56,6 @@ public class ItemBridge extends Block {
|
|||||||
lastPlaced = tile.packedPosition();
|
lastPlaced = tile.packedPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isConfigurable(Tile tile) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawPlace(int x, int y, int rotation, boolean valid) {
|
public void drawPlace(int x, int y, int rotation, boolean valid) {
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
@@ -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.Array;
|
||||||
import com.badlogic.gdx.utils.NumberUtils;
|
import com.badlogic.gdx.utils.NumberUtils;
|
||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.mindustry.world.Block;
|
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.Tile;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.function.Consumer;
|
import io.anuke.ucore.function.Consumer;
|
||||||
@@ -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.type.Item;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
@@ -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.type.Item;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
@@ -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 com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
import io.anuke.mindustry.type.Liquid;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
|
|
||||||
public class LiquidJunction extends LiquidBlock{
|
public class LiquidJunction extends LiquidBlock{
|
||||||
@@ -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.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.LiquidBlock;
|
import io.anuke.mindustry.world.blocks.LiquidBlock;
|
||||||
|
|
||||||
public class LiquidRouter extends LiquidBlock{
|
public class LiquidRouter extends LiquidBlock{
|
||||||
|
|
||||||
@@ -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;
|
import io.anuke.mindustry.world.Block;
|
||||||
|
|
||||||
@@ -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.type.Item;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
@@ -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.type.Item;
|
||||||
import io.anuke.mindustry.world.Block;
|
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.Tile;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
|
|
||||||
@@ -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.content.Items;
|
||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.BlockGroup;
|
|
||||||
import io.anuke.mindustry.world.Tile;
|
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.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.scene.ui.layout.Table;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|
||||||
@@ -19,7 +15,7 @@ import java.io.DataInputStream;
|
|||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class Sorter extends Block{
|
public class Sorter extends Block implements SelectionTrait{
|
||||||
|
|
||||||
public Sorter(String name) {
|
public Sorter(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
@@ -27,12 +23,15 @@ public class Sorter extends Block{
|
|||||||
solid = true;
|
solid = true;
|
||||||
instantTransfer = true;
|
instantTransfer = true;
|
||||||
group = BlockGroup.transportation;
|
group = BlockGroup.transportation;
|
||||||
|
configurable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(Tile tile){
|
public void draw(Tile tile){
|
||||||
super.draw(tile);
|
super.draw(tile);
|
||||||
|
|
||||||
|
//TODO call event for change
|
||||||
|
|
||||||
SorterEntity entity = tile.entity();
|
SorterEntity entity = tile.entity();
|
||||||
|
|
||||||
Draw.color(entity.sortItem.color);
|
Draw.color(entity.sortItem.color);
|
||||||
@@ -93,47 +92,10 @@ public class Sorter extends Block{
|
|||||||
return to;
|
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
|
@Override
|
||||||
public void buildTable(Tile tile, Table table){
|
public void buildTable(Tile tile, Table table){
|
||||||
SorterEntity entity = tile.entity();
|
SorterEntity entity = tile.entity();
|
||||||
|
buildItemTable(table, () -> entity.sortItem, item -> entity.sortItem = item);
|
||||||
Array<Item> items = Item.all();
|
|
||||||
|
|
||||||
ButtonGroup<ImageButton> 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -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.type.Item;
|
||||||
import io.anuke.mindustry.world.Block;
|
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.Tile;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|
||||||
@@ -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.graphics.Color;
|
||||||
import com.badlogic.gdx.utils.Array;
|
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.Item;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
import io.anuke.mindustry.type.Liquid;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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;
|
||||||
import io.anuke.ucore.core.Effects.Effect;
|
import io.anuke.ucore.core.Effects.Effect;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
@@ -65,15 +65,7 @@ public class Teleporter extends PowerBlock{
|
|||||||
itemCapacity = 100;
|
itemCapacity = 100;
|
||||||
hasLiquids = true;
|
hasLiquids = true;
|
||||||
liquidCapacity = 100f;
|
liquidCapacity = 100f;
|
||||||
}
|
configurable = true;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void configure(Tile tile, byte data) {
|
|
||||||
TeleporterEntity entity = tile.entity();
|
|
||||||
if(entity != null){
|
|
||||||
entity.color = data;
|
|
||||||
entity.items.clear();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -84,7 +76,7 @@ public class Teleporter extends PowerBlock{
|
|||||||
@Override
|
@Override
|
||||||
public void placed(Tile tile){
|
public void placed(Tile tile){
|
||||||
tile.<TeleporterEntity>entity().color = lastColor;
|
tile.<TeleporterEntity>entity().color = lastColor;
|
||||||
setConfigure(tile, lastColor);
|
tile.<TeleporterEntity>entity().color = lastColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -212,15 +204,12 @@ public class Teleporter extends PowerBlock{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isConfigurable(Tile tile){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildTable(Tile tile, Table table){
|
public void buildTable(Tile tile, Table table){
|
||||||
TeleporterEntity entity = tile.entity();
|
TeleporterEntity entity = tile.entity();
|
||||||
|
|
||||||
|
//TODO call event for change
|
||||||
|
|
||||||
ButtonGroup<ImageButton> group = new ButtonGroup<>();
|
ButtonGroup<ImageButton> group = new ButtonGroup<>();
|
||||||
Table cont = new Table();
|
Table cont = new Table();
|
||||||
cont.margin(4);
|
cont.margin(4);
|
||||||
@@ -233,7 +222,6 @@ public class Teleporter extends PowerBlock{
|
|||||||
final int f = i;
|
final int f = i;
|
||||||
ImageButton button = cont.addImageButton("white", "toggle", 24, () -> {
|
ImageButton button = cont.addImageButton("white", "toggle", 24, () -> {
|
||||||
lastColor = (byte)f;
|
lastColor = (byte)f;
|
||||||
setConfigure(tile, (byte)f);
|
|
||||||
}).size(34, 38).padBottom(-5.1f).group(group).get();
|
}).size(34, 38).padBottom(-5.1f).group(group).get();
|
||||||
button.getStyle().imageUpColor = colorArray[f];
|
button.getStyle().imageUpColor = colorArray[f];
|
||||||
button.setChecked(entity.color == f);
|
button.setChecked(entity.color == f);
|
||||||
@@ -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 com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
import io.anuke.mindustry.type.Liquid;
|
||||||
import io.anuke.mindustry.world.BarType;
|
import io.anuke.mindustry.world.BarType;
|
||||||
import io.anuke.mindustry.world.Tile;
|
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;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
|
|
||||||
public class TunnelConduit extends LiquidBlock {
|
public class TunnelConduit extends LiquidBlock {
|
||||||