com.google.gwt.maeglin89273.game.mengine.core.MEngine.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.maeglin89273.game.mengine.core.MEngine.java

Source

package com.google.gwt.maeglin89273.game.mengine.core;

import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ContextMenuEvent;
import com.google.gwt.event.dom.client.ContextMenuHandler;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseWheelEvent;
import com.google.gwt.event.dom.client.MouseWheelHandler;

import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.event.dom.client.MouseUpHandler;
import com.google.gwt.maeglin89273.game.mengine.game.Game;
import com.google.gwt.maeglin89273.game.mengine.game.GameInfo;
import com.google.gwt.maeglin89273.game.mengine.game.GeneralGame;
import com.google.gwt.maeglin89273.game.mengine.layer.Camera;
import com.google.gwt.maeglin89273.game.mengine.physics.CoordinateConverter;
import com.google.gwt.maeglin89273.game.mengine.physics.Point;

import com.google.gwt.storage.client.Storage;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
 * @author Maeglin Liao
 *
 */
public class MEngine {

    private static Canvas canvas;
    private static Storage storage;

    private static GameInfo gameInfo;
    private static GeneralGame game;

    private static GameExecutor gameExecutor;
    private static AssetManager assetManager;
    private static MousePosition mousePosition;
    private static HandlersManager handlersManager;
    private static Cipher cipher;

    public static void init(Game game, String assetsPrefix) {

        if (!(Canvas.isSupported() && Storage.isLocalStorageSupported())) {
            RootPanel.get().add(new Anchor("Sorry,your browser doesn't support HTML5.Go get Chrome!",
                    "http://chrome.google.com"));
            return;
        }
        canvas = Canvas.createIfSupported();
        storage = Storage.getLocalStorageIfSupported();

        gameInfo = game.getGameInfo();

        gameExecutor = new GameExecutor(game, canvas);
        assetManager = new AssetManager(assetsPrefix);
        mousePosition = new MousePosition(canvas);
        handlersManager = new HandlersManager(canvas);
        cipher = new Cipher();

        assetManager.loadAssetsBundle(gameInfo.getAssetsBundle());
        Camera.setCameraSize(gameInfo.getWidth(), gameInfo.getHeight());
        CoordinateConverter.init(gameInfo.getWidth(), gameInfo.getHeight());

        setupCanvas();

        game.init();
    }

    public static void init(GeneralGame game, String assetsPrefix) {
        MEngine.game = game;
        MEngine.init((Game) game, assetsPrefix);
    }

    public static GeneralGame getGeneralGame() {
        return game;
    }

    public static void setRedrawAlpha(float alpha) {
        try {
            gameExecutor.setRedrawAlpha(alpha);
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    private static void setupCanvas() {
        canvas.setPixelSize(gameInfo.getWidth(), gameInfo.getHeight());
        canvas.setCoordinateSpaceWidth(gameInfo.getWidth());
        canvas.setCoordinateSpaceHeight(gameInfo.getHeight());
        canvas.addStyleName("canvas");

        canvas.addMouseMoveHandler(mousePosition);//do not use handlersManager to add MouseMoveEventHandler,because the deliverer may remove it.
        canvas.addDomHandler(new ContextMenuHandler() {

            @Override
            public void onContextMenu(ContextMenuEvent event) {
                event.preventDefault();
                event.stopPropagation();
            }
        }, ContextMenuEvent.getType());
        canvas.addMouseWheelHandler(new MouseWheelHandler() {

            @Override
            public void onMouseWheel(MouseWheelEvent event) {
                event.preventDefault();
                event.stopPropagation();
            }
        });
        hideDraggingCursor(canvas.getCanvasElement());

        VerticalPanel vp = new VerticalPanel();
        vp.addStyleName("center");
        vp.add(canvas);
        RootPanel.get("content").add(vp);
        Window.scrollTo(canvas.getAbsoluteLeft() + (canvas.getOffsetWidth() - Window.getClientWidth()) / 2,
                canvas.getAbsoluteTop() + (canvas.getOffsetHeight() - Window.getClientHeight()) / 2);

    }

    public static void start() {
        try {
            gameExecutor.start();
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static boolean isPause() {
        try {
            return gameExecutor.isPause();
        } catch (NullPointerException e) {
            throwsUninitException();
            return true;
        }
    }

    public static void pause() {
        try {
            gameExecutor.pause();
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static void play() {
        try {
            gameExecutor.play();
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static AssetManager getAssetManager() {
        return assetManager;
    }

    public static GameExecutor getGameExecutor() {
        return gameExecutor;
    }

    public static HandlersManager getHandlersManager() {
        return handlersManager;
    }

    public static Point getMousePosition() {
        try {
            return mousePosition.getPosition();
        } catch (NullPointerException e) {
            throwsUninitException();
            return null;
        }
    }

    public static Storage getLocalStorage() {
        return storage;
    }

    public static Cipher getCipher() {
        return cipher;
    }

    public static void addKeyDownHandler(KeyDownHandler h) {
        try {
            handlersManager.addKeyDownHandler(h);
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static void addKeyUpHandler(KeyUpHandler h) {
        try {
            handlersManager.addKeyUpHandler(h);
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static void addMouseMoveHandler(MouseMoveHandler h) {
        try {
            handlersManager.addMouseMoveHandler(h);
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static void addMouseDownHandler(MouseDownHandler h) {
        try {
            handlersManager.addMouseDownHandler(h);
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static void addMouseUpHandler(MouseUpHandler h) {
        try {
            handlersManager.addMouseUpHandler(h);
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static void addMouseWheelHandler(MouseWheelHandler h) {
        try {
            handlersManager.addMouseWheelHandler(h);
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static void addKeyPressHandler(KeyPressHandler h) {
        try {
            handlersManager.addKeyPressHandler(h);
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static void addClickHandler(ClickHandler h) {
        try {
            handlersManager.addClickHandler(h);
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static void addMouseOutHandler(MouseOutHandler h) {
        try {
            handlersManager.addMouseOutHandler(h);
        } catch (NullPointerException e) {
            throwsUninitException();
        }
    }

    public static Canvas getCanvas() {
        return canvas;
    }

    private static void throwsUninitException() {
        throw new IllegalStateException(
                "The MEngine hasn't been initialized.Please call the init method to initialize it.");
    }

    private static native void hideDraggingCursor(Element e) /*-{ 
                                                             e.onselectstart = function() { 
                                                             return false; 
                                                             };
                                                             e = null; 
                                                             }-*/;

}