package com.uwsoft.editor.renderer.systems; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.Family; import com.badlogic.ashley.systems.IteratingSystem; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.Vector2; import com.uwsoft.editor.renderer.components.*; import com.uwsoft.editor.renderer.components.additional.ButtonComponent;import com.uwsoft.editor.renderer.resources.IResourceRetriever; import com.uwsoft.editor.renderer.utils.ComponentRetriever; import com.uwsoft.editor.renderer.utils.TransformMathUtils; /** * Created by azakhary on 8/1/2015. */ public class ButtonSystem extends IteratingSystem { public ButtonSystem() { super(Family.all(ButtonComponent.class).get()); } @Override protected void processEntity(Entity entity, float deltaTime) { NodeComponent nodeComponent = ComponentRetriever.get(entity, NodeComponent.class); if(nodeComponent == null) return; for (int i = 0; i < nodeComponent.children.size; i++) { Entity childEntity = nodeComponent.children.get(i); MainItemComponent childMainItemComponent = ComponentRetriever.get(childEntity, MainItemComponent.class); childMainItemComponent.visible = true; } ViewPortComponent camera = ComponentRetriever.get(entity, ViewPortComponent.class); if(camera != null) { // if camera is on this entity, then it should not be processed return; } for (int i = 0; i < nodeComponent.children.size; i++) { Entity childEntity = nodeComponent.children.get(i); MainItemComponent childMainItemComponent = ComponentRetriever.get(childEntity, MainItemComponent.class); ZIndexComponent childZComponent = ComponentRetriever.get(childEntity, ZIndexComponent.class); if(isTouched(entity)) { if(childZComponent.layerName.equals("normal")) { childMainItemComponent.visible = false; } if(childZComponent.layerName.equals("pressed")) { childMainItemComponent.visible = true; } } else { if(childZComponent.layerName.equals("normal")) { childMainItemComponent.visible = true; } if(childZComponent.layerName.equals("pressed")) { childMainItemComponent.visible = false; } } } } private boolean isTouched(Entity entity) { ButtonComponent buttonComponent = entity.getComponent(ButtonComponent.class); if(Gdx.input.isTouched()) { DimensionsComponent dimensionsComponent = ComponentRetriever.get(entity, DimensionsComponent.class); Vector2 localCoordinates = new Vector2(Gdx.input.getX(), Gdx.input.getY()); TransformMathUtils.globalToLocalCoordinates(entity, localCoordinates); if(dimensionsComponent.hit(localCoordinates.x, localCoordinates.y)) { buttonComponent.setTouchState(true); return true; } } buttonComponent.setTouchState(false); return false; } }