Finished the documentation.
This commit is contained in:
@@ -26,20 +26,52 @@ import com.gamejolt.mikykr5.ceidecpong.effects.ScrollingBackground;
|
|||||||
import com.gamejolt.mikykr5.ceidecpong.utils.AsyncAssetLoader;
|
import com.gamejolt.mikykr5.ceidecpong.utils.AsyncAssetLoader;
|
||||||
import com.gamejolt.mikykr5.ceidecpong.utils.managers.CachedFontManager;
|
import com.gamejolt.mikykr5.ceidecpong.utils.managers.CachedFontManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A state that shows a loading screen and updates the {@link AsyncAssetLoader}.
|
||||||
|
*
|
||||||
|
* @author Miguel Astor
|
||||||
|
*/
|
||||||
public class LoadingState extends BaseState{
|
public class LoadingState extends BaseState{
|
||||||
// Helper fields.
|
/**
|
||||||
|
* The {@link AsyncAssetLoader} instance that must be updated.
|
||||||
|
*/
|
||||||
private AsyncAssetLoader loader;
|
private AsyncAssetLoader loader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance of the {@link CachedFontManager} used to render the loading screen.
|
||||||
|
*/
|
||||||
private CachedFontManager fontManager;
|
private CachedFontManager fontManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A time counter to avoid changing this state too quickly.
|
||||||
|
*/
|
||||||
private float timeSinceShown;
|
private float timeSinceShown;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A flag to indicate that this state is finished.
|
||||||
|
*/
|
||||||
private boolean loadingDone;
|
private boolean loadingDone;
|
||||||
|
|
||||||
// Graphic data.
|
/**
|
||||||
|
* The {@link BitmapFont} used to render the loading screen.
|
||||||
|
*/
|
||||||
private BitmapFont font;
|
private BitmapFont font;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link ScrollingBackground} effect to make things livelier.
|
||||||
|
*/
|
||||||
private ScrollingBackground scrollingBckg;
|
private ScrollingBackground scrollingBckg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the loading screen.
|
||||||
|
*
|
||||||
|
* @param core A game core. See {@link BaseState#BaseState(GameCore)} for details.
|
||||||
|
* @throws IllegalArgumentException If core is null.
|
||||||
|
*/
|
||||||
public LoadingState(final GameCore core) throws IllegalArgumentException{
|
public LoadingState(final GameCore core) throws IllegalArgumentException{
|
||||||
super(core);
|
super(core);
|
||||||
|
|
||||||
|
// Get the singleton instances.
|
||||||
loader = AsyncAssetLoader.getInstance();
|
loader = AsyncAssetLoader.getInstance();
|
||||||
fontManager = CachedFontManager.getInstance();
|
fontManager = CachedFontManager.getInstance();
|
||||||
|
|
||||||
@@ -49,6 +81,7 @@ public class LoadingState extends BaseState{
|
|||||||
// Set up the background.
|
// Set up the background.
|
||||||
scrollingBckg = new ScrollingBackground("data/gfx/textures/floortiles.png", false);
|
scrollingBckg = new ScrollingBackground("data/gfx/textures/floortiles.png", false);
|
||||||
|
|
||||||
|
// Set the flags.
|
||||||
stateEnabled = false;
|
stateEnabled = false;
|
||||||
loadingDone = false;
|
loadingDone = false;
|
||||||
}
|
}
|
||||||
@@ -67,20 +100,25 @@ public class LoadingState extends BaseState{
|
|||||||
|
|
||||||
core.batch.setProjectionMatrix(pixelPerfectCamera.combined);
|
core.batch.setProjectionMatrix(pixelPerfectCamera.combined);
|
||||||
core.batch.begin();{
|
core.batch.begin();{
|
||||||
// Render background.
|
// Render the background.
|
||||||
scrollingBckg.render(core.batch);
|
scrollingBckg.render(core.batch);
|
||||||
|
|
||||||
font.setColor(Color.BLACK);
|
font.setColor(Color.BLACK);
|
||||||
font.draw(core.batch, "Loading", -(bounds.width / 2), -(bounds.height / 2));
|
font.draw(core.batch, "Loading", -(bounds.width / 2), -(bounds.height / 2));
|
||||||
|
|
||||||
}core.batch.end();
|
}core.batch.end();
|
||||||
|
|
||||||
|
// If the loader has not finished loading then update it.
|
||||||
if(!loadingDone && loader != null){
|
if(!loadingDone && loader != null){
|
||||||
|
// Update the loader and check if it finished.
|
||||||
if(loader.loadAssets()){
|
if(loader.loadAssets()){
|
||||||
loadingDone = true;
|
loadingDone = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If it has been at least 3 seconds since this state got enabled then
|
||||||
|
// change to the next state if the loader is finished. This is to avoid
|
||||||
|
// a graphics bug that happens in the core if a state transition is scheduled
|
||||||
|
// while another effect is already in place.
|
||||||
timeSinceShown += delta;
|
timeSinceShown += delta;
|
||||||
if(loadingDone && timeSinceShown >= 3.0f)
|
if(loadingDone && timeSinceShown >= 3.0f)
|
||||||
core.nextState = game_states_t.MAIN_MENU;
|
core.nextState = game_states_t.MAIN_MENU;
|
||||||
|
@@ -21,10 +21,33 @@ import com.badlogic.gdx.graphics.Texture;
|
|||||||
import com.gamejolt.mikykr5.ceidecpong.GameCore;
|
import com.gamejolt.mikykr5.ceidecpong.GameCore;
|
||||||
import com.gamejolt.mikykr5.ceidecpong.GameCore.game_states_t;
|
import com.gamejolt.mikykr5.ceidecpong.GameCore.game_states_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple state that just shows a logo.
|
||||||
|
*
|
||||||
|
* @author Miguel Astor
|
||||||
|
*/
|
||||||
public class LogoScreenState extends BaseState{
|
public class LogoScreenState extends BaseState{
|
||||||
|
/**
|
||||||
|
* The maximum amount of time to show the logo.
|
||||||
|
*/
|
||||||
|
private static final long MAX_TIME = 8000L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The logo to show.
|
||||||
|
*/
|
||||||
private Texture logo;
|
private Texture logo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A time counter.
|
||||||
|
*/
|
||||||
private long then;
|
private long then;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the logo.
|
||||||
|
*
|
||||||
|
* @param core A game core. See {@link BaseState#BaseState(GameCore)} for details.
|
||||||
|
* @throws IllegalArgumentException If core is null.
|
||||||
|
*/
|
||||||
public LogoScreenState(final GameCore core) throws IllegalArgumentException{
|
public LogoScreenState(final GameCore core) throws IllegalArgumentException{
|
||||||
super(core);
|
super(core);
|
||||||
then = System.currentTimeMillis();
|
then = System.currentTimeMillis();
|
||||||
@@ -38,14 +61,16 @@ public class LogoScreenState extends BaseState{
|
|||||||
Gdx.gl.glClearColor(0, 0, 0, 1);
|
Gdx.gl.glClearColor(0, 0, 0, 1);
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
// Render the logo.
|
||||||
core.batch.setProjectionMatrix(this.pixelPerfectCamera.combined);
|
core.batch.setProjectionMatrix(this.pixelPerfectCamera.combined);
|
||||||
core.batch.begin();{
|
core.batch.begin();{
|
||||||
core.batch.draw(logo, -logo.getWidth() / 2, -logo.getHeight() / 2);
|
core.batch.draw(logo, -logo.getWidth() / 2, -logo.getHeight() / 2);
|
||||||
}core.batch.end();
|
}core.batch.end();
|
||||||
|
|
||||||
|
// Check if the time expired, then change to the next state if needed.
|
||||||
now = System.currentTimeMillis();
|
now = System.currentTimeMillis();
|
||||||
delta = now - then;
|
delta = now - then;
|
||||||
if(delta > 8000L){
|
if(delta > MAX_TIME){
|
||||||
core.nextState = game_states_t.LOADING;
|
core.nextState = game_states_t.LOADING;
|
||||||
then = now;
|
then = now;
|
||||||
}
|
}
|
||||||
@@ -58,15 +83,15 @@ public class LogoScreenState extends BaseState{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean touchDown(int screenX, int screenY, int pointer, int button){
|
public boolean touchDown(int screenX, int screenY, int pointer, int button){
|
||||||
|
// Set the time counter to 0 so that a state change will be scheduled on the next frame.
|
||||||
then = 0L;
|
then = 0L;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyDown(int keycode){
|
public boolean keyDown(int keycode){
|
||||||
|
// Set the time counter to 0 so that a state change will be scheduled on the next frame.
|
||||||
then = 0L;
|
then = 0L;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -34,10 +34,25 @@ import com.gamejolt.mikykr5.ceidecpong.interfaces.AssetsLoadedListener;
|
|||||||
import com.gamejolt.mikykr5.ceidecpong.utils.AsyncAssetLoader;
|
import com.gamejolt.mikykr5.ceidecpong.utils.AsyncAssetLoader;
|
||||||
import com.gamejolt.mikykr5.ceidecpong.utils.managers.CachedFontManager;
|
import com.gamejolt.mikykr5.ceidecpong.utils.managers.CachedFontManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A state in charge of rendering and handling the main menu of the game.
|
||||||
|
*
|
||||||
|
* @author Miguel Astor
|
||||||
|
*/
|
||||||
public class MainMenuState extends BaseState implements AssetsLoadedListener{
|
public class MainMenuState extends BaseState implements AssetsLoadedListener{
|
||||||
// Helper fields.
|
/**
|
||||||
|
* An {@link AsyncAssetLoader} instance.
|
||||||
|
*/
|
||||||
private AsyncAssetLoader loader;
|
private AsyncAssetLoader loader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance of the {@link CachedFontManager} used to render the buttons.
|
||||||
|
*/
|
||||||
private CachedFontManager fontManager;
|
private CachedFontManager fontManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A flag to indicate that all assets have been loaded.
|
||||||
|
*/
|
||||||
private boolean assetsLoaded;
|
private boolean assetsLoaded;
|
||||||
|
|
||||||
// Buttons and other GUI components.
|
// Buttons and other GUI components.
|
||||||
@@ -51,15 +66,39 @@ public class MainMenuState extends BaseState implements AssetsLoadedListener{
|
|||||||
private NinePatch menuButtonEnabled9p;
|
private NinePatch menuButtonEnabled9p;
|
||||||
private NinePatch menuButtonDisabled9p;
|
private NinePatch menuButtonDisabled9p;
|
||||||
private NinePatch menuButtonPressed9p;
|
private NinePatch menuButtonPressed9p;
|
||||||
private BitmapFont font;
|
private BitmapFont buttonFont;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link ScrollingBackground} effect to make things livelier.
|
||||||
|
*/
|
||||||
private ScrollingBackground scrollingBckg;
|
private ScrollingBackground scrollingBckg;
|
||||||
|
|
||||||
// Button touch helper fields.
|
/**
|
||||||
|
* A flag to indicate that the start button is pressed.
|
||||||
|
*/
|
||||||
private boolean startButtonTouched;
|
private boolean startButtonTouched;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A holder to identify the finger that is touching the start button in multitouch screens.
|
||||||
|
*/
|
||||||
private int startButtonTouchPointer;
|
private int startButtonTouchPointer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A flag to indicate that the quit button is pressed.
|
||||||
|
*/
|
||||||
private boolean quitButtonTouched;
|
private boolean quitButtonTouched;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A holder to identify the finger that is touching the quit button in multitouch screens.
|
||||||
|
*/
|
||||||
private int quitButtonTouchPointer;
|
private int quitButtonTouchPointer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the menu and loads all related assets.
|
||||||
|
*
|
||||||
|
* @param core A game core. See {@link BaseState#BaseState(GameCore)} for details.
|
||||||
|
* @throws IllegalArgumentException If core is null.
|
||||||
|
*/
|
||||||
public MainMenuState(final GameCore core) throws IllegalArgumentException{
|
public MainMenuState(final GameCore core) throws IllegalArgumentException{
|
||||||
super(core);
|
super(core);
|
||||||
|
|
||||||
@@ -71,7 +110,7 @@ public class MainMenuState extends BaseState implements AssetsLoadedListener{
|
|||||||
loader.addAssetToLoad("data/gfx/gui/Anonymous_Pill_Button_Yellow.png", Texture.class);
|
loader.addAssetToLoad("data/gfx/gui/Anonymous_Pill_Button_Yellow.png", Texture.class);
|
||||||
loader.addAssetToLoad("data/gfx/gui/Anonymous_Pill_Button_Cyan.png", Texture.class);
|
loader.addAssetToLoad("data/gfx/gui/Anonymous_Pill_Button_Cyan.png", Texture.class);
|
||||||
loader.addAssetToLoad("data/gfx/gui/Anonymous_Pill_Button_Blue.png", Texture.class);
|
loader.addAssetToLoad("data/gfx/gui/Anonymous_Pill_Button_Blue.png", Texture.class);
|
||||||
font = fontManager.loadFont("data/fonts/d-puntillas-B-to-tiptoe.ttf");
|
buttonFont = fontManager.loadFont("data/fonts/d-puntillas-B-to-tiptoe.ttf");
|
||||||
|
|
||||||
// Set up the background.
|
// Set up the background.
|
||||||
scrollingBckg = new ScrollingBackground("data/gfx/textures/grass.png");
|
scrollingBckg = new ScrollingBackground("data/gfx/textures/grass.png");
|
||||||
@@ -94,10 +133,10 @@ public class MainMenuState extends BaseState implements AssetsLoadedListener{
|
|||||||
|
|
||||||
core.batch.setProjectionMatrix(pixelPerfectCamera.combined);
|
core.batch.setProjectionMatrix(pixelPerfectCamera.combined);
|
||||||
core.batch.begin();{
|
core.batch.begin();{
|
||||||
|
// Render the background.
|
||||||
scrollingBckg.render(core.batch);
|
scrollingBckg.render(core.batch);
|
||||||
|
|
||||||
// Render buttons.
|
// Render the buttons.
|
||||||
startButton.draw(core.batch, 1.0f);
|
startButton.draw(core.batch, 1.0f);
|
||||||
quitButton.draw(core.batch, 1.0f);
|
quitButton.draw(core.batch, 1.0f);
|
||||||
|
|
||||||
@@ -121,6 +160,8 @@ public class MainMenuState extends BaseState implements AssetsLoadedListener{
|
|||||||
public boolean touchDown(int screenX, int screenY, int pointer, int button){
|
public boolean touchDown(int screenX, int screenY, int pointer, int button){
|
||||||
unprojectTouch(screenX, screenY);
|
unprojectTouch(screenX, screenY);
|
||||||
|
|
||||||
|
// If either button is enabled, has been touched and the opposite button is not touched then mark it as
|
||||||
|
// activated and save the id of the pointer that touched it.
|
||||||
if(!startButton.isDisabled() && startButtonBBox.contains(touchPointWorldCoords) && !quitButtonTouched){
|
if(!startButton.isDisabled() && startButtonBBox.contains(touchPointWorldCoords) && !quitButtonTouched){
|
||||||
startButton.setChecked(true);
|
startButton.setChecked(true);
|
||||||
startButtonTouched = true;
|
startButtonTouched = true;
|
||||||
@@ -138,6 +179,8 @@ public class MainMenuState extends BaseState implements AssetsLoadedListener{
|
|||||||
public boolean touchUp(int screenX, int screenY, int pointer, int button){
|
public boolean touchUp(int screenX, int screenY, int pointer, int button){
|
||||||
unprojectTouch(screenX, screenY);
|
unprojectTouch(screenX, screenY);
|
||||||
|
|
||||||
|
// If either button was activated and touched but has been released by the user then mark it as inactive
|
||||||
|
// and execute it's respective state change.
|
||||||
if(!startButton.isDisabled() && startButtonBBox.contains(touchPointWorldCoords) && startButtonTouched){
|
if(!startButton.isDisabled() && startButtonBBox.contains(touchPointWorldCoords) && startButtonTouched){
|
||||||
startButton.setChecked(false);
|
startButton.setChecked(false);
|
||||||
startButtonTouched = false;
|
startButtonTouched = false;
|
||||||
@@ -157,6 +200,8 @@ public class MainMenuState extends BaseState implements AssetsLoadedListener{
|
|||||||
public boolean touchDragged(int screenX, int screenY, int pointer){
|
public boolean touchDragged(int screenX, int screenY, int pointer){
|
||||||
unprojectTouch(screenX, screenY);
|
unprojectTouch(screenX, screenY);
|
||||||
|
|
||||||
|
// If either button was touched but the user dragged the pointer away from the button without releasing it then
|
||||||
|
// mark the button as inactive.
|
||||||
if(!startButton.isDisabled() && startButtonTouched && pointer == startButtonTouchPointer && !startButtonBBox.contains(touchPointWorldCoords)){
|
if(!startButton.isDisabled() && startButtonTouched && pointer == startButtonTouchPointer && !startButtonBBox.contains(touchPointWorldCoords)){
|
||||||
startButtonTouchPointer = -1;
|
startButtonTouchPointer = -1;
|
||||||
startButtonTouched = false;
|
startButtonTouched = false;
|
||||||
@@ -172,7 +217,8 @@ public class MainMenuState extends BaseState implements AssetsLoadedListener{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyDown(int keycode){
|
public boolean keyDown(int keycode){
|
||||||
if(keycode == Input.Keys.BACK){
|
// If the user pressed the escape key or the back button in Android then quit.
|
||||||
|
if(keycode == Input.Keys.BACK || keycode == Input.Keys.ESCAPE){
|
||||||
Gdx.app.exit();
|
Gdx.app.exit();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -194,7 +240,7 @@ public class MainMenuState extends BaseState implements AssetsLoadedListener{
|
|||||||
|
|
||||||
// Create the buttons.
|
// Create the buttons.
|
||||||
textButtonStyle = new TextButtonStyle();
|
textButtonStyle = new TextButtonStyle();
|
||||||
textButtonStyle.font = font;
|
textButtonStyle.font = buttonFont;
|
||||||
textButtonStyle.up = new NinePatchDrawable(menuButtonEnabled9p);
|
textButtonStyle.up = new NinePatchDrawable(menuButtonEnabled9p);
|
||||||
textButtonStyle.checked = new NinePatchDrawable(menuButtonPressed9p);
|
textButtonStyle.checked = new NinePatchDrawable(menuButtonPressed9p);
|
||||||
textButtonStyle.disabled = new NinePatchDrawable(menuButtonDisabled9p);
|
textButtonStyle.disabled = new NinePatchDrawable(menuButtonDisabled9p);
|
||||||
|
Reference in New Issue
Block a user