MainMenu.java :  » Game » analygraphchess » computergraphicsproject » Engines » Java Open Source

Java Open Source » Game » analygraphchess 
analygraphchess » computergraphicsproject » Engines » MainMenu.java
/*
 * 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) {
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.