All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.czyzby.lml.parser.impl.AbstractLmlView Maven / Gradle / Ivy

package com.github.czyzby.lml.parser.impl;

import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.github.czyzby.kiwi.util.gdx.asset.Disposables;
import com.github.czyzby.kiwi.util.gdx.asset.StatefulDisposable;
import com.github.czyzby.lml.parser.LmlView;
import com.github.czyzby.lml.parser.action.ActionContainer;
import com.github.czyzby.lml.util.LmlUtilities;

/** Abstract base for a LML view. Manages {@link Stage} and lets the view be used as an {@link ActionContainer}.
 * Disposable; calling {@link #dispose()} destroys the stage.
 *
 * @author MJ */
public abstract class AbstractLmlView implements LmlView, ActionContainer, StatefulDisposable {
    private Stage stage;
    private boolean disposed;

    /** @param stage will be filled with actors when the view is passed to a LML parser. Should not be null. */
    public AbstractLmlView(final Stage stage) {
        this.stage = stage;
    }

    @Override
    public Stage getStage() {
        return stage;
    }

    /** @param stage will be set as the stage currently used as this view. Should not be null. */
    public void setStage(final Stage stage) {
        this.stage = stage;
    }

    /** Updates and draws {@link Stage}. */
    public void render() {
        stage.act();
        stage.draw();
    }

    /** Updates and draws {@link Stage}.
     *
     * @param delta time passed since last update. */
    public void render(final float delta) {
        stage.act(delta);
        stage.draw();
    }

    /** Updates stage's viewport.
     *
     * @param width new width of the screen.
     * @param height new height of the screen. */
    public void resize(final int width, final int height) {
        stage.getViewport().update(width, height);
    }

    /** Updates stage's viewport.
     *
     * @param width new width of the screen.
     * @param height new height of the screen.
     * @param centerCamera false by default. Some viewports seem to require it to be true for proper behavior (
     *            {@link com.badlogic.gdx.utils.viewport.ScreenViewport}, for example). */
    public void resize(final int width, final int height, final boolean centerCamera) {
        stage.getViewport().update(width, height, centerCamera);
    }

    /** Utility methods that allows to determine actor's ID.
     *
     * @param actor actor parsed from LML template.
     * @return actor's unique ID or null if not set. */
    protected String getActorId(final Actor actor) {
        return LmlUtilities.getActorId(actor);
    }

    @Override
    public boolean isDisposed() {
        return disposed;
    }

    /** @param disposed if set to true, {@link #dispose()} will not call {@link Stage#dispose()} method upon invocation.
     *            Set to true if you want to manage stage disposing yourself, but still use view's method for some
     *            reason. Set to false if you "reset" the previously disposed view - this should be generally followed
     *            by setting a new stage with {@link #setStage(Stage)}, as disposed stage often cannot be used. */
    public void setDisposed(final boolean disposed) {
        this.disposed = disposed;
    }

    /** Optional method that returns path to the LML template file that represents this view. This method might return
     * null if file is unknown or not used at all.
     *
     * @return {@link FileHandle} pointing to a .lml file. */
    public FileHandle getTemplateFile() {
        return null;
    }

    /** Optional method that should be called by the view manager when the application is paused. Default implementation
     * is empty. */
    public void pause() {
    }

    /** Optional method that should be called by the view manager when the application is resumed. Default
     * implementation is empty. */
    public void resume() {
    }

    /** Optional method that should be called by the view manager when the view is about to be hidden. */
    public void hide() {
    }

    /** Optional method that should be called by the view manager when the view is about to be shown. */
    public void show() {
    }

    /** Optional method that should be called by the view manager when the view is reloaded. */
    public void clear() {
    }

    @Override
    public void dispose() {
        if (!disposed) {
            Disposables.disposeOf(stage);
            disposed = true;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy