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.18k stars 241 forks source link

Error parsing file #88

Closed Ali-RS closed 7 years ago

Ali-RS commented 7 years ago

Hi Can i load array of values in text format ? For attribute

@TaskAttribute(required = true)
    public String[] animNames;

I am getting parsing error for this line createSequence  sequenceName:"walk_run"  animNames:"walk","run"

com.badlogic.gdx.utils.SerializationException: Error parsing file: doha_animstate.btree
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeReader.parse(BehaviorTreeReader.java:120) ~[gdx-ai-1.8.0.jar:?]
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeParser.parse(BehaviorTreeParser.java:121) ~[gdx-ai-1.8.0.jar:?]
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeLibrary.retrieveArchetypeTree(BehaviorTreeLibrary.java:130) ~[gdx-ai-1.8.0.jar:?]
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeLibrary.createBehaviorTree(BehaviorTreeLibrary.java:111) ~[gdx-ai-1.8.0.jar:?]
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeLibraryManager.createBehaviorTree(BehaviorTreeLibraryManager.java:81) ~[gdx-ai-1.8.0.jar:?]
    at com.overthemoon.app.state.view.MonkanimState$AnimStateMachineContainer.addObject(MonkanimState.java:140) ~[main/:?]
    at com.overthemoon.app.state.view.MonkanimState$AnimStateMachineContainer.addObject(MonkanimState.java:117) ~[main/:?]
    at com.simsilica.es.EntityContainer.addObjects(EntityContainer.java:156) ~[sio2-1.0.3-SNAPSHOT.jar:?]
    at com.simsilica.es.EntityContainer.update(EntityContainer.java:200) ~[sio2-1.0.3-SNAPSHOT.jar:?]
    at com.overthemoon.app.state.view.MonkanimState.update(MonkanimState.java:70) ~[main/:?]
    at com.jme3.app.state.AppStateManager.update(AppStateManager.java:287) ~[jme3-core-3.2.0-SNAPSHOT.jar:3.2-1]
    at com.jme3.app.SimpleApplication.update(SimpleApplication.java:236) ~[jme3-core-3.2.0-SNAPSHOT.jar:3.2-1]
    at com.jme3.system.lwjgl.LwjglWindow.runLoop(LwjglWindow.java:403) ~[jme3-lwjgl3-3.2.0-SNAPSHOT.jar:3.2.0-UNKNOWN]
    at com.jme3.system.lwjgl.LwjglWindow.run(LwjglWindow.java:486) ~[jme3-lwjgl3-3.2.0-SNAPSHOT.jar:3.2.0-UNKNOWN]
    at com.jme3.system.lwjgl.LwjglWindow.create(LwjglWindow.java:324) ~[jme3-lwjgl3-3.2.0-SNAPSHOT.jar:3.2.0-UNKNOWN]
    at com.jme3.app.LegacyApplication.start(LegacyApplication.java:463) ~[jme3-core-3.2.0-SNAPSHOT.jar:3.2-1]
    at com.jme3.app.LegacyApplication.start(LegacyApplication.java:424) ~[jme3-core-3.2.0-SNAPSHOT.jar:3.2-1]
    at com.jme3.app.SimpleApplication.start(SimpleApplication.java:125) ~[jme3-core-3.2.0-SNAPSHOT.jar:3.2-1]
    at example.Main.main(Main.java:111) ~[main/:?]
Caused by: com.badlogic.gdx.utils.SerializationException: Error parsing behavior tree on line 13 near:   sequenceName:"walk_run"  animNames:"walk","run"
      transition from:"walk_run" to:"idle"
      when state:"idle"
      interrupt from:"idle" to:"walk_run"
      when state:"walk_run"
      startWith state:"idle"
  dynamicGuardSelector
    (startManager?)  $startManager
    (isCurrentStateEqualsTo? states:"walk_run")  $blendWithSpeed

    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeReader.parse(BehaviorTreeReader.java:541) ~[gdx-ai-1.8.0.jar:?]
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeParser$DefaultBehaviorTreeReader.parse(BehaviorTreeParser.java:323) ~[gdx-ai-1.8.0.jar:?]
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeReader.parse(BehaviorTreeReader.java:92) ~[gdx-ai-1.8.0.jar:?]
    at com.badlogic.gdx.ai.btree.utils.BehaviorTreeReader.parse(BehaviorTreeReader.java:118) ~[gdx-ai-1.8.0.jar:?]
    ... 18 more

What is the proper way to load it ?

Thanks in advance

davebaol commented 7 years ago

Arrays are not supported, sorry. But you can use a string with comma-separated value, for instance. Then the first time the start method is executed you parse the string and set the corresponding instance array. Your example would become something like that

createSequence  sequenceName:"walk_run"  animNames:"walk,run"
Ali-RS commented 7 years ago

No problem. I will use comma-separated string as you said. Thanks