Fixed crash with modded unit classes
This commit is contained in:
@@ -42,6 +42,7 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
Seq<Selement> allDefs = new Seq<>();
|
Seq<Selement> allDefs = new Seq<>();
|
||||||
Seq<Stype> allInterfaces = new Seq<>();
|
Seq<Stype> allInterfaces = new Seq<>();
|
||||||
Seq<TypeSpec.Builder> baseClasses = new Seq<>();
|
Seq<TypeSpec.Builder> baseClasses = new Seq<>();
|
||||||
|
ObjectSet<TypeSpec.Builder> baseClassIndexers = new ObjectSet<>();
|
||||||
ClassSerializer serializer;
|
ClassSerializer serializer;
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -266,6 +267,8 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
//get base class type name for extension
|
//get base class type name for extension
|
||||||
Stype baseClassType = baseClasses.any() ? baseClasses.first() : null;
|
Stype baseClassType = baseClasses.any() ? baseClasses.first() : null;
|
||||||
@Nullable TypeName baseClass = baseClasses.any() ? tname(packageName + "." + baseName(baseClassType)) : null;
|
@Nullable TypeName baseClass = baseClasses.any() ? tname(packageName + "." + baseName(baseClassType)) : null;
|
||||||
|
@Nullable TypeSpec.Builder baseClassBuilder = baseClassType == null ? null : this.baseClasses.find(b -> Reflect.<String>get(b, "name").equals(baseName(baseClassType)));
|
||||||
|
boolean addIndexToBase = baseClassBuilder != null && baseClassIndexers.add(baseClassBuilder);
|
||||||
//whether the main class is the base itself
|
//whether the main class is the base itself
|
||||||
boolean typeIsBase = baseClassType != null && type.has(Component.class) && type.annotation(Component.class).base();
|
boolean typeIsBase = baseClassType != null && type.has(Component.class) && type.annotation(Component.class).base();
|
||||||
|
|
||||||
@@ -400,11 +403,15 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
//entities with no sync comp and no serialization gen no code
|
//entities with no sync comp and no serialization gen no code
|
||||||
boolean hasIO = ann.genio() && (components.contains(s -> s.name().contains("Sync")) || ann.serialize());
|
boolean hasIO = ann.genio() && (components.contains(s -> s.name().contains("Sync")) || ann.serialize());
|
||||||
|
|
||||||
//implement indexable interfaces.
|
TypeSpec.Builder indexBuilder = baseClassBuilder == null ? builder : baseClassBuilder;
|
||||||
for(GroupDefinition def : groups){
|
|
||||||
builder.addSuperinterface(tname(packageName + ".IndexableEntity__" + def.name));
|
if(baseClassBuilder == null || addIndexToBase){
|
||||||
builder.addMethod(MethodSpec.methodBuilder("setIndex__" + def.name).addParameter(int.class, "index").addModifiers(Modifier.PUBLIC).addAnnotation(Override.class)
|
//implement indexable interfaces.
|
||||||
.addCode("index__$L = index;", def.name).build());
|
for(GroupDefinition def : groups){
|
||||||
|
indexBuilder.addSuperinterface(tname(packageName + ".IndexableEntity__" + def.name));
|
||||||
|
indexBuilder.addMethod(MethodSpec.methodBuilder("setIndex__" + def.name).addParameter(int.class, "index").addModifiers(Modifier.PUBLIC).addAnnotation(Override.class)
|
||||||
|
.addCode("index__$L = index;", def.name).build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//add all methods from components
|
//add all methods from components
|
||||||
@@ -598,9 +605,12 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
skipDeprecated(builder);
|
skipDeprecated(builder);
|
||||||
|
|
||||||
if(!legacy){
|
if(!legacy){
|
||||||
//add group index int variables
|
TypeSpec.Builder fieldBuilder = baseClassBuilder != null ? baseClassBuilder : builder;
|
||||||
for(GroupDefinition def : groups){
|
if(addIndexToBase || baseClassBuilder == null){
|
||||||
builder.addField(FieldSpec.builder(int.class, "index__" + def.name, Modifier.PROTECTED).initializer("-1").build());
|
//add group index int variables
|
||||||
|
for(GroupDefinition def : groups){
|
||||||
|
fieldBuilder.addField(FieldSpec.builder(int.class, "index__" + def.name, Modifier.PROTECTED, Modifier.TRANSIENT).initializer("-1").build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user