All Downloads are FREE. Search and download functionalities are using the official Maven repository.

games.rednblack.h2d.extension.bvb.BVBDrawableLogic Maven / Gradle / Ivy

The newest version!
package games.rednblack.h2d.extension.bvb;

import com.artemis.ComponentMapper;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.Batch;
import games.rednblack.editor.renderer.components.TintComponent;
import games.rednblack.h2d.extension.spine.SlotRange;
import games.rednblack.h2d.extension.spine.SpineComponent;
import games.rednblack.h2d.extension.spine.SpineDrawableLogic;
import games.rednblack.h2d.extension.talos.TalosRenderer;

public class BVBDrawableLogic extends SpineDrawableLogic {
    protected ComponentMapper bvbCM;
    private final BVBSkeletonRenderSeparator bvbSkeletonRenderSeparator = new BVBSkeletonRenderSeparator();
    private final TalosRenderer talosRenderer = new TalosRenderer();

    @Override
    public void draw(Batch batch, int entity, float parentAlpha, RenderingType renderingType) {
        BVBComponent bvbComponent = bvbCM.get(entity);
        if (bvbComponent == null || bvbComponent.skeletonContainer == null) {
            super.draw(batch, entity, parentAlpha, renderingType);
            return;
        }

        normalMap = renderingType == RenderingType.NORMAL_MAP;

        SpineComponent spineObjectComponent = spineMapper.get(entity);

        TintComponent tint = tintComponentMapper.get(entity);

        talosRenderer.setBatch(batch);
        talosRenderer.setEntityColor(tint.color, parentAlpha);

        spineObjectComponent.skeleton.getColor().set(tint.color);

        Color color = spineObjectComponent.skeleton.getColor();
        float oldAlpha = color.a;
        spineObjectComponent.skeleton.getColor().a *= parentAlpha;

        computeTransform(entity).mulLeft(batch.getTransformMatrix());
        applyTransform(entity, batch);

        if (spineObjectComponent.splitRenderingRangeIndex < spineObjectComponent.splitRenderingRange.size) {
            SlotRange slotRange = spineObjectComponent.splitRenderingRange.get(spineObjectComponent.splitRenderingRangeIndex);

            bvbComponent.skeletonContainer.setSkeletonRenderSeparator(bvbSkeletonRenderSeparator);
            bvbComponent.skeletonContainer.setSlotRange(slotRange);
            bvbComponent.skeletonContainer.draw(talosRenderer);

            spineObjectComponent.splitRenderingRangeIndex++;
        }
        resetTransform(entity, batch);
        batch.setBlendFunctionSeparate(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, GL20.GL_ONE_MINUS_DST_ALPHA, GL20.GL_ONE);

        color.a = oldAlpha;

        normalMap = false;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy