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 scenes; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.circle.game.Config; import gameMode.DominationMatch; import gameMode.GameMode; import gameMode.NormalMatch; import gameMode.TutorialMatch; import map.GameMaps; import map.GameMapsDomination; import map.Map; import misc.CircleColors; import object.CombustibleBarrel; import object.DominationCircle; import object.MapObject; import object.Obstacle; /** * * @author <a href="mailto:kevin.vanderburg@student.fontys.nl">Kevin van der * Burg</a> */ public class GameCreate extends ApplicationAdapter { private Stage stage; //done private TextureAtlas atlas; //done private Skin skin; //done private Table table; // Align all buttons private TextButton buttonTut, buttonPlay, buttonExit; private BitmapFont font60, font30; //done private Label heading; private Map[] availableMaps; private GameMode[] availableGamemodes; private int selectedMap; private int selectedGameMode; private Map[] availableGameModeMap; private ShapeRenderer shapeRenderer; private int xOffset; private int yOffset; private SpriteBatch batch; private Texture barrelTexture = new Texture(Gdx.files.internal("sprites/Barrel.png")); private int playerLimitIndex; private int[] playerLimit = new int[] { 1, 2, 3, 4 }; public GameCreate() { create(); } @Override public void create() { playerLimitIndex = 0; shapeRenderer = new ShapeRenderer(); shapeRenderer.setAutoShapeType(true); batch = new SpriteBatch(); availableMaps = GameMaps.getMaps(); availableGameModeMap = GameMapsDomination.getMaps(); availableGamemodes = new GameMode[] { new NormalMatch("Normal Game"), new TutorialMatch("Tutorial"), new DominationMatch("Domination") }; stage = new Stage(); Gdx.input.setInputProcessor(stage); atlas = new TextureAtlas("ui/buttonPack.pack"); skin = new Skin(atlas); table = new Table(skin); table.setBounds(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); //initialize fonts FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/MunroSmall.ttf")); FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter(); parameter.size = 60; font60 = generator.generateFont(parameter); // font size 12 pixels font60.setColor(Color.BLACK); parameter.size = 40; font30 = generator.generateFont(parameter); // font size 12 pixels font30.setColor(0.5f, 0.5f, 0.5f, 255); generator.dispose(); // don't forget to dispose to avoid memory leaks! final TextButtonStyle textButtonStyle = new TextButtonStyle(); textButtonStyle.downFontColor = new Color(0f, 0.57f, 0.92f, 1f); textButtonStyle.overFontColor = new Color(0f, 0.57f, 1f, 1f); textButtonStyle.font = font30; textButtonStyle.fontColor = Color.BLACK; buttonPlay = new TextButton("Start Game", textButtonStyle); buttonPlay.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { if ("Domination".equals(availableGamemodes[selectedGameMode].getName())) { Config.page = new SearchGame(availableGameModeMap[selectedMap].getName(), availableGamemodes[selectedGameMode].getName(), playerLimit[playerLimitIndex]); } else { Config.page = new SearchGame(availableMaps[selectedMap].getName(), availableGamemodes[selectedGameMode].getName(), playerLimit[playerLimitIndex]); } } }); buttonExit = new TextButton("Back", textButtonStyle); buttonExit.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { Config.page = new MainMenu(); } }); buttonExit.pad(20); LabelStyle headingStyle = new LabelStyle(font60, Color.BLACK); final TextButton toggleGameMode = new TextButton( "GameMode: " + availableGamemodes[selectedGameMode].getName(), textButtonStyle); toggleGameMode.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { selectedGameMode++; if (selectedGameMode >= availableGamemodes.length) { selectedGameMode = 0; } toggleGameMode.setText("GameMode: " + availableGamemodes[selectedGameMode].getName()); } }); final TextButton toggleLevel = new TextButton("Map: " + availableMaps[selectedMap].getName(), textButtonStyle); toggleLevel.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { selectedMap++; if (selectedMap >= availableMaps.length) { selectedMap = 0; } toggleLevel.setText("Map: " + availableMaps[selectedMap].getName()); } }); final TextButton togglePlayeLimit = new TextButton("players: " + playerLimit[playerLimitIndex], textButtonStyle); togglePlayeLimit.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { playerLimitIndex++; if (playerLimitIndex >= playerLimit.length) { playerLimitIndex = 0; } togglePlayeLimit.setText("players: " + playerLimit[playerLimitIndex]); } }); heading = new Label("Game modes", headingStyle); table.add(heading); table.row(); table.padBottom(100); table.add(toggleGameMode); table.row(); table.padBottom(50); table.add(toggleLevel); table.row(); table.padBottom(50); table.add(togglePlayeLimit); table.row(); table.padBottom(50); table.add(buttonPlay); table.row(); table.padBottom(50); table.add(buttonExit); //table.debug(); stage.addActor(table); //xOffset = (Gdx.graphics.getWidth() / 100 * 65); xOffset = (int) table.getX() + (int) toggleLevel.getRight() + (Gdx.graphics.getWidth() / 2); yOffset = Gdx.graphics.getHeight() / 2 - (availableMaps[selectedMap].getHeight() / 5); } @Override public void render() { shapeRenderer.begin(); Gdx.gl.glLineWidth(2); if ("Domination".equals(availableGamemodes[selectedGameMode].getName())) { shapeRenderer.set(ShapeRenderer.ShapeType.Filled); shapeRenderer.setColor(CircleColors.white); shapeRenderer.rect(xOffset, yOffset, (availableGameModeMap[selectedMap].getWidth() / 5), (availableGameModeMap[selectedMap].getHeight() / 5)); shapeRenderer.set(ShapeRenderer.ShapeType.Line); shapeRenderer.setColor(CircleColors.black); shapeRenderer.rect(xOffset, yOffset, (availableGameModeMap[selectedMap].getWidth() / 5), (availableGameModeMap[selectedMap].getHeight() / 5)); if (availableGameModeMap[selectedMap] != null) { for (MapObject mapObject : availableGameModeMap[selectedMap].getObjects()) { if (mapObject.getClass() == CombustibleBarrel.class) { CombustibleBarrel combustibleBarrel = (CombustibleBarrel) mapObject; shapeRenderer.setColor(CircleColors.red); shapeRenderer.set(ShapeRenderer.ShapeType.Filled); batch.begin(); //shapeRenderer.circle(xOffset + combustibleBarrel.getPosition().x, yOffset + combustibleBarrel.getPosition().y, 18); batch.draw(barrelTexture, xOffset + (combustibleBarrel.getPosition().x / 5) - (18 / 5), yOffset + (combustibleBarrel.getPosition().y / 5) - (18 / 5), (32 / 5), (32 / 5)); batch.end(); } if (mapObject.getClass() == Obstacle.class) { Obstacle obstacle = (Obstacle) mapObject; shapeRenderer.setColor(CircleColors.dark_gray); shapeRenderer.set(ShapeRenderer.ShapeType.Filled); shapeRenderer.rect(xOffset + (obstacle.getPosition().x / 5), yOffset + (obstacle.getPosition().y / 5), (obstacle.getWidth() / 5), (obstacle.getHeight() / 5)); } if (mapObject.getClass() == DominationCircle.class) { DominationCircle dominationCricle = (DominationCircle) mapObject; shapeRenderer.setColor(dominationCricle.getColor()); shapeRenderer.set(ShapeRenderer.ShapeType.Line); shapeRenderer.circle(xOffset + (dominationCricle.getPosition().x / 5), yOffset + (dominationCricle.getPosition().y / 5), (25 / 5)); } } } } else { shapeRenderer.set(ShapeRenderer.ShapeType.Filled); shapeRenderer.setColor(CircleColors.white); shapeRenderer.rect(xOffset, yOffset, (availableMaps[selectedMap].getWidth() / 5), (availableMaps[selectedMap].getHeight() / 5)); shapeRenderer.set(ShapeRenderer.ShapeType.Line); shapeRenderer.setColor(CircleColors.black); shapeRenderer.rect(xOffset, yOffset, (availableMaps[selectedMap].getWidth() / 5), (availableMaps[selectedMap].getHeight() / 5)); if (availableMaps[selectedMap] != null) { for (MapObject mapObject : availableMaps[selectedMap].getObjects()) { if (mapObject.getClass() == CombustibleBarrel.class) { CombustibleBarrel combustibleBarrel = (CombustibleBarrel) mapObject; shapeRenderer.setColor(CircleColors.red); shapeRenderer.set(ShapeRenderer.ShapeType.Filled); batch.begin(); //shapeRenderer.circle(xOffset + combustibleBarrel.getPosition().x, yOffset + combustibleBarrel.getPosition().y, 18); batch.draw(barrelTexture, xOffset + (combustibleBarrel.getPosition().x / 5) - (18 / 5), yOffset + (combustibleBarrel.getPosition().y / 5) - (18 / 5), (32 / 5), (32 / 5)); batch.end(); } if (mapObject.getClass() == Obstacle.class) { Obstacle obstacle = (Obstacle) mapObject; shapeRenderer.setColor(CircleColors.dark_gray); shapeRenderer.set(ShapeRenderer.ShapeType.Filled); shapeRenderer.rect(xOffset + (obstacle.getPosition().x / 5), yOffset + (obstacle.getPosition().y / 5), (obstacle.getWidth() / 5), (obstacle.getHeight() / 5)); } } } } shapeRenderer.end(); stage.act(); stage.draw(); } }