Skip to content

The problem is in the geometry movement #1

@Danil-Prog

Description

@Danil-Prog

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.

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions