Search in sources :

Example 11 with LifecycleListener

use of com.badlogic.gdx.LifecycleListener in project libgdx by libgdx.

the class IOSGraphics method pause.

public void pause() {
    if (appPaused)
        return;
    appPaused = true;
    Array<LifecycleListener> listeners = app.lifecycleListeners;
    synchronized (listeners) {
        for (LifecycleListener listener : listeners) {
            listener.pause();
        }
    }
    app.listener.pause();
}
Also used : LifecycleListener(com.badlogic.gdx.LifecycleListener)

Example 12 with LifecycleListener

use of com.badlogic.gdx.LifecycleListener in project libgdx by libgdx.

the class Lwjgl3Application method loop.

private void loop() {
    Array<Lwjgl3Window> closedWindows = new Array<Lwjgl3Window>();
    while (running && windows.size > 0) {
        // FIXME put it on a separate thread
        if (audio instanceof OpenALAudio) {
            ((OpenALAudio) audio).update();
        }
        boolean haveWindowsRendered = false;
        closedWindows.clear();
        for (Lwjgl3Window window : windows) {
            window.makeCurrent();
            currentWindow = window;
            synchronized (lifecycleListeners) {
                haveWindowsRendered |= window.update();
            }
            if (window.shouldClose()) {
                closedWindows.add(window);
            }
        }
        GLFW.glfwPollEvents();
        boolean shouldRequestRendering;
        synchronized (runnables) {
            shouldRequestRendering = runnables.size > 0;
            executedRunnables.clear();
            executedRunnables.addAll(runnables);
            runnables.clear();
        }
        for (Runnable runnable : executedRunnables) {
            runnable.run();
        }
        if (shouldRequestRendering) {
            // in the following render.
            for (Lwjgl3Window window : windows) {
                if (!window.getGraphics().isContinuousRendering())
                    window.requestRendering();
            }
        }
        for (Lwjgl3Window closedWindow : closedWindows) {
            if (windows.size == 1) {
                // when there is only 1 window left, which is in the process of being disposed.
                for (int i = lifecycleListeners.size - 1; i >= 0; i--) {
                    LifecycleListener l = lifecycleListeners.get(i);
                    l.pause();
                    l.dispose();
                }
                lifecycleListeners.clear();
            }
            closedWindow.dispose();
            windows.removeValue(closedWindow, false);
        }
        if (!haveWindowsRendered) {
            // with continuous rendering disabled.
            try {
                Thread.sleep(1000 / config.idleFPS);
            } catch (InterruptedException e) {
            // ignore
            }
        }
    }
}
Also used : Array(com.badlogic.gdx.utils.Array) OpenALAudio(com.badlogic.gdx.backends.lwjgl3.audio.OpenALAudio) LifecycleListener(com.badlogic.gdx.LifecycleListener)

Example 13 with LifecycleListener

use of com.badlogic.gdx.LifecycleListener in project libgdx by libgdx.

the class AndroidFragmentApplication method initializeForView.

/** This method has to be called in the
	 * {@link Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)} method. It sets up all
	 * the things necessary to get input, render via OpenGL and so on. You can configure other aspects of the application with the
	 * rest of the fields in the {@link AndroidApplicationConfiguration} instance.
	 * <p/>
	 * Note: you have to return the returned view from
	 * {@link Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)}
	 * 
	 * @param listener the {@link ApplicationListener} implementing the program logic
	 * @param config the {@link AndroidApplicationConfiguration}, defining various settings of the application (use accelerometer,
	 *           etc.).
	 * @return the GLSurfaceView of the application */
public View initializeForView(ApplicationListener listener, AndroidApplicationConfiguration config) {
    if (this.getVersion() < MINIMUM_SDK) {
        throw new GdxRuntimeException("LibGDX requires Android API Level " + MINIMUM_SDK + " or later.");
    }
    setApplicationLogger(new AndroidApplicationLogger());
    graphics = new AndroidGraphics(this, config, config.resolutionStrategy == null ? new FillResolutionStrategy() : config.resolutionStrategy);
    input = AndroidInputFactory.newAndroidInput(this, getActivity(), graphics.view, config);
    audio = new AndroidAudio(getActivity(), config);
    files = new AndroidFiles(getResources().getAssets(), getActivity().getFilesDir().getAbsolutePath());
    net = new AndroidNet(this);
    this.listener = listener;
    this.handler = new Handler();
    this.clipboard = new AndroidClipboard(getActivity());
    // Add a specialized audio lifecycle listener
    addLifecycleListener(new LifecycleListener() {

        @Override
        public void resume() {
            audio.resume();
        }

        @Override
        public void pause() {
            audio.pause();
        }

        @Override
        public void dispose() {
            audio.dispose();
        }
    });
    Gdx.app = this;
    Gdx.input = this.getInput();
    Gdx.audio = this.getAudio();
    Gdx.files = this.getFiles();
    Gdx.graphics = this.getGraphics();
    Gdx.net = this.getNet();
    createWakeLock(config.useWakelock);
    useImmersiveMode(config.useImmersiveMode);
    if (config.useImmersiveMode && getVersion() >= Build.VERSION_CODES.KITKAT) {
        try {
            Class<?> vlistener = Class.forName("com.badlogic.gdx.backends.android.AndroidVisibilityListener");
            Object o = vlistener.newInstance();
            Method method = vlistener.getDeclaredMethod("createListener", AndroidApplicationBase.class);
            method.invoke(o, this);
        } catch (Exception e) {
            log("AndroidApplication", "Failed to create AndroidVisibilityListener", e);
        }
    }
    return graphics.getView();
}
Also used : FillResolutionStrategy(com.badlogic.gdx.backends.android.surfaceview.FillResolutionStrategy) Handler(android.os.Handler) LifecycleListener(com.badlogic.gdx.LifecycleListener) Method(java.lang.reflect.Method) GdxRuntimeException(com.badlogic.gdx.utils.GdxRuntimeException) GdxRuntimeException(com.badlogic.gdx.utils.GdxRuntimeException)

Example 14 with LifecycleListener

use of com.badlogic.gdx.LifecycleListener in project libgdx by libgdx.

the class HeadlessApplication method mainLoop.

void mainLoop() {
    Array<LifecycleListener> lifecycleListeners = this.lifecycleListeners;
    listener.create();
    // unlike LwjglApplication, a headless application will eat up CPU in this while loop
    // it is up to the implementation to call Thread.sleep as necessary
    long t = TimeUtils.nanoTime() + renderInterval;
    if (renderInterval >= 0f) {
        while (running) {
            final long n = TimeUtils.nanoTime();
            if (t > n) {
                try {
                    Thread.sleep((t - n) / 1000000);
                } catch (InterruptedException e) {
                }
                t = TimeUtils.nanoTime() + renderInterval;
            } else
                t = n + renderInterval;
            executeRunnables();
            graphics.incrementFrameId();
            listener.render();
            graphics.updateTime();
            // If one of the runnables set running to false, for example after an exit().
            if (!running)
                break;
        }
    }
    synchronized (lifecycleListeners) {
        for (LifecycleListener listener : lifecycleListeners) {
            listener.pause();
            listener.dispose();
        }
    }
    listener.pause();
    listener.dispose();
}
Also used : LifecycleListener(com.badlogic.gdx.LifecycleListener)

Example 15 with LifecycleListener

use of com.badlogic.gdx.LifecycleListener in project libgdx by libgdx.

the class AndroidApplication method init.

private void init(ApplicationListener listener, AndroidApplicationConfiguration config, boolean isForView) {
    if (this.getVersion() < MINIMUM_SDK) {
        throw new GdxRuntimeException("LibGDX requires Android API Level " + MINIMUM_SDK + " or later.");
    }
    setApplicationLogger(new AndroidApplicationLogger());
    graphics = new AndroidGraphics(this, config, config.resolutionStrategy == null ? new FillResolutionStrategy() : config.resolutionStrategy);
    input = AndroidInputFactory.newAndroidInput(this, this, graphics.view, config);
    audio = new AndroidAudio(this, config);
    // workaround for Android bug #10515463
    this.getFilesDir();
    files = new AndroidFiles(this.getAssets(), this.getFilesDir().getAbsolutePath());
    net = new AndroidNet(this);
    this.listener = listener;
    this.handler = new Handler();
    this.useImmersiveMode = config.useImmersiveMode;
    this.hideStatusBar = config.hideStatusBar;
    this.clipboard = new AndroidClipboard(this);
    // Add a specialized audio lifecycle listener
    addLifecycleListener(new LifecycleListener() {

        @Override
        public void resume() {
        // No need to resume audio here
        }

        @Override
        public void pause() {
            audio.pause();
        }

        @Override
        public void dispose() {
            audio.dispose();
        }
    });
    Gdx.app = this;
    Gdx.input = this.getInput();
    Gdx.audio = this.getAudio();
    Gdx.files = this.getFiles();
    Gdx.graphics = this.getGraphics();
    Gdx.net = this.getNet();
    if (!isForView) {
        try {
            requestWindowFeature(Window.FEATURE_NO_TITLE);
        } catch (Exception ex) {
            log("AndroidApplication", "Content already displayed, cannot request FEATURE_NO_TITLE", ex);
        }
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        setContentView(graphics.getView(), createLayoutParams());
    }
    createWakeLock(config.useWakelock);
    hideStatusBar(this.hideStatusBar);
    useImmersiveMode(this.useImmersiveMode);
    if (this.useImmersiveMode && getVersion() >= Build.VERSION_CODES.KITKAT) {
        try {
            Class<?> vlistener = Class.forName("com.badlogic.gdx.backends.android.AndroidVisibilityListener");
            Object o = vlistener.newInstance();
            Method method = vlistener.getDeclaredMethod("createListener", AndroidApplicationBase.class);
            method.invoke(o, this);
        } catch (Exception e) {
            log("AndroidApplication", "Failed to create AndroidVisibilityListener", e);
        }
    }
}
Also used : FillResolutionStrategy(com.badlogic.gdx.backends.android.surfaceview.FillResolutionStrategy) Handler(android.os.Handler) LifecycleListener(com.badlogic.gdx.LifecycleListener) Method(java.lang.reflect.Method) GdxRuntimeException(com.badlogic.gdx.utils.GdxRuntimeException) GdxRuntimeException(com.badlogic.gdx.utils.GdxRuntimeException)

Aggregations

LifecycleListener (com.badlogic.gdx.LifecycleListener)17 GdxRuntimeException (com.badlogic.gdx.utils.GdxRuntimeException)5 Handler (android.os.Handler)4 FillResolutionStrategy (com.badlogic.gdx.backends.android.surfaceview.FillResolutionStrategy)4 Method (java.lang.reflect.Method)3 Application (com.badlogic.gdx.Application)1 ApplicationType (com.badlogic.gdx.Application.ApplicationType)1 AndroidAudio (com.badlogic.gdx.backends.android.AndroidAudio)1 AndroidFiles (com.badlogic.gdx.backends.android.AndroidFiles)1 AndroidGraphics (com.badlogic.gdx.backends.android.AndroidGraphics)1 AndroidNet (com.badlogic.gdx.backends.android.AndroidNet)1 OpenALAudio (com.badlogic.gdx.backends.lwjgl3.audio.OpenALAudio)1 Array (com.badlogic.gdx.utils.Array)1 LWJGLException (org.lwjgl.LWJGLException)1