2015-05-18 02:22:13 +02:00
|
|
|
/**
|
|
|
|
* GladiatorBrawler is a 2D swordfighting game.
|
|
|
|
* Copyright (C) 2015 Jeasonfire/Allexit
|
|
|
|
*
|
|
|
|
* This program 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.
|
|
|
|
*
|
|
|
|
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
2015-05-16 00:35:51 +02:00
|
|
|
package com.saltosion.gladiator.state;
|
|
|
|
|
2015-05-16 23:12:24 +02:00
|
|
|
import com.saltosion.gladiator.gui.creators.InGameGUICreator;
|
2015-05-16 00:35:51 +02:00
|
|
|
import com.saltosion.gladiator.level.Level;
|
2015-05-18 03:26:34 +02:00
|
|
|
import com.saltosion.gladiator.level.premade.Round10Level;
|
2015-05-17 00:10:51 +02:00
|
|
|
import com.saltosion.gladiator.level.premade.Round1Level;
|
2015-05-17 03:05:55 +02:00
|
|
|
import com.saltosion.gladiator.level.premade.Round2Level;
|
2015-05-17 23:55:09 +02:00
|
|
|
import com.saltosion.gladiator.level.premade.Round3Level;
|
|
|
|
import com.saltosion.gladiator.level.premade.Round4Level;
|
2015-05-18 01:55:02 +02:00
|
|
|
import com.saltosion.gladiator.level.premade.Round5Level;
|
2015-05-18 03:26:34 +02:00
|
|
|
import com.saltosion.gladiator.level.premade.Round6Level;
|
|
|
|
import com.saltosion.gladiator.level.premade.Round7Level;
|
|
|
|
import com.saltosion.gladiator.level.premade.Round8Level;
|
|
|
|
import com.saltosion.gladiator.level.premade.Round9Level;
|
2015-05-16 00:35:51 +02:00
|
|
|
import com.saltosion.gladiator.util.AppUtil;
|
2015-05-18 00:10:20 +02:00
|
|
|
import com.saltosion.gladiator.util.AudioLoader;
|
|
|
|
import com.saltosion.gladiator.util.Name;
|
2015-05-16 00:35:51 +02:00
|
|
|
|
|
|
|
public class InGameState extends BaseState {
|
|
|
|
|
2015-05-17 03:05:55 +02:00
|
|
|
/**
|
|
|
|
* Add new levels to this list
|
|
|
|
*/
|
2015-05-17 23:55:09 +02:00
|
|
|
private static final Level[] levels = {new Round1Level(), new Round2Level(),
|
2015-05-18 03:26:34 +02:00
|
|
|
new Round3Level(), new Round4Level(), new Round5Level(), new Round6Level(),
|
|
|
|
new Round7Level(), new Round8Level(), new Round9Level(), new Round10Level()};
|
2015-05-17 00:10:51 +02:00
|
|
|
|
2015-05-16 00:35:51 +02:00
|
|
|
private Level level;
|
2015-05-16 23:12:24 +02:00
|
|
|
private InGameGUICreator guiCreator;
|
|
|
|
|
2015-05-17 00:10:51 +02:00
|
|
|
private int currentLevel = 0;
|
2015-05-16 23:12:24 +02:00
|
|
|
private float timeSinceLevelChange;
|
|
|
|
private final float levelChangeTextDelay = 2;
|
|
|
|
private boolean levelChangeTextChanged = false;
|
2015-05-16 00:35:51 +02:00
|
|
|
|
2015-05-17 03:05:55 +02:00
|
|
|
private float timeSinceLevelFailed;
|
|
|
|
private final float levelFailedDelay = 1.5f;
|
|
|
|
|
|
|
|
private float timeSinceLevelWon;
|
|
|
|
private final float levelWonDelay = 1.5f;
|
|
|
|
|
2015-05-16 00:35:51 +02:00
|
|
|
@Override
|
|
|
|
public void create() {
|
2015-05-18 00:10:20 +02:00
|
|
|
// Play music
|
|
|
|
AppUtil.jukebox.playMusic(AudioLoader.getMusic(Name.MUSIC_BATTLE));
|
2015-05-18 01:35:23 +02:00
|
|
|
AppUtil.jukebox.setMusicVolume(AppUtil.musicVolume / 2);
|
|
|
|
|
2015-05-16 00:35:51 +02:00
|
|
|
// Start from a clean slate
|
|
|
|
AppUtil.engine.removeAllEntities();
|
|
|
|
AppUtil.guiManager.clearGUI();
|
|
|
|
|
2015-05-17 00:10:51 +02:00
|
|
|
level = levels[currentLevel];
|
2015-05-16 00:35:51 +02:00
|
|
|
level.generate();
|
2015-05-16 23:12:24 +02:00
|
|
|
timeSinceLevelChange = 0;
|
2015-05-16 00:35:51 +02:00
|
|
|
|
2015-05-16 23:12:24 +02:00
|
|
|
guiCreator = new InGameGUICreator();
|
2015-05-16 00:35:51 +02:00
|
|
|
guiCreator.create();
|
2015-05-18 01:35:23 +02:00
|
|
|
|
2015-05-18 00:54:18 +02:00
|
|
|
// Activate inputs
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.JUMP, true);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.MOVE_LEFT, true);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.MOVE_RIGHT, true);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.SWING_DOWN, true);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.SWING_LEFT, true);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.SWING_RIGHT, true);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.SWING_UP, true);
|
2015-05-16 00:35:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void update(float deltaTime) {
|
2015-05-16 23:12:24 +02:00
|
|
|
if (timeSinceLevelChange < levelChangeTextDelay) {
|
|
|
|
timeSinceLevelChange += deltaTime;
|
|
|
|
if (!levelChangeTextChanged) {
|
|
|
|
guiCreator.getLevelChangeText().setVisible(true);
|
|
|
|
guiCreator.getLevelChangeText().setText(level.getLevelName());
|
|
|
|
levelChangeTextChanged = true;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
guiCreator.getLevelChangeText().setVisible(false);
|
|
|
|
levelChangeTextChanged = false;
|
|
|
|
}
|
2015-05-17 00:10:51 +02:00
|
|
|
|
|
|
|
if (level.levelCleared()) {
|
2015-05-17 03:05:55 +02:00
|
|
|
timeSinceLevelWon += deltaTime;
|
|
|
|
if (timeSinceLevelWon > levelWonDelay) {
|
|
|
|
currentLevel++;
|
|
|
|
timeSinceLevelWon = 0;
|
|
|
|
if (currentLevel >= levels.length) {
|
|
|
|
setState(new WinState());
|
|
|
|
} else {
|
|
|
|
changeLevel(levels[currentLevel]);
|
|
|
|
}
|
2015-05-17 00:10:51 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (level.levelFailed()) {
|
2015-05-17 03:05:55 +02:00
|
|
|
timeSinceLevelFailed += deltaTime;
|
|
|
|
if (timeSinceLevelFailed > levelFailedDelay) {
|
|
|
|
setState(new GameOverState());
|
|
|
|
}
|
2015-05-17 00:10:51 +02:00
|
|
|
}
|
2015-05-16 23:12:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void changeLevel(Level level) {
|
|
|
|
AppUtil.engine.removeAllEntities();
|
|
|
|
this.level = level;
|
2015-05-17 03:05:55 +02:00
|
|
|
this.level.generate();
|
2015-05-16 23:12:24 +02:00
|
|
|
this.timeSinceLevelChange = 0;
|
2015-05-16 00:35:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void destroy() {
|
2015-05-18 01:35:23 +02:00
|
|
|
|
2015-05-18 00:54:18 +02:00
|
|
|
// Deactivate inputs
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.JUMP, false);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.MOVE_LEFT, false);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.MOVE_RIGHT, false);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.SWING_DOWN, false);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.SWING_LEFT, false);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.SWING_RIGHT, false);
|
|
|
|
AppUtil.inputHandler.setInputEnabled(Name.SWING_UP, false);
|
2015-05-18 01:35:23 +02:00
|
|
|
|
2015-05-16 00:35:51 +02:00
|
|
|
// Clear all entities that are left as they are no longer needed
|
|
|
|
AppUtil.engine.removeAllEntities();
|
|
|
|
// Clear GUI so there's nothing leftover for the next state
|
|
|
|
AppUtil.guiManager.clearGUI();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|