package ddddbb.gui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import ddddbb.game.Scene4d; import ddddbb.game.Settings; import ddddbb.game.Settings.Axis3d; import ddddbb.game.Settings.Axis4d; import ddddbb.game.Settings.DiAxis3d; import ddddbb.game.Settings.DiAxis4d; import ddddbb.gen.IntStringModel; import ddddbb.math.AOP; import ddddbb.math.Camera3d; import ddddbb.math.Camera4d; public class UIAction { private final Settings ss; private final Scene4d scene; UIAction( Settings ss, Scene4d scene ) { this.ss = ss; this.scene = scene; } public void rotCam(double ph, int a1, int a2) { assert a1!=0 && a2!=0; int dim = ss.dim34.sel().dim(); if (a1<-dim || a1>dim || a2<-dim || a2>dim) return; if (dim==3) scene.rotCam3d(ph, a1, a2); else if (dim==4) scene.rotCam4d(ph, a1, a2); else assert false; } /** * Camera is rotated to the given direction. */ public ActionListener rotCamA(final int a1, final int a2) { return new ActionListener() { public void actionPerformed(ActionEvent e) { rotCam(AOP.deg,a1,a2); } }; } /** * Camera is translated inverted to the given direction, * so that the scene seems to be moved in the given direction */ public ActionListener transCam(final int axis) { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { transCam(axis,0.1); } }; } public void transCam(final int axis, double d) { assert axis!=0; int dim = ss.dim34.sel().dim(); if (axis<-dim || axis>dim) return; if (dim==3) scene.camera3d.trans(axis,d,scene.viewAbsRel.isSelected()); else if (dim==4) scene.camera4d.trans(axis,d, scene.viewAbsRel.isSelected()); else assert false; } public ActionListener transCam3dAction(final int axis) { return scene.camera3d.transAction(axis, scene.viewAbsRel); } public ActionListener transCam4dAction(final int axis) { return scene.camera4d.transAction(axis, scene.viewAbsRel); } public ActionListener rotCam3dAction(final int a1, final int a2) { return new ActionListener() { public void actionPerformed(ActionEvent e) { scene.rotCam3d(AOP.deg,a1,a2); } }; } public ActionListener rotCam4dAction(final int a1, final int a2) { return new ActionListener() { public void actionPerformed(ActionEvent e) { scene.rotCam4d(AOP.deg,a1,a2); } }; } public void transCamByHoriz(double d) { int dim =ss.dim34.sel().dim(); if (dim==3) { Axis3d a = ss.mouseTransAxes3d.sel1(); scene.camera3d.trans(a.axis(),d,scene.viewAbsRel.isSelected()); } if (dim==4) { Axis4d a = ss.mouseTransAxes4d.sel1(); scene.camera4d.trans(a.axis(),d,scene.viewAbsRel.isSelected()); } } public void transCamByVertic(double d) { int dim =ss.dim34.sel().dim(); if (dim==3) { Axis3d a = ss.mouseTransAxes3d.sel2(); scene.camera3d.trans(a.axis(),d,scene.viewAbsRel.isSelected()); } if (dim==4) { Axis4d a = ss.mouseTransAxes4d.sel2(); scene.camera4d.trans(a.axis(),d,scene.viewAbsRel.isSelected()); } } public void rotCamByHoriz(double ph) { int dim =ss.dim34.sel().dim(); if (dim==3) { DiAxis3d da = ss.mouseRotDiAxes3d.sel1(); scene.rotCam3d(ph, da.axis1(), da.axis2()); } if (dim==4) { DiAxis4d da = ss.mouseRotDiAxes4d.sel1(); scene.rotCam4d(ph, da.axis1(), da.axis2()); } } public void rotCamByVertic(double ph) { int dim =ss.dim34.sel().dim(); if (dim==3) { DiAxis3d da = ss.mouseRotDiAxes3d.sel2(); scene.rotCam3d(ph,da.axis1(),da.axis2()); } if (dim==4) { DiAxis4d da = ss.mouseRotDiAxes4d.sel2(); scene.rotCam4d(ph,da.axis1(),da.axis2()); } } public ActionListener rotCamByHorizA(final double ph) { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { rotCamByHoriz(ph); } }; } public ActionListener rotCamByVerticA(final double ph) { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { rotCamByVertic(ph); } }; } public ActionListener transCamByHorizA(final double d) { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { transCamByHoriz(d); } }; } public ActionListener transCamByVerticA(final double d) { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { transCamByVertic(d); } }; } public ActionListener setTo3d=new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ss.dim34.setSel(Settings.Dim.D3); } }; public ActionListener setTo4d = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ss.dim34.setSel(Settings.Dim.D4); } }; public ActionListener resetCam3d = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { scene.camera3d.notify = false; scene.camera3d.setToDefault(); scene.camera3d.notify = true; scene.camera3d.setOrientation(ss.orientation3d.sel().value()); } }; public ActionListener resetCam4d = new ActionListener() { public void actionPerformed(ActionEvent e) { scene.camera4d.setToDefault(); scene.camera4d.setOrientation(ss.orientation4d.sel().value()); scene.camera4d.setZoom(ss.zoom.getDouble()); //Settings.zoom.setToDefault(); } }; public ActionListener resetCam = new ActionListener() { public void actionPerformed(ActionEvent e) { if (ss.dim34.sel()==Settings.Dim.D3) { resetCam3d.actionPerformed(null); } else if (ss.dim34.sel()==Settings.Dim.D4) { resetCam4d.actionPerformed(null); } } }; }