/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package computergraphicsproject.Engines;
import computergraphicsproject.Engines.InputHandling.MouseEvent;
import computergraphicsproject.Engines.InputHandling.KeyboardEvent;
import computergraphicsproject.Engines.InputHandling.InputHandler;
import computergraphicsproject.SceneManagement.XMLSceneManager;
import computergraphicsproject.model.Lights.LightModel;
import computergraphicsproject.model.Menus.ChessLogo;
import computergraphicsproject.model.Menus.MenuItem;
import computergraphicsproject.model.Menus.PreviewImage;
import computergraphicsproject.model.Scenes.Scene;
import computergraphicsproject.utilities.Point3D;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.lwjgl.opengl.GL11;
/**
*
* @author hussein
*/
public class MainMenu implements Runnable, InputHandler {
private final Object signal = new Object();
private SignalType lastSignalType;
private int objectID;
private int buttonID;
private boolean stillPressed;
private static MenuItem[] menuItems = null;
private ChessLogo chesslogo;
private PreviewImage previewImage = null;
/**
*
* @param type
*/
public void signal(SignalType type) {
lastSignalType = type;
synchronized (signal) {
signal.notify();
}
}
private void init() {
Scene introScene = new Scene("/computergraphicsproject/media/graphics/scenes/Intro/2.obj");
introScene.setIncludeSkyBox(true);
introScene.setLights(
new LightModel[]{
new LightModel(GL11.GL_LIGHT0,
new float[]{1.0f, 1.0f, 1.0f, 1.0f},
new float[]{1, 1f, 1f, 0.6f},
new float[]{0, 0, 0, 1},
new float[]{0, 0, 1.0f, 0})});
GameEngine.getInstance().getGraphicsEngine().getCameraHandler().setPosition(1300, 300, 4700);
GameEngine.getInstance().getGraphicsEngine().getCameraHandler().setTargetPoint(6000, 5800, -370);
Point3D startPos = new Point3D(1300, 300, 4700);
Point3D endPos = new Point3D(1600, 200, 4600);
Point3D dirPos = new Point3D(1500, 500, 4650);
Point3D startTarget = new Point3D(6000, 2100, -370);
Point3D endTarget = new Point3D(2000, 2200, -500);
Point3D dirTarget = new Point3D(5500, 2200, -400);
GameEngine.getInstance().getGraphicsEngine().getCameraHandler().animateCameraOnBezierCurve(startPos, endPos, dirPos, startTarget, endTarget, dirTarget, 0.0005f);
GameEngine.getInstance().getGraphicsEngine().getCameraHandler().enableAnimation();
GameEngine.getInstance().getGraphicsEngine().addScene(introScene);
new SoundPlayer("/computergraphicsproject/media/sound/ingamesounds/intro.mp3").play();
}
private void initMenus() {
if (menuItems != null) {
return;
}
chesslogo = new ChessLogo();
menuItems = new MenuItem[20];
menuItems[0] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item1mod.obj",
IDManager.addID("mainmenunewgame"), 1);
menuItems[1] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item2mod.obj",
IDManager.addID("mainmenuoptions"), 2);
menuItems[2] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item3mod.obj",
IDManager.addID("mainmenuhelp"), 3);
menuItems[3] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item4mod.obj",
IDManager.addID("mainmenuabout"), 4);
menuItems[4] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item5mod.obj",
IDManager.addID("mainmenuexit"), 5);
menuItems[5] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item11mod.obj",
IDManager.addID("mainmenuwhite"), 2);
menuItems[6] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item12mod.obj",
IDManager.addID("mainmenublack"), 3);
menuItems[7] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item111mod.obj",
IDManager.addID("mainmenuveryeasy"), 0);
menuItems[8] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item112mod.obj",
IDManager.addID("mainmenueasy"), 1);
menuItems[9] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item113mod.obj",
IDManager.addID("mainmenumedium"), 2);
menuItems[10] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item114mod.obj",
IDManager.addID("mainmenuhard"), 3);
menuItems[11] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/items/item115mod.obj",
IDManager.addID("mainmenuveryhard"), 4);
menuItems[12] =
new MenuItem("/computergraphicsproject/media/graphics/objects/InGameMenu/Next.obj",
IDManager.addID("next"), 3);
menuItems[13] =
new MenuItem("/computergraphicsproject/media/graphics/objects/InGameMenu/Previous.obj",
IDManager.addID("previous"), 4);
menuItems[14] =
new MenuItem("/computergraphicsproject/media/graphics/objects/InGameMenu/Select.obj",
IDManager.addID("selectscene"), 5);
menuItems[15] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/Analygraph.obj",
IDManager.addID("mainmenuanalygraph"), 1);
menuItems[16] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/sound.obj",
IDManager.addID("mainmenusound"), 2);
menuItems[17] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/yes.obj",
IDManager.addID("mainmenuyes"), 1);
menuItems[18] =
new MenuItem("/computergraphicsproject/media/graphics/objects/MainMenu/No.obj",
IDManager.addID("mainmenuno"), 2);
}
public void run() {
boolean isWhite = false;
int difficulity = 0;
initMenus();
init();
while (true) {
displayMenu(0);
try {
synchronized (signal) {
signal.wait(); // wait for event in this case its a left mouse click
}
} catch (InterruptedException ex) {
}
if (objectID == IDManager.getID("mainmenunewgame")) { // after event
displayMenu(1);
while (true) {
try {
synchronized (signal) {
signal.wait(); // wait for the second menu
}
} catch (InterruptedException ex) {
}
if (objectID == IDManager.getID("mainmenuwhite")) {
isWhite = true;
break;
} else if (objectID == IDManager.getID("mainmenublack")) {
isWhite = false;
break;
}
}
displayMenu(2);
while (true) {
try {
synchronized (signal) {
signal.wait(); // wait for the third menu
}
} catch (InterruptedException ex) {
}
if (objectID == IDManager.getID("mainmenuveryeasy")) {
difficulity = 1000;
break;
} else if (objectID == IDManager.getID("mainmenueasy")) {
difficulity = 2000;
break;
} else if (objectID == IDManager.getID("mainmenumedium")) {
difficulity = 6000;
break;
} else if (objectID == IDManager.getID("mainmenuhard")) {
difficulity = 9000;
break;
} else if (objectID == IDManager.getID("mainmenuveryhard")) {
difficulity = 15000;
break;
}
}
Scene[] scenes = XMLSceneManager.getAllSceneFiles();
PreviewImage[] previewImages = new PreviewImage[scenes.length];
for (int i = 0; i < scenes.length; i++) {
previewImages[i] = new PreviewImage(scenes[i].getPreviewPath());
}
int i = 0;
while (true) {
previewImage = previewImages[i];
displayMenu(3);
try {
synchronized (signal) {
signal.wait(); // wait for the fourth menu
}
} catch (InterruptedException ex) {
}
if (objectID == IDManager.getID("next")) {
i++;
if (i == scenes.length) {
i = 0;
}
continue;
} else if (objectID == IDManager.getID("previous")) {
i--;
if (i == -1) {
i = scenes.length - 1;
}
continue;
} else if (objectID == IDManager.getID("selectscene")) {
break;
}
}
GameEngine.getInstance().setGameParameters(isWhite, difficulity, scenes[i]);
GameEngine.getInstance().signal(SignalType.StartGame); // user click on any button on the second menu
return;
} else if (objectID == IDManager.getID("mainmenuoptions")) {
while (true) {
displayMenu(4);
synchronized (signal) {
try {
signal.wait(); // wait for the fourth menu
} catch (InterruptedException ex) {
Logger.getLogger(MainMenu.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (objectID == IDManager.getID("previous")) {
break;
} else if (objectID == IDManager.getID("mainmenuanalygraph")) {
displayMenu(5);
synchronized (signal) {
try {
signal.wait(); // wait for the fourth menu
} catch (InterruptedException ex) {
Logger.getLogger(MainMenu.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (objectID == IDManager.getID("mainmenuyes")) {
SettingsManager.setParameter("analygraph", "on");
continue;
} else if (objectID == IDManager.getID("mainmenuno")) {
SettingsManager.setParameter("analygraph", "off");
continue;
}
} else if (objectID == IDManager.getID("mainmenusound")) {
displayMenu(5);
synchronized (signal) {
try {
signal.wait(); // wait for the fourth menu
} catch (InterruptedException ex) {
Logger.getLogger(MainMenu.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (objectID == IDManager.getID("mainmenuyes")) {
SettingsManager.setParameter("sound", "on");
continue;
} else if (objectID == IDManager.getID("mainmenuno")) {
SettingsManager.setParameter("sound", "off");
continue;
}
}
}
} else if (objectID == IDManager.getID("mainmenuexit")) {
GameEngine.getInstance().signal(SignalType.Exit); // exit game
return;
}
}
}
private void displayMenu(int menuID) {
GraphicsEngine engine = GameEngine.getInstance().getGraphicsEngine();
engine.removeAllMenus(); // Clear all previous menus
switch (menuID) {
case 0:
engine.addMenu(chesslogo);
engine.addMenu(menuItems[0]);
engine.addMenu(menuItems[1]);
engine.addMenu(menuItems[2]);
engine.addMenu(menuItems[3]);
engine.addMenu(menuItems[4]);
break;
case 1:
engine.addMenu(chesslogo);
engine.addMenu(menuItems[5]);
engine.addMenu(menuItems[6]);
break;
case 2:
engine.addMenu(chesslogo);
engine.addMenu(menuItems[7]);
engine.addMenu(menuItems[8]);
engine.addMenu(menuItems[9]);
engine.addMenu(menuItems[10]);
engine.addMenu(menuItems[11]);
break;
case 3:
engine.addMenu(chesslogo);
engine.addMenu(previewImage);
engine.addMenu(menuItems[12]);
engine.addMenu(menuItems[13]);
engine.addMenu(menuItems[14]);
break;
case 4:
engine.addMenu(chesslogo);
engine.addMenu(menuItems[15]);
engine.addMenu(menuItems[16]);
engine.addMenu(menuItems[13]);
break;
case 5:
engine.addMenu(chesslogo);
engine.addMenu(menuItems[17]);
engine.addMenu(menuItems[18]);
break;
}
}
public void mousePressed(MouseEvent event) {
this.objectID = event.getObjectID();
this.buttonID = event.getButtonID();
this.stillPressed = event.isStillPressed();
if (buttonID == 0 && !stillPressed && objectID != 0 && objectID != 9999) // left mouse click only and avoid detecting a click more than once
{
new SoundPlayer("/computergraphicsproject/media/sound/ingamesounds/game_status.mp3").play();
signal(SignalType.MouseSignal);
}
}
public void keyPressed(KeyboardEvent event) {
}
}
|