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-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-16 00:35:51 +02:00
|
|
|
import com.saltosion.gladiator.util.AppUtil;
|
|
|
|
|
|
|
|
public class InGameState extends BaseState {
|
|
|
|
|
2015-05-17 03:05:55 +02:00
|
|
|
/**
|
|
|
|
* Add new levels to this list
|
|
|
|
*/
|
|
|
|
private static final Level[] levels = {new Round1Level(), new Round2Level()};
|
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() {
|
|
|
|
// 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();
|
|
|
|
}
|
|
|
|
|
|
|
|
@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() {
|
|
|
|
// 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();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|