Java tutorial
/****************************************************************************** * Space Shooter Software License * Version 0.0.2-alpha * * Copyright (C) 2015 Last Stand Studio * * SpaceShooter is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * SpaceShooter is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with SpaceShooter. If not, see <http://www.gnu.org/licenses/>. *****************************************************************************/ package com.laststandstudio.space.Levels.Menus; import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Label; 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.utils.ChangeListener; import com.laststandstudio.space.Levels.Test; import com.laststandstudio.space.SpaceShooter; import com.laststandstudio.space.engine.Level; public class MainMenu extends Level { private static final float PADDING = (Gdx.graphics.getWidth() / 120); private MainMenu instance = this; private SpriteBatch batch; private BitmapFont titleFont; private BitmapFont menuFont; private Pixmap pixmap; private Skin skin; private Sound menuClick; private Stage stage; private Table table; private Label title; private Label.LabelStyle labelStyle; private TextButton.TextButtonStyle textButtonStyle; private TextButton btnSinglePlayer; private TextButton btnMultiplayer; private TextButton btnOptions; private TextButton btnTexturePacks; private TextButton btnMods; private TextButton btnExit; public MainMenu(Game game) { super(game); SpaceShooter.mode = SpaceShooter.GameMode.MENU_MAIN; SpaceShooter.logger.logDebug("Main Menu: Creating Main Menu Screen"); this.batch = new SpriteBatch(); this.titleFont = super.loadFont("fonts/Gtek_Technology_free.ttf", (Gdx.graphics.getHeight() / 12)); SpaceShooter.logger.logDebug("Main Menu: Creating Button Tables & Fonts"); this.menuFont = new BitmapFont(); this.pixmap = new Pixmap((Gdx.graphics.getWidth() / 2) - (Gdx.graphics.getWidth() / 10), (Gdx.graphics.getHeight() / 12), Pixmap.Format.RGB888); this.skin = new Skin(); this.stage = new Stage(); this.table = new Table(); this.labelStyle = new Label.LabelStyle(titleFont, Color.BLACK); this.textButtonStyle = new TextButton.TextButtonStyle(); skin.add("default", menuFont); pixmap.setColor(Color.MAROON); pixmap.fill(); skin.add("background", new Texture(pixmap)); SpaceShooter.logger.logDebug("Main Menu: Building Button Style"); textButtonStyle.up = skin.newDrawable("background", Color.GRAY); textButtonStyle.down = skin.newDrawable("background", Color.DARK_GRAY); textButtonStyle.checked = skin.newDrawable("background", Color.DARK_GRAY); textButtonStyle.over = skin.newDrawable("background", Color.LIGHT_GRAY); textButtonStyle.font = skin.getFont("default"); skin.add("default", textButtonStyle); SpaceShooter.logger.logDebug("Main Menu: Building Buttons"); this.title = new Label("space shooter", labelStyle); this.btnSinglePlayer = new TextButton("Single Player", skin); this.btnMultiplayer = new TextButton("Multiplayer", skin); this.btnOptions = new TextButton("Options", skin); this.btnTexturePacks = new TextButton("Texture Packs", skin); this.btnMods = new TextButton("Mods", skin); this.btnExit = new TextButton("Exit", skin); } @Override public void show() { SpaceShooter.musicManager.play(); SpaceShooter.logger.logDebug("Main Menu: Loading Assets"); SpaceShooter.assetManager.load("menus/MenuSelectionClick.wav", Sound.class); SpaceShooter.assetManager.load("menus/background.png", Texture.class); SpaceShooter.assetManager.finishLoading(); this.menuClick = SpaceShooter.assetManager.get("menus/MenuSelectionClick.wav"); SpaceShooter.logger.logDebug("Main Menu: Building the Table of Buttons w/ the Title"); table.add(title).pad(PADDING * 4).row(); table.add(btnSinglePlayer).pad(PADDING).row(); table.add(btnMultiplayer).pad(PADDING).row(); table.add(btnOptions).pad(PADDING).row(); table.add(btnTexturePacks).pad(PADDING).row(); table.add(btnMods).pad(PADDING).row(); table.add(btnExit).pad(PADDING).row(); table.setFillParent(true); stage.addActor(table); SpaceShooter.logger.logDebug("Main Menu: Setting Button Listeners"); btnSinglePlayer.addListener(new ChangeListener() { public void changed(ChangeEvent event, Actor actor) { menuClick.play(); btnSinglePlayer.setText("Loading Single Player Menu"); SpaceShooter.logger.logDebug("Loading Single Player Menu"); //TODO : load level select. //game.setScreen(new SinglePlayerMenu(game, instance)); stage = new Test(); } }); btnMultiplayer.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { menuClick.play(); btnMultiplayer.setText("Loading Multiplayer Menu"); SpaceShooter.logger.logDebug("Loading Multiplayer Menu"); //TODO : load server select. } }); btnOptions.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { menuClick.play(); btnOptions.setText("Loading Options Menu"); SpaceShooter.logger.logDebug("Loading Options Menu"); //TODO : Load options. } }); btnTexturePacks.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { menuClick.play(); btnTexturePacks.setText("Loading Texture Pack Menu"); SpaceShooter.logger.logDebug("Loading Texture Pack Menu"); //TODO : load texture map menu. } }); btnMods.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { menuClick.play(); btnMods.setText("Loading Mods Menu"); SpaceShooter.logger.logDebug("Loading Mods Menu"); //TODO : load mods menu. } }); btnExit.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { menuClick.play(); btnExit.setText("Exiting Game"); SpaceShooter.logger.logDebug("Exiting the Game"); Gdx.app.exit(); } }); SpaceShooter.logger.logDebug("Set the Input Processor to the Main Menu Stage"); Gdx.input.setInputProcessor(stage); } @Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.begin(); batch.draw(SpaceShooter.assetManager.get("menus/background.png", Texture.class), 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); batch.end(); stage.act(); stage.draw(); } @Override public void pause() { } @Override public void resize(int width, int height) { } @Override public void resume() { } @Override public void hide() { } @Override public void dispose() { SpaceShooter.logger.logDebug("Main Menu: Destroying Main Menu"); SpaceShooter.logger.logDebug("Main Menu: Unloading Assets from Main Menu"); SpaceShooter.assetManager.unload("menus/background.png"); stage.dispose(); skin.dispose(); } }