package com.github.czyzby.autumn.mvc.component.ui.controller.impl;
import com.badlogic.gdx.scenes.scene2d.Action;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.github.czyzby.autumn.mvc.component.ui.InterfaceService;
import com.github.czyzby.autumn.mvc.component.ui.controller.ViewController;
import com.github.czyzby.kiwi.util.gdx.asset.Disposables;
import com.github.czyzby.lml.parser.action.ActionContainer;
/** Base class for a view that does not use LML, for whatever reason.
*
* @author MJ */
public abstract class AbstractViewController implements ViewController {
protected Stage stage;
@Override
public void createView(final InterfaceService interfaceService) {
stage = new Stage(interfaceService.getViewportProvider().provide());
createView(interfaceService, stage);
}
/** Called on screen creation.
*
* @param interfaceService manages views.
* @param stage is initiated with the default viewport type. */
protected abstract void createView(InterfaceService interfaceService, Stage stage);
@Override
public void destroyView() {
Disposables.disposeOf(stage);
stage = null;
}
@Override
public boolean isCreated() {
return stage != null;
}
@Override
public void render(final float delta) {
stage.act(delta);
stage.draw();
}
@Override
public void resize(final int width, final int height) {
stage.getViewport().update(width, height, true);
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void show(final Action action) {
stage.addAction(action);
}
@Override
public void hide(final Action action) {
stage.addAction(action);
}
@Override
public Stage getStage() {
return stage;
}
@Override
public ActionContainer getActionContainer() {
if (this instanceof ActionContainer) {
return (ActionContainer) this;
}
return null;
}
@Override
public boolean isFirst() {
return false;
}
}