libgdx / gdx-ai

Artificial Intelligence framework for games based on libGDX or not. Features: Steering Behaviors, Formation Motion, Pathfinding, Behavior Trees and Finite State Machines
Apache License 2.0
1.2k stars 242 forks source link

Use inner class in btree file #101

Closed Genhis closed 5 years ago

Genhis commented 6 years ago

Issue details

It's not possible to use inner classes in btree file (parser does not allow '$' character used for separating class names).

Reproduction steps/code

  1. Create a public static inner class.
  2. Use full name instead of import in btree file.
  3. com.badlogic.gdx.utils.SerializationException: Error parsing behavior tree on line 3 near: $Inner

OuterClass.java:

package test;

import com.badlogic.gdx.ai.btree.leaf.Success;

public class OuterClass {
    public static class Inner<E> extends Success<E> {}
}

mytree.btree:

root
    selector
        test.OuterClass$Inner

Version of gdx-ai and/or relevant dependencies

1.8.1

Stacktrace

com.badlogic.gdx.utils.SerializationException: Error parsing behavior tree on line 3 near: $Inner
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeReader.parse(BehaviorTreeReader.java:541)
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeParser$DefaultBehaviorTreeReader.parse(BehaviorTreeParser.java:326)
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeReader.parse(BehaviorTreeReader.java:92)
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeReader.parse(BehaviorTreeReader.java:118)