/*
* Copyright (c) 2012. HappyDroids LLC, All rights reserved.
*/
package com.happydroids.droidtowers.scenes;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.google.common.eventbus.EventBus;
import com.happydroids.droidtowers.TowerConsts;
import com.happydroids.droidtowers.events.GameSpeedChangeEvent;
import com.happydroids.droidtowers.events.SafeEventBus;
import com.happydroids.droidtowers.graphics.Effects;
import com.happydroids.droidtowers.input.CameraController;
import com.happydroids.droidtowers.platform.Display;
public abstract class Scene {
private Object[] startArgs;
private static SpriteBatch spriteBatch;
private final Stage stage;
protected final OrthographicCamera camera;
private float timeMultiplier;
private EventBus eventBus;
private Vector3 previousCameraPosition;
private float previousCameraZoom;
protected CameraController cameraController;
private final Effects effects;
public Scene() {
camera = new OrthographicCamera(Display.getWidth(), Display.getHeight());
stage = new Stage(Display.getWidth(), Display.getHeight(), false, getSpriteBatch());
// stage = new Stage(800, 480, true, getSpriteBatch());
cameraController = new CameraController(camera, new Vector2(Display.getWidth(), Display.getHeight()));
eventBus = new SafeEventBus(getClass().getSimpleName());
timeMultiplier = 1f;
effects = new Effects();
}
public abstract void create(Object... args);
public abstract void pause();
public abstract void resume();
public abstract void render(float deltaTime);
public abstract void dispose();
public float getTimeMultiplier() {
return timeMultiplier;
}
public void setTimeMultiplier(float value) {
timeMultiplier = MathUtils.clamp(value, TowerConsts.GAME_SPEED_MIN, TowerConsts.GAME_SPEED_MAX);
events().post(new GameSpeedChangeEvent(this));
}
public SpriteBatch getSpriteBatch() {
return spriteBatch;
}
public static void setSpriteBatch(SpriteBatch spriteBatch) {
Scene.spriteBatch = spriteBatch;
}
public Stage getStage() {
return stage;
}
public OrthographicCamera getCamera() {
return camera;
}
protected void addActor(Actor actor) {
getStage().addActor(actor);
}
protected void center(Actor actor) {
centerHorizontally(actor);
centerVertically(actor);
}
protected void centerHorizontally(Actor actor) {
actor.setX((int) (getStage().getWidth() - actor.getWidth()) / 2);
}
protected void centerVertically(Actor actor) {
actor.setY((int) (getStage().getHeight() - actor.getHeight()) / 2);
}
public EventBus events() {
return eventBus;
}
public CameraController getCameraController() {
return cameraController;
}
public void setStartArgs(Object[] startArgs) {
this.startArgs = startArgs;
}
public Object[] getStartArgs() {
return startArgs;
}
public Effects effects() {
return effects;
}
}