Untitled

 avatar
unknown
java
5 months ago
2.4 kB
5
Indexable
    // I'm gonna litter this with comments because its a bit complicated. This is how we ensure the player is rendered
    // Above or behind objects when it should, dynamically, despite not having a third dimension.
    public void updateZIndex() {
        entitySubscription = worldEngine.getAspectSubscriptionManager().get(Aspect.all());

        List<Entity> entities = new ArrayList<>();

        // Fetch all entities that have a PhysicsBodyComponent and ZIndexComponent
        IntBag entityIds = entitySubscription.getEntities();
        for (int i = 0; i < entityIds.size(); i++) {
            entities.add(worldEngine.getEntity(entityIds.get(i)));
        }

        // Sort entities by Y-position
        Collections.sort(entities, new Comparator<Entity>() {
            @Override
            public int compare(Entity o1, Entity o2) {
                // Retrieve the PhysicsBodyComponent & DimensionsComponent for each entity
                PhysicsBodyComponent o1BodyComponent = ComponentRetriever.get(o1.getId(), PhysicsBodyComponent.class, worldEngine);
                PhysicsBodyComponent o2BodyComponent = ComponentRetriever.get(o2.getId(), PhysicsBodyComponent.class, worldEngine);

                // Ensure components exist before trying to access them
                if (o1BodyComponent == null || o2BodyComponent == null || o1BodyComponent.body == null || o2BodyComponent.body == null) {
                    return 0; // Skip comparison if either body is null
                }

                // Compare the adjusted Y positions of the entities' bodies
                return Float.compare(o2BodyComponent.body.getPosition().y, o1BodyComponent.body.getPosition().y);
            }
        });

        // Update the Z-index for each entity based on its position in the sorted list
        for (int i = 0; i < entities.size(); i++) {
            Entity entity = entities.get(i);

            // Retrieve the ZIndexComponent for the entity
            ZIndexComponent zIndexComponent = ComponentRetriever.get(entity.getId(), ZIndexComponent.class, worldEngine);

            if (zIndexComponent != null) {
                zIndexComponent.setZIndex(i);
                entity.edit().create(zIndexComponent.getClass());  // Update the entity with the new ZIndexComponent
            }
        }
    }
Editor is loading...
Leave a Comment