-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
Hi @capdevon!
Your library is excellent. I am glad that there are similar projects that make life easier!
However, I have a problem that I can't solve...
I use ECS.
My code for generating the enemy entity:
public static void createEnemy(float x, float z) {
EntityId id = entityData.createEntity();
NameComponent nameComponent = new NameComponent();
nameComponent.name = "Enemy_" + new Random().nextInt(1, 99);
ModelComponent modelComponent = new ModelComponent();
modelComponent.box = new Box(0f, 0f, 0f);
modelComponent.geometry = new Geometry("EnemyBox", modelComponent.box);
modelComponent.betterCharacterControl = new BetterCharacterControl(0.1f, 1.6f, 10f);
modelComponent.geometry.setLocalTranslation(new Vector3f(x, 0.1f, z));
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Red);
modelComponent.geometry.setMaterial(mat);
modelComponent.geometry.addControl(modelComponent.betterCharacterControl);
bulletAppState.getPhysicsSpace().add(modelComponent.geometry);
rootNode.attachChild(modelComponent.geometry);
AIComponent aiComponent = new AIComponent();
entityData.setComponents(
id,
nameComponent,
aiComponent,
modelComponent
);
}
@Nonnull
private static NavMeshQueryFilter getNavMeshQueryFilter() {
int includeFlags = POLYFLAGS_WALK | POLYFLAGS_DOOR | POLYFLAGS_SWIM | POLYFLAGS_JUMP;
float[] polyExtents = new float[]{2, 2, 2};
NavMeshQueryFilter filter = new NavMeshQueryFilter(includeFlags, POLYFLAGS_DISABLED);
// filter.setPolyExtents(polyExtents);
return filter;
}AI System:
@Override
public void update(float tpf) {
entities.forEach(entity -> {
ModelComponent modelComponent = entity.get(ModelComponent.class);
AIComponent aiComponent = entity.get(AIComponent.class);
PositionComponent playerPosition = player.get(PositionComponent.class);
if (aiComponent.agent == null) {
aiComponent.agent = new NavMeshAgent(navMeshTerrain);
modelComponent.geometry.addControl(aiComponent.agent);
modelComponent.geometry.addControl(new NavMeshAgentDebug(assetManager));
aiComponent.agent.setSpatial(modelComponent.geometry);
NavMeshQueryFilter filter = getNavMeshQueryFilter();
aiComponent.agent.setQueryFilter(filter);
}
NavMeshPath path = new NavMeshPath();
Vector3f targetPosition = playerPosition.position;
aiComponent.agent.calculatePath(targetPosition, path);
if (path.getStatus() == NavMeshPathStatus.PathComplete) {
aiComponent.agent.setPath(path);
System.out.println(path.getCorners());
}
});
}the problem is that the enemy is standing still, although in debug mode you can see that the shortest path is displayed on the screen.

Metadata
Metadata
Assignees
Labels
No labels