/* * Copyright 2012-2013 Ivan Gadzhega * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package net.ivang.axonix.main.screens; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputMultiplexer; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.google.common.eventbus.EventBus; import net.ivang.axonix.main.AxonixGame; /** * @author Ivan Gadzhega * @since 0.1 */ public abstract class BaseScreen implements Screen { protected final AxonixGame game; protected Stage stage; protected Skin skin; protected EventBus eventBus; protected InputMultiplexer inputMultiplexer; protected BaseScreen(final AxonixGame game, InputMultiplexer inputMultiplexer, EventBus eventBus) { this.game = game; this.stage = new Stage(); this.skin = game.getSkin(); this.inputMultiplexer = inputMultiplexer; this.eventBus = eventBus; String styleName = getStyleNameByHeight(); setStyleByName(styleName, false); } @Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); stage.act(); stage.draw(); Table.drawDebug(stage); } @Override public void resize(int width, int height) { stage.setViewport(width, height, false); String styleName = getStyleNameByHeight(height); setStyleByName(styleName, true); } @Override public void show() { inputMultiplexer.addProcessor(stage); eventBus.register(this); } @Override public void hide() { inputMultiplexer.removeProcessor(stage); eventBus.unregister(this); } @Override public void pause() { } @Override public void resume() { } @Override public void dispose() { stage.dispose(); } //--------------------------------------------------------------------- // Helper methods //--------------------------------------------------------------------- protected String getStyleNameByHeight() { return getStyleNameByHeight(Gdx.graphics.getHeight()); } protected String getStyleNameByHeight(int height) { if (height < 480) { return StyleName.SMALL.toString(); } else if (height < 720) { return StyleName.NORMAL.toString(); } else { return StyleName.LARGE.toString(); } } protected abstract void setStyleByName(String styleName); protected abstract void applyStyle(); protected void setStyleByName(String styleName, boolean apply) { setStyleByName(styleName); if (apply) { applyStyle(); } } //--------------------------------------------------------------------- // Nested Classes //--------------------------------------------------------------------- private enum StyleName { SMALL("small"), NORMAL("normal"), LARGE("large"), XLARGE("xlarge"); private final String styleName; private StyleName(String styleName) { this.styleName = styleName; } public String toString() { return styleName; } } }