package ddddbb.game;
import java.applet.Applet;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JPanel;
import ddddbb.gen.AChangeListener;
import ddddbb.gen.BoolModel;
import ddddbb.gen.IntModel;
import ddddbb.gui.AdjustmentPane;
import ddddbb.gui.ContentPane;
import ddddbb.gui.KeyControl;
import ddddbb.gui.LinkEnabledTextPane;
import ddddbb.gui.ViewPane;
import ddddbb.gui.ViewScreen;
import ddddbb.sound.SoundEnum;
public final class Main {
public static final String title = "4D Building Blocks";
public static final String[] axisNames = { "x", "y", "z", "w" };
public static final BoolModel debug = new BoolModel(true,"Debug");
public static class ShowedScreenEnum extends IntModel<JPanel> {
public final AdjustmentPane ADJUSTMENT;
public final ViewPane MAIN;
public final JPanel DOCUMENTATION;
public final JPanel ABOUT;
ShowedScreenEnum(Settings ss, Level scene, Scene4d goalScene, Container window) {
ADJUSTMENT = new AdjustmentPane(ss, window);
//KEYCONTROL = new KeyControlPanel();
MAIN = new ViewPane(ss,scene,goalScene);
MAIN.addKeyListener(new KeyControl(ss,scene));
DOCUMENTATION = new LinkEnabledTextPane(LinkEnabledTextPane.class.getResource("documentation.html"),window);
ABOUT = new LinkEnabledTextPane(LinkEnabledTextPane.class.getResource("about.html"),window);
super.init(MAIN,new String[] {"Adjustment", "Scene", "Documentation", "About"},
new JPanel[] { ADJUSTMENT, MAIN, DOCUMENTATION, ABOUT });
}
}
public final ShowedScreenEnum showedScreen;
public final Level scene;
public final Scene4d goalScene;
// public static final ViewScreen viewScreen;
public final JPanel contentPane;
public final ViewScreen viewScreen;
public final Settings ss =new Settings();
public final Container window;
public final PersistentPreferences prefs;
public Main(Container _window) {
window = _window;
if (window instanceof Applet) {
prefs = null;
window.setPreferredSize(new Dimension(Settings.defaultWidth, Settings.defaultHeight));
}
else {
prefs = new PersistentPreferences.User(ss,window);
prefs.load();
}
scene = new Level(ss);
goalScene = scene.cloneCamRefs();
new AChangeListener() {
public void stateChanged() {
scene.changeObjective(ss.objectives.sel());
goalScene.setCompounds(new int[][][] {ss.objectives.sel().goal});
}}.addTo(ss.objectives);
showedScreen = new ShowedScreenEnum(ss,scene, goalScene,window);
viewScreen = ((ViewPane)showedScreen.MAIN).viewScreen;
scene.viewScreen = viewScreen;
contentPane = new ContentPane(showedScreen);
new AChangeListener() {
public void stateChanged() {
if (ss.gameStatus.sel() == Settings.GameStatus.REACHED) {
//viewScreen.repaint(); //why does this not work?
if (ss.objectives.selInt() < ss.objectives.getSize()-1) { //before last level
ss.objectives.setSelInt(ss.objectives.selInt()+1);
SoundEnum.GOALREACHED.play();
}
else {
assert ss.objectives.selInt() == ss.objectives.getSize()-1;
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SoundEnum.GAMECOMPLETED.play();
}
}
if (ss.gameStatus.sel() == Settings.GameStatus.MISSED) {
SoundEnum.GOALMISSED.play();
ss.objectives.setSelInt(ss.objectives.selInt());
}
}
}.addTo(ss.gameStatus);
// Properties props = new Properties();
// try {
// props.load(Main.class.getResourceAsStream("application.properties"));
// } catch (FileNotFoundException e) {
// assert false;
// e.printStackTrace();
// } catch (IOException e) {
// assert false;
// e.printStackTrace();
// }
}
public void afterPackHook() {
showedScreen.MAIN.requestFocusInWindow();
}
}