mirror of
https://github.com/Anuken/Mindustry.git
synced 2026-01-26 06:22:17 -08:00
TypeIO resolution
This commit is contained in:
parent
c4464e67fd
commit
c4d4dcb9db
7 changed files with 23 additions and 13 deletions
|
|
@ -3,15 +3,18 @@ package mindustry.annotations.entity;
|
|||
import com.squareup.javapoet.*;
|
||||
import com.squareup.javapoet.MethodSpec.*;
|
||||
import mindustry.annotations.*;
|
||||
import mindustry.annotations.util.TypeIOResolver.*;
|
||||
|
||||
import static mindustry.annotations.BaseProcessor.instanceOf;
|
||||
|
||||
public class EntityIO{
|
||||
final MethodSpec.Builder builder;
|
||||
final boolean write;
|
||||
final ClassSerializer serializer;
|
||||
|
||||
EntityIO(Builder builder, boolean write){
|
||||
EntityIO(Builder builder, boolean write, ClassSerializer serializer){
|
||||
this.builder = builder;
|
||||
this.serializer = serializer;
|
||||
this.write = write;
|
||||
}
|
||||
|
||||
|
|
@ -19,14 +22,18 @@ public class EntityIO{
|
|||
|
||||
if(type.isPrimitive()){
|
||||
s(type == TypeName.BOOLEAN ? "bool" : type.toString().charAt(0) + "", field);
|
||||
}else if(type.toString().equals("java.lang.String")){
|
||||
s("str", field);
|
||||
//}else if(type.toString().equals("java.lang.String")){
|
||||
// s("str", field);
|
||||
}else if(instanceOf(type.toString(), "mindustry.ctype.Content")){
|
||||
if(write){
|
||||
s("s", field + ".id");
|
||||
}else{
|
||||
st(field + " = mindustry.Vars.content.getByID(mindustry.ctype.ContentType.$L, read.s())", BaseProcessor.simpleName(type.toString()).toLowerCase().replace("type", ""));
|
||||
}
|
||||
}else if(serializer.writers.containsKey(type.toString()) && write){
|
||||
st("$L(write, $L)", serializer.writers.get(type.toString()), field);
|
||||
}else if(serializer.readers.containsKey(type.toString()) && !write){
|
||||
st("$L = $L(read)", field, serializer.readers.get(type.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import com.squareup.javapoet.TypeSpec.*;
|
|||
import com.sun.source.tree.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.annotations.*;
|
||||
import mindustry.annotations.util.TypeIOResolver.*;
|
||||
import mindustry.annotations.util.*;
|
||||
|
||||
import javax.annotation.processing.*;
|
||||
|
|
@ -23,7 +24,8 @@ import java.lang.annotation.*;
|
|||
"mindustry.annotations.Annotations.EntityDef",
|
||||
"mindustry.annotations.Annotations.GroupDef",
|
||||
"mindustry.annotations.Annotations.EntityInterface",
|
||||
"mindustry.annotations.Annotations.BaseComponent"
|
||||
"mindustry.annotations.Annotations.BaseComponent",
|
||||
"mindustry.annotations.Annotations.TypeIOHandler"
|
||||
})
|
||||
public class EntityProcess extends BaseProcessor{
|
||||
Array<EntityDefinition> definitions = new Array<>();
|
||||
|
|
@ -38,6 +40,7 @@ public class EntityProcess extends BaseProcessor{
|
|||
Array<Selement> allGroups = new Array<>();
|
||||
Array<Selement> allDefs = new Array<>();
|
||||
Array<Stype> allInterfaces = new Array<>();
|
||||
ClassSerializer serializer;
|
||||
|
||||
{
|
||||
rounds = 3;
|
||||
|
|
@ -51,6 +54,7 @@ public class EntityProcess extends BaseProcessor{
|
|||
|
||||
//round 1: generate component interfaces
|
||||
if(round == 1){
|
||||
serializer = TypeIOResolver.resolve(this);
|
||||
baseComponents = types(BaseComponent.class);
|
||||
Array<Stype> allComponents = types(Component.class);
|
||||
|
||||
|
|
@ -330,7 +334,7 @@ public class EntityProcess extends BaseProcessor{
|
|||
if((first.name().equals("read") || first.name().equals("write")) && ann.genio()){
|
||||
Array<FieldSpec> fields = Array.with(builder.fieldSpecs).select(spec -> !spec.hasModifier(Modifier.TRANSIENT) && !spec.hasModifier(Modifier.STATIC) && !spec.hasModifier(Modifier.FINAL));
|
||||
fields.sortComparing(f -> f.name); //sort to keep order
|
||||
EntityIO writer = new EntityIO(mbuilder, first.name().equals("write"));
|
||||
EntityIO writer = new EntityIO(mbuilder, first.name().equals("write"), serializer);
|
||||
//subclasses *have* to call this method
|
||||
mbuilder.addAnnotation(CallSuper.class);
|
||||
//write or read each non-transient field
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ package mindustry.annotations.remote;
|
|||
import com.squareup.javapoet.*;
|
||||
import mindustry.annotations.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.annotations.remote.TypeIOResolver.*;
|
||||
import mindustry.annotations.util.*;
|
||||
import mindustry.annotations.util.TypeIOResolver.*;
|
||||
|
||||
import javax.annotation.processing.*;
|
||||
import javax.lang.model.element.*;
|
||||
|
|
@ -14,8 +15,7 @@ import java.util.stream.*;
|
|||
/** The annotation processor for generating remote method call code. */
|
||||
@SupportedAnnotationTypes({
|
||||
"mindustry.annotations.Annotations.Remote",
|
||||
"mindustry.annotations.Annotations.WriteClass",
|
||||
"mindustry.annotations.Annotations.ReadClass",
|
||||
"mindustry.annotations.Annotations.TypeIOHandler"
|
||||
})
|
||||
public class RemoteProcess extends BaseProcessor{
|
||||
/** Maximum size of each event packet. */
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mindustry.annotations.remote;
|
|||
import arc.util.io.*;
|
||||
import com.squareup.javapoet.*;
|
||||
import mindustry.annotations.*;
|
||||
import mindustry.annotations.remote.TypeIOResolver.*;
|
||||
import mindustry.annotations.util.TypeIOResolver.*;
|
||||
|
||||
import javax.lang.model.element.Modifier;
|
||||
import javax.lang.model.element.*;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import arc.util.io.*;
|
|||
import com.squareup.javapoet.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.annotations.*;
|
||||
import mindustry.annotations.remote.TypeIOResolver.*;
|
||||
import mindustry.annotations.util.TypeIOResolver.*;
|
||||
|
||||
import javax.lang.model.element.*;
|
||||
import java.io.*;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
package mindustry.annotations.remote;
|
||||
package mindustry.annotations.util;
|
||||
|
||||
import arc.struct.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.annotations.*;
|
||||
import mindustry.annotations.util.*;
|
||||
|
||||
import javax.lang.model.element.*;
|
||||
|
||||
|
|
@ -114,7 +114,7 @@ public class TypeIO{
|
|||
}
|
||||
|
||||
public static void writeTeam(Writes write, Team reason){
|
||||
write.b((byte) (int)reason.id);
|
||||
write.b(reason.id);
|
||||
}
|
||||
|
||||
public static Team readTeam(Reads read){
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue