package ddddbb.gui;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import ddddbb.game.Level;
import ddddbb.game.Settings;
import ddddbb.gen.MyChangeListener;
public class MouseControl implements MouseListener, MouseMotionListener, MyChangeListener {
private int mouseX;
private int mouseY;
private double frx;
private double fry;
private double ftx;
private double fty;
private final Settings ss;
private final Level scene;
private final UIAction ua;
public MouseControl(
Settings _ss,
Level _scene
) {
ss = _ss;
scene = _scene;
ua = new UIAction(ss,scene);
ss.xdpcm.addChangeListener(this);
ss.ydpcm.addChangeListener(this);
ss.mouseTransSens.addChangeListener(this);
ss.mouseRotSens.addChangeListener(this);
stateChanged();
}
public void mouseClicked(MouseEvent e) {
// System.out.println(Main.opt.viewScreen.isFocusOwner() + " " + Main.opt.viewScreen );
// ShowedScreen.MAIN.panel().requestFocusInWindow();
// System.out.println(Main.opt.showedScreen.getSelectedObject().panel().isFocusOwner() + " " + Main.opt.showedScreen.getSelectedObject().panel());
// Container r = ShowedScreen.MAIN.panel().getFocusCycleRootAncestor();
// FocusTraversalPolicy f = r.getFocusTraversalPolicy();
// System.out.println(r.isFocusOwner() + " cycle root " + r);
// System.out.println(f.getFirstComponent(r).isFocusOwner() + " first component " + f.getFirstComponent(r));
// System.out.println(f.getLastComponent(r).isFocusOwner() + " last component " + f.getLastComponent(r));
}
public void mouseEntered(MouseEvent e) {
// ((JPanel)(e.getSource())).requestFocus();
}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
}
public void mouseReleased(MouseEvent arg0) {}
public void mouseDragged(MouseEvent e) {
int transrot = 0;
int m = e.getModifiersEx();
boolean shiftPressed = (e.getModifiers() & InputEvent.SHIFT_MASK) == InputEvent.SHIFT_MASK;
//System.out.println(m + "," + shiftPressed);
// System.out.println(e.getButton());
if ((m&InputEvent.BUTTON1_DOWN_MASK)==InputEvent.BUTTON1_DOWN_MASK) transrot=1;
if ((m&InputEvent.BUTTON3_DOWN_MASK)==InputEvent.BUTTON3_DOWN_MASK) transrot=0;
if (shiftPressed && transrot==1) {
ss.zoom.setDouble(ss.zoom.getDouble()+(e.getY()-mouseY)*fry);
}
else switch (transrot) {
case 0: // translate
if (shiftPressed) {
ua.transCam(4,(e.getX()-mouseX)*ftx);
ua.transCam(3,-(e.getY()-mouseY)*fty);
}
else {
ua.transCamByHoriz((e.getX()-mouseX)*ftx);
ua.transCamByVertic(-(e.getY()-mouseY)*fty);
}
break;
case 1: // rotate
ua.rotCamByHoriz((e.getX()-mouseX)*frx);
ua.rotCamByVertic(-(e.getY()-mouseY)*fry);
break;
}
mouseX = e.getX();
mouseY = e.getY();
// int first=4,second=4,i;
// for (i=0;i<4;i++) {
// if (absRot[i] == true) { first = i;
// for (i=first+1;i<4;i++) {
// if (absRot[i] == true) {
// //2 of 4 keys pressed
// second = i;
//// System.out.println(first + "+" + second);
// Main.model.camera.rotate((e.getY()-mouseY)/360.0,absDirec[first],absDirec[second]);
//// System.out.println(e.getX());
// leave(e);
// return;
// }
// }
// //exactly 1 of 4 keys pressed
// Main.model.camera.move((e.getY()-mouseY)/100.0,absDirec[first]);
// leave(e);
// return;
// }
// }
// for (i=0;i<4;i++) {
// if (viewRot[i] == true ) {
// Direc[] viewDirec = {
// new Direc(Main.model.camera.getV1()),
// new Direc(Main.model.camera.getV2()),
// new Direc(Main.model.camera.getV3()),
// new Direc(Main.model.camera.getV4())
// };
// first = i;
// for (i=first+1;i<4;i++) {
// if (viewRot[i] == true) {
// //pressed 2 of 4 keys
// second = i;
// Main.model.camera.rotate((e.getY()-mouseY)/90.0,viewDirec[first],viewDirec[second]);
// leave(e);
// return;
// }
// }
// //pressed exactly 1 of 4 keys
// Main.model.camera.move((e.getY()-mouseY)/100.0,viewDirec[first]);
// viewPanel.repaint();
// leave(e);
// return;
// }
// }
}
public void mouseMoved(MouseEvent arg0) {}
public void stateChanged() {
frx = ss.mouseRotSens.getDouble()/ss.xdpcm.getDouble();
fry = ss.mouseRotSens.getDouble()/ss.ydpcm.getDouble();
ftx = ss.mouseTransSens.getDouble()/ss.xdpcm.getDouble();
fty = ss.mouseTransSens.getDouble()/ss.ydpcm.getDouble();
}
}