package game.scenes;
import java.util.LinkedList;
import java.util.List;
import engine.classes.Colour;
import engine.geometry.Rectangle;
import engine.geometry.Vector;
import engine.hierarchy.DefaultScene;
import engine.hierarchy.Scene;
import engine.interfaces.Clock;
import engine.interfaces.Font;
import engine.interfaces.Keyboard;
import engine.interfaces.Mouse;
import engine.interfaces.RenderTarget;
import engine.interfaces.Keyboard.Key;
public final class ConsoleScene extends DefaultScene {
private String text;
private Vector position;
private Rectangle rectangle;
private Colour textColour;
private Colour rectColour;
private Font font;
private List<Scene> activeScenes;
@Override
public void onAdd() {
text = "";
position = new Vector(2, 476);
rectangle = new Rectangle(0, 464, 640, 16);
textColour = new Colour(255, 255, 255);
rectColour = new Colour(0, 0, 0, 128);
font = getStage().getLibrary().findFont("Debug");
activeScenes = new LinkedList<Scene>();
for (Scene s : getStage().getScenes()) {
if (s.isActive()) {
activeScenes.add(s);
s.setActive(false);
}
}
setActive(true);
}
@Override
public void onBeforeMove(final Keyboard keyboard, final Mouse mouse, final Clock clock) {
if (keyboard.wasReleased(Key.VK_ESCAPE)) {
// Close console
for (Scene s : activeScenes) {
s.setActive(true);
}
getStage().removeScene(this);
} else if (keyboard.wasReleased(Key.VK_ENTER)) {
// Execute command
getStage().getConsole().executeCommand(text);
// Close console
for (Scene s : activeScenes) {
s.setActive(true);
}
getStage().removeScene(this);
} else {
text += keyboard.getTyped().replace("\n", "").replace("\r", "");
// Handle backspaces
for (int i = 0; i < text.length(); i++) {
if (text.charAt(i) == '\b') {
if (i == 0) {
if (i == text.length() - 1) {
text = "";
} else {
text = text.substring(0, i).concat(text.substring(i + 1, text.length()));
}
} else {
if (i == text.length() - 1) {
text = text.substring(0, i - 1);
} else {
text = text.substring(0, i - 1).concat(text.substring(i + 1, text.length()));
}
}
}
}
}
}
@Override
public void onDraw(final RenderTarget target) {
target.transformPush();
target.transformIdentity();
target.fillRectangle(rectangle, rectColour);
target.drawString(">>> " + text, font, textColour, position);
target.transformPop();
}
}