package com.uwsoft.editor.view.stage.tools; import com.badlogic.ashley.core.Entity; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.math.Vector2; import com.uwsoft.editor.proxy.ProjectManager; import com.uwsoft.editor.proxy.ResourceManager; import com.uwsoft.editor.view.stage.Sandbox; import com.uwsoft.editor.Overlap2DFacade; import com.vo.SceneConfigVO; /** * Created by CyberJoe on 5/1/2015. */ public class PanTool extends SimpleTool { private static final String EVENT_PREFIX = "com.uwsoft.editor.view.stage.tools.PanTool"; public static final String SCENE_PANNED = EVENT_PREFIX + ".SCENE_PANNED"; public static final String NAME = "PAN_TOOL"; private Vector2 lastCoordinates; @Override public String getName() { return NAME; } @Override public void initTool() { } @Override public boolean stageMouseDown(float x, float y) { lastCoordinates = new Vector2(Gdx.input.getX(), Gdx.input.getY()); return false; } @Override public void stageMouseUp(float x, float y) { } @Override public void stageMouseDragged(float x, float y) { doPanning(x, y); } @Override public void stageMouseDoubleClick(float x, float y) { } @Override public boolean itemMouseDown(Entity entity, float x, float y) { lastCoordinates = new Vector2(Gdx.input.getX(), Gdx.input.getY()); return true; } @Override public void itemMouseUp(Entity entity, float x, float y) { } @Override public void itemMouseDragged(Entity entity, float x, float y) { doPanning(x, y); } @Override public void itemMouseDoubleClick(Entity entity, float x, float y) { } private void doPanning(float x, float y) { Sandbox sandbox = Sandbox.getInstance(); ResourceManager resourceManager = Overlap2DFacade.getInstance().retrieveProxy(ResourceManager.NAME); OrthographicCamera camera = sandbox.getCamera(); float currX = camera.position.x + (lastCoordinates.x - Gdx.input.getX()) * camera.zoom / resourceManager.getProjectVO().pixelToWorld; float currY = camera.position.y + (Gdx.input.getY() - lastCoordinates.y) * camera.zoom / resourceManager.getProjectVO().pixelToWorld; sandbox.getCamera().position.set(currX, currY, 0); lastCoordinates = new Vector2(Gdx.input.getX(), Gdx.input.getY()); Overlap2DFacade.getInstance().sendNotification(SCENE_PANNED); // Save the current position // TODO: (this has to move to some kind of mediator that listens to scene panned event) ProjectManager projectManager = Overlap2DFacade.getInstance().retrieveProxy(ProjectManager.NAME); SceneConfigVO sceneConfigVO = projectManager.getCurrentSceneConfigVO(); sceneConfigVO.cameraPosition[0] = sandbox.getCamera().position.x; sceneConfigVO.cameraPosition[1] = sandbox.getCamera().position.y; } }