Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.johnogel.astrobros.managers; import com.johnogel.astrobros.managers.screens.GameOverScreen; import com.johnogel.astrobros.managers.screens.LevelWinScreen; import com.johnogel.astrobros.interfaces.GameObject; import com.johnogel.astrobros.interfaces.Controller; import box2dLight.RayHandler; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.audio.Music; import com.badlogic.gdx.graphics.FPSLogger; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.utils.Array; import com.johnogel.astrobros.levels.BonusLevel; import com.johnogel.astrobros.levels.Level; import com.johnogel.astrobros.levels.LevelOne; import com.johnogel.astrobros.levels.LevelThree; import com.johnogel.astrobros.levels.LevelTwo; import com.johnogel.astrobros.managers.screens.AwardScreen; import com.johnogel.astrobros.managers.screens.BonusAwardScreen; import com.johnogel.astrobros.managers.screens.GameEndScreen; import com.johnogel.astrobros.managers.screens.LevelLossScreen; import com.johnogel.astrobros.support.TextureHandler; /** * * @author johno-gel */ public class GameManager implements Controller { private World world; private Box2DDebugRenderer renderer; private FPSLogger logger; private final int width, height; private OrthographicCamera camera; protected Array<GameObject> game_objects, disposables; private final int max_count; private RayHandler ray_handler; private final SuperManager mngr; private final float fps; private final Array<Level> levels; private final Array<Controller> controllers; private boolean started; private SpriteBatch batch; private final TextureHandler texture_handler; private int total_score, top_score, lives; private int prev_score; private int level, controller_index; private Controller controller; private ShapeRenderer shape_renderer; private Music music; private float alpha, delta; public final int LEVEL_ONE = 0, LEVEL_TWO = 1, LEVEL_THREE = 2, LEVEL_FOUR = 3, GAME_OVER = 4, LEVEL_WIN = 5, LEVEL_LOSS = 6, GAME_END = 7, AWARD = 8, BONUS_AWARD = 9; public GameManager(SuperManager mngr) { this.mngr = mngr; this.fps = 1 / 48f; max_count = 50; alpha = 1; delta = .001f; game_objects = new Array(); levels = new Array(6); controllers = new Array(10); texture_handler = mngr.getTextureHandler(); batch = new SpriteBatch(100); shape_renderer = new ShapeRenderer(); started = false; width = Gdx.graphics.getWidth() / 5; height = Gdx.graphics.getHeight() / 5; level = this.LEVEL_ONE; total_score = 0; lives = 3; } @Override public void render() { //Gdx.gl20.glActiveTexture(GL20.); //renderer.render(world, camera.combined); //update(); if (controller != null) { controller.render(); } /* alpha += delta; if(delta < 0 && alpha <.002f){ delta = -delta; } if(delta > 0 && alpha > .998f){ delta = -delta; } Gdx.gl20.glClearColor(1, 1, 1, alpha); Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT); */ } public int getTotalScore() { return total_score; } @Override public void initializeController() { if (controller_index < levels.size) { controller = controllers.get(level); levels.get(level).initialize(); levels.get(level).initializeGameObjects(); } else { controller = controllers.get(controller_index); controller.initialize(); } } public void resolveLevelWin(int score) { total_score += score; prev_score = score; mngr.transition(); //controller.stop(); //controller = controllers.get(this.LEVEL_WIN); controller_index = this.LEVEL_WIN; //controller.initialize(); } public void resolveEndGame() { mngr.transition(); if (this.total_score > 4) { controller_index = this.AWARD; } else { controller_index = this.GAME_OVER; } } public SuperManager getSuperManager() { return this.mngr; } //Such a sexy method public void resolveLevelLoss() { mngr.transition(); lives--; System.out.println("LIVES: " + lives); //controller.stop(); if (lives >= 0) { //controller = controllers.get(this.LEVEL_LOSS); controller_index = this.LEVEL_LOSS; } else { //controller = controllers.get(this.GAME_OVER); controller_index = this.GAME_OVER; } //controller.initialize(); } @Override public void update() { //System.out.println("\n\nWIDTH: "+camera.viewportWidth+"\nHEIGHT: "+camera.viewportHeight); //System.out.println("Game Objects: "+this.game_objects.size); if (Gdx.input.isKeyJustPressed(Keys.NUM_1)) { this.setLevel(this.LEVEL_ONE); } else if (Gdx.input.isKeyJustPressed(Keys.NUM_2)) { this.setLevel(this.LEVEL_TWO); } else if (Gdx.input.isKeyJustPressed(Keys.NUM_3)) { this.setLevel(this.LEVEL_THREE); } else { if (!isPaused()) { ray_handler.setCombinedMatrix(camera); } controller.update(); if (!isPaused() && !levels.get(level).playerDead()) { world.step(this.fps, 8, 4); } } // if(levels.get(level).getTime()<1){ // if(levels.get(level).win()){ // level++; // // } // this.setLevel(level); // // } } public int getPreviousScore() { return prev_score; } public void removeGameObject(GameObject o) { game_objects.removeIndex(game_objects.indexOf(o, true)); } public void removeGameObject(Body b) { int index = -1; //b.destroyFixture(b.getFixtureList().pop()); //b.setActive(false); //b.setAwake(false); for (GameObject o : game_objects) { if (b.equals(o.getBody())) { index = game_objects.indexOf(o, false); break; } } if (index > -1) { game_objects.removeIndex(index); } } public void renderGameObjects() { levels.get(level).drawBackground(batch); batch.enableBlending(); batch.begin(); for (GameObject o : game_objects) { o.render(batch); } batch.end(); ray_handler.updateAndRender(); levels.get(level).drawHUD(batch); } public void updateGameObjects() { for (GameObject o : game_objects) { o.update(batch); } } public Array<GameObject> getGameObjects() { return game_objects; } public void clearGameObjects() { game_objects.clear(); } @Override public void dispose() { batch.dispose(); //world.dispose(); } public SpriteBatch getSpriteBatch() { return batch; } public void addGameObject(GameObject o) { game_objects.add(o); } public OrthographicCamera getCamera() { return camera; } public int getWidth() { return width; } public int getHeight() { return height; } public World getWorld() { return world; } public RayHandler getRayHandler() { return ray_handler; } public TextureHandler getTextureHandler() { return mngr.getTextureHandler(); } @Override public void initializeWorld() { mngr.initializeWorld(); this.ray_handler = mngr.getRayHandler(); this.world = mngr.getWorld(); renderer = new Box2DDebugRenderer(); logger = new FPSLogger(); this.camera = mngr.getCamera(); this.camera.position.set(width * .5f, height * .5f, 0); this.camera.update(); this.clearGameObjects(); //game_objects.add(player); //ray_handler.setCombinedMatrix(camera); //ray_handler.setCulling(true); ray_handler.setBlur(true); //ray_handler.setLightMapRendering(false); ray_handler.setShadows(true); ray_handler.setAmbientLight(1, 1, 1, .10f); //Sun //this.addLight(8000, Color.YELLOW, 600, width/2, height/2 ); } public void disposeGameObjectTextures() { for (int i = 0; i < game_objects.size; i++) { game_objects.get(i).dispose(); } } public void setLevel(int level) { levels.get(this.level).dispose(); this.level = level; controller_index = level; // controller = controllers.get(level); // levels.get(level).initialize(); // levels.get(level).initializeGameObjects(); //this.initializeWorld(); } public ShapeRenderer getShapeRenderer() { return shape_renderer; } public void initializeBonus() { mngr.transition(); setLevel(levels.size - 1); } @Override public void initialize() { shape_renderer.dispose(); shape_renderer = new ShapeRenderer(); mngr.initializeWorld(); this.camera = mngr.getCamera(); this.camera.position.set(width * .5f, height * .5f, 0); this.camera.update(); this.ray_handler = mngr.getRayHandler(); this.world = mngr.getWorld(); levels.clear(); controllers.clear(); levels.add(new LevelOne(this, 60)); levels.add(new LevelTwo(this, 60)); levels.add(new LevelThree(this, 60)); levels.add(new BonusLevel(this, 60)); top_score = 0; total_score = 0; controllers.add(levels.get(0)); controllers.add(levels.get(1)); controllers.add(levels.get(2)); controllers.add(levels.get(3)); controllers.add(new GameOverScreen(this)); controllers.add(new LevelWinScreen(this)); controllers.add(new LevelLossScreen(this)); controllers.add(new GameEndScreen(this)); controllers.add(new AwardScreen(this)); controllers.add(new BonusAwardScreen(this)); //this.setLevel(level); renderer = new Box2DDebugRenderer(); logger = new FPSLogger(); this.clearGameObjects(); //game_objects.add(player); ray_handler.setCombinedMatrix(camera); //ray_handler.setCulling(true); ray_handler.setBlur(true); //ray_handler.setLightMapRendering(false); ray_handler.setShadows(true); ray_handler.setAmbientLight(1, 1, 1, .6f); level = LEVEL_ONE; //controller_index = level; controller = controllers.get(level); controller.initialize(); levels.get(level).initializeGameObjects(); levels.get(level).update(); //this.setLevel(level); lives = 3; } public void updateTopScore(int score) { top_score += score; } public int getTopScore() { return top_score; } @Override public void resize(int width, int height) { this.camera = mngr.getCamera(); ray_handler.setCombinedMatrix(camera); for (Level l : levels) { l.resize(width, height); } batch.setProjectionMatrix(camera.combined); } public void resolveBonusLoss() { mngr.transition(); controller_index = this.GAME_OVER; } public void resolveBonusWin() { mngr.transition(); controller_index = this.BONUS_AWARD; } public int getCurrentLevel() { return level; } public int getNumberOfLevels() { return levels.size; } public void incrementLevel() { mngr.transition(); if (level < levels.size - 2/*change back to two*/) { this.setLevel(level + 1); } else { controller_index = this.GAME_END; //controller.initialize(); } } public int getLives() { return lives; } @Override public boolean isPaused() { return controller.isPaused(); } @Override public void stop() { music.stop(); } }