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

games.rednblack.h2d.extension.tinyvg.TinyVGComponentFactory Maven / Gradle / Ivy

package games.rednblack.h2d.extension.tinyvg;

import com.artemis.ComponentMapper;
import com.artemis.EntityTransmuter;
import com.artemis.EntityTransmuterFactory;
import com.badlogic.gdx.physics.box2d.World;
import dev.lyze.gdxtinyvg.TinyVG;
import games.rednblack.editor.renderer.box2dLight.RayHandler;
import games.rednblack.editor.renderer.components.DimensionsComponent;
import games.rednblack.editor.renderer.data.MainItemVO;
import games.rednblack.editor.renderer.data.ProjectInfoVO;
import games.rednblack.editor.renderer.data.ResolutionEntryVO;
import games.rednblack.editor.renderer.factory.component.ComponentFactory;
import games.rednblack.editor.renderer.resources.IResourceRetriever;

public class TinyVGComponentFactory extends ComponentFactory {

    protected ComponentMapper tinyVGCM;

    private EntityTransmuter transmuter;

    public TinyVGComponentFactory() {
        super();
    }

    @Override
    public void injectDependencies(com.artemis.World engine, RayHandler rayHandler, World world, IResourceRetriever rm) {
        super.injectDependencies(engine, rayHandler, world, rm);

        transmuter = new EntityTransmuterFactory(engine)
                .add(TinyVGComponent.class)
                .build();
    }

    @Override
    public void transmuteEntity(int entity) {
        transmuter.transmute(entity);
    }

    @Override
    public int getEntityType() {
        return TinyVGItemType.TINYVG_TYPE;
    }

    @Override
    public void setInitialData(int entity, Object data) {
        tinyVGCM.get(entity).imageName = (String) data;
    }

    @Override
    public Class getVOType() {
        return TinyVGVO.class;
    }

    @Override
    public void initializeSpecialComponentsFromVO(int entity, MainItemVO voG) {
        TinyVGVO vo = (TinyVGVO) voG;
        TinyVGComponent tinyVGComponent = tinyVGCM.get(entity);
        tinyVGComponent.imageName = vo.imageName;
    }

    @Override
    protected void initializeTransientComponents(int entity) {
        super.initializeTransientComponents(entity);

        TinyVGComponent component = tinyVGCM.get(entity);
        component.tinyVG = (TinyVG) rm.getExternalItemType(getEntityType(), component.imageName);
    }

    @Override
    protected void initializeDimensionsComponent(int entity) {
        TinyVGComponent component = tinyVGCM.get(entity);
        DimensionsComponent dimension = dimensionsCM.get(entity);

        ResolutionEntryVO resolutionEntryVO = rm.getLoadedResolution();
        ProjectInfoVO projectInfoVO = rm.getProjectVO();
        float multiplier = resolutionEntryVO.getMultiplier(rm.getProjectVO().originalResolution);

        component.tinyVG.setScale(multiplier / projectInfoVO.pixelToWorld);

        dimension.width = component.tinyVG.getScaledWidth();
        dimension.height = component.tinyVG.getScaledHeight();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy