package info.u250.c2d.box2deditor.gdx.scenes;
import info.u250.c2d.engine.Engine;
import info.u250.c2d.engine.Scene;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Buttons;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
import com.badlogic.gdx.math.Vector2;
public class RightClickHelper implements Scene {
final protected MainScene adapter;
public RightClickHelper(MainScene adapter){
this.adapter = adapter;
}
public final Vector2 snapPoint = new Vector2();
@Override
public void update(float delta) {}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
ShapeRenderer render = Engine.getShapeRenderer();
render.setProjectionMatrix(Engine.getDefaultCamera().combined);
// draw the x,y axis
render.begin(ShapeType.Line);
render.setColor(Color.GREEN);
render.line(0, 0, Engine.getDefaultCamera().viewportWidth * Engine.getDefaultCamera().zoom, 0);
render.line(Engine.getDefaultCamera().viewportWidth * Engine.getDefaultCamera().zoom - 10, -5, Engine.getDefaultCamera().viewportWidth * Engine.getDefaultCamera().zoom, 0);
render.line(Engine.getDefaultCamera().viewportWidth * Engine.getDefaultCamera().zoom - 10, +5, Engine.getDefaultCamera().viewportWidth * Engine.getDefaultCamera().zoom, 0);
render.setColor(Color.RED);
render.line(0, 0, 0, Engine.getDefaultCamera().viewportHeight * Engine.getDefaultCamera().zoom);
render.line(5, Engine.getDefaultCamera().viewportHeight * Engine.getDefaultCamera().zoom - 10, 0, Engine.getDefaultCamera().viewportHeight * Engine.getDefaultCamera().zoom);
render.line(-5, Engine.getDefaultCamera().viewportHeight * Engine.getDefaultCamera().zoom - 10, 0,Engine.getDefaultCamera().viewportHeight * Engine.getDefaultCamera().zoom);
render.end();
render.begin(ShapeType.Line);
render.setColor(Color.BLACK);
for (int i = 0; i < (int) Engine.getDefaultCamera().viewportWidth / 10 * Engine.getDefaultCamera().zoom + 3; i++) {
float x = Engine.getDefaultCamera().position.x - Engine.getDefaultCamera().viewportWidth / 2 * Engine.getDefaultCamera().zoom + i * 10;
float y = Engine.getDefaultCamera().position.y - Engine.getDefaultCamera().viewportHeight / 2 * Engine.getDefaultCamera().zoom;
int length = 3;
if (i > 2) {
if (i % 10 == 0) {
length = 10;
Engine.getSpriteBatch().begin();
Engine.getDefaultFont().setColor(Color.YELLOW);
Engine.getDefaultFont().draw(Engine.getSpriteBatch(), (int) x + "", x - 10, y + 20* Engine.getDefaultCamera().zoom);
Engine.getSpriteBatch().end();
} else if (i % 5 == 0) {
length = 7;
}
render.line(x, y, x, y + length* Engine.getDefaultCamera().zoom);
}
}
render.end();
// draw the y number
render.begin(ShapeType.Line);
render.setColor(Color.BLACK);
for (int i = 0; i < (int) Engine.getDefaultCamera().viewportHeight / 10 * Engine.getDefaultCamera().zoom + 3; i++) {
float x = Engine.getDefaultCamera().position.x - Engine.getDefaultCamera().viewportWidth / 2 * Engine.getDefaultCamera().zoom;
float y = Engine.getDefaultCamera().position.y - Engine.getDefaultCamera().viewportHeight / 2* Engine.getDefaultCamera().zoom + i * 10;
int length = 3;
if (i > 2) {
if (i % 10 == 0) {
length = 10;
Engine.getSpriteBatch().begin();
Engine.getDefaultFont().setColor(Color.YELLOW);
Engine.getDefaultFont().draw(Engine.getSpriteBatch(), (int) y + "", x + 10, y + 10);
Engine.getSpriteBatch().end();
} else if (i % 5 == 0) {
length = 7;
}
render.line(x, y, x + length * Engine.getDefaultCamera().zoom, y);
}
}
Engine.getSpriteBatch().begin();
Engine.getDefaultFont().setScale(Engine.getDefaultCamera().zoom);
Engine.getDefaultFont().setColor(Color.YELLOW);
Engine.getDefaultFont().draw(Engine.getSpriteBatch(), "(0,0)",
Engine.getDefaultCamera().position.x - Engine.getDefaultCamera().viewportWidth / 2 * Engine.getDefaultCamera().zoom,
Engine.getDefaultCamera().position.y - (Engine.getDefaultCamera().viewportHeight / 2-20)* Engine.getDefaultCamera().zoom );
Engine.getSpriteBatch().end();
render.end();
}
@Override
public void show() {}
@Override
public void hide() {}
@Override
public InputProcessor getInputProcessor() {
return new InputAdapter(){
boolean moveCam = false;
Vector2 beginPosition = new Vector2();
@Override
public boolean mouseMoved(int x, int y) {
snapPoint.set(Engine.screenToWorld(x, y));
return super.mouseMoved(x, y);
}
@Override
public boolean touchDragged(int x, int y, int pointer) {
snapPoint.set(Engine.screenToWorld(x, y));
if(moveCam){
Vector2 now = new Vector2(x,y);
Engine.getDefaultCamera().position.x += beginPosition.x-x;
Engine.getDefaultCamera().position.y += -(beginPosition.y-y);
beginPosition = now;
adapter.callUI.updateCameraInfo();
}
return super.touchDragged(x, y, pointer);
}
@Override
public boolean touchDown(int x, int y, int pointer, int button) {
if(button == Buttons.RIGHT){
beginPosition.set(x,y);
moveCam = true;
}
return super.touchDown(x, y, pointer, button);
}
@Override
public boolean touchUp(int x, int y, int pointer, int button) {
moveCam = false;
// float offsetx = (Engine.getDefaultCamera().position.x-Engine.getDefaultCamera().viewportWidth/2)%16;
// float offsety = (Engine.getDefaultCamera().position.x-Engine.getDefaultCamera().viewportWidth/2)%16;
// if(offsetx!=0){
// Engine.getDefaultCamera().position.x -= offsetx;
// }
// if(offsety!=0){
// Engine.getDefaultCamera().position.y -= offsety;
// }
return super.touchUp(x, y, pointer, button);
}
@Override
public boolean scrolled(int amount) {
if(amount>0){
Engine.getDefaultCamera().zoom -= 0.05f;
}else{
Engine.getDefaultCamera().zoom += 0.05f;
}
if(Engine.getDefaultCamera().zoom<0.1f){
Engine.getDefaultCamera().zoom = 0.1f;
}
if(Engine.getDefaultCamera().zoom>3f){
Engine.getDefaultCamera().zoom = 3f;
}
adapter.callUI.updateCameraInfo();
return super.scrolled(amount);
}
};
}
}