package com.uwsoft.editor.renderer.factory.component; import box2dLight.RayHandler; import com.badlogic.ashley.core.Entity; import com.badlogic.gdx.graphics.g2d.NinePatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion; import com.badlogic.gdx.physics.box2d.World; import com.uwsoft.editor.renderer.components.DimensionsComponent; import com.uwsoft.editor.renderer.components.NinePatchComponent; import com.uwsoft.editor.renderer.data.Image9patchVO; import com.uwsoft.editor.renderer.data.MainItemVO; import com.uwsoft.editor.renderer.data.ProjectInfoVO; import com.uwsoft.editor.renderer.data.ResolutionEntryVO; import com.uwsoft.editor.renderer.factory.EntityFactory; import com.uwsoft.editor.renderer.resources.IResourceRetriever; public class NinePatchComponentFactory extends ComponentFactory { private NinePatchComponent ninePatchComponent; public NinePatchComponentFactory(RayHandler rayHandler, World world, IResourceRetriever rm) { super(rayHandler, world, rm); } @Override public void createComponents(Entity root, Entity entity, MainItemVO vo) { ninePatchComponent = createNinePatchComponent(entity, (Image9patchVO) vo); createCommonComponents(entity, vo, EntityFactory.NINE_PATCH); createParentNodeComponent(root, entity); createNodeComponent(root, entity); } @Override protected DimensionsComponent createDimensionsComponent(Entity entity, MainItemVO vo) { DimensionsComponent component = new DimensionsComponent(); component.height = ((Image9patchVO) vo).height; component.width = ((Image9patchVO) vo).width; if(component.width == 0) { component.width = ninePatchComponent.ninePatch.getTotalWidth(); } if(component.height == 0) { component.height = ninePatchComponent.ninePatch.getTotalHeight(); } entity.add(component); return component; } private NinePatchComponent createNinePatchComponent(Entity entity, Image9patchVO vo) { NinePatchComponent ninePatchComponent = new NinePatchComponent(); AtlasRegion atlasRegion = (TextureAtlas.AtlasRegion) rm.getTextureRegion(vo.imageName); ninePatchComponent.ninePatch = new NinePatch(atlasRegion, atlasRegion.splits[0], atlasRegion.splits[1], atlasRegion.splits[2], atlasRegion.splits[3]); ResolutionEntryVO resolutionEntryVO = rm.getLoadedResolution(); ProjectInfoVO projectInfoVO = rm.getProjectVO(); float multiplier = resolutionEntryVO.getMultiplier(rm.getProjectVO().originalResolution); ninePatchComponent.ninePatch.scale(multiplier/projectInfoVO.pixelToWorld, multiplier/projectInfoVO.pixelToWorld); // This seem to be redundant as "scale" method now takes care of that o_O when did libGDX change that, should look more into this. //ninePatchComponent.ninePatch.setMiddleWidth(ninePatchComponent.ninePatch.getMiddleWidth()*multiplier/projectInfoVO.pixelToWorld); //ninePatchComponent.ninePatch.setMiddleHeight(ninePatchComponent.ninePatch.getMiddleHeight()*multiplier/projectInfoVO.pixelToWorld); ninePatchComponent.textureRegionName = vo.imageName; entity.add(ninePatchComponent); return ninePatchComponent; } }