Thanks!
-Wally
GameWindow code
package main.java.dungeon.gui;
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import main.java.main.GameController;
public class GameWindow extends JFrame implements KeyListener{
private static final long serialVersionUID = 1L;
private static GameWindow gameWindow;
private static JPanel activePanel;
private GameWindow(){
super("Dungeon Crawler");
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(0, 0, 640, 480);
setVisible(true);
}
public static GameWindow create(){
if(gameWindow == null)
gameWindow = new GameWindow();
return gameWindow;
}
public void setActivePanel(JPanel panel){
activePanel = panel;
add(activePanel, BorderLayout.CENTER);
}
@Override
public void keyPressed(KeyEvent e) {
GameController.keyPressed(e);
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
//GameController.keyPressed(e);
}
}
GameController code
package main.java.main;
import java.awt.event.KeyEvent;
import main.java.dungeon.GameState;
public abstract class GameController {
private static GameState currentState;
private static GameState nextState;
private static KeyEvent keyPressed;
private GameController(){}
static void input(){
if(keyPressed != null){
currentState.input(keyPressed);
keyPressed = null;
}
}
static void logic(){
currentState.logic();
nextState = currentState.getNextState();
if(nextState != null)
currentState = nextState;
}
static void update(){
currentState.update();
}
static void setState(GameState state){
currentState = state;
}
static GameState getState(){
return currentState;
}
public static void keyPressed(KeyEvent e){
keyPressed = e;
}
}
Main Menu State code
package main.java.dungeon;
import java.awt.event.KeyEvent;
import main.java.dungeon.gui.MainMenuPanel;
public class GameStateMainMenu extends GameState{
private static final String START_GAME = "Start game!";
private static final String OPTIONS = "Options";
private static final String QUIT = "Quit";
private static final String INDENT = " ";
private int pointer;
private GameState nextState;
private boolean pointerUp, pointerDown, changeState, update;
private String text;
public GameStateMainMenu(){
gamePanel = new MainMenuPanel();
pointer = 1;
pointerUp = pointerDown = changeState = false;
update = true;
}
@Override
public void input(KeyEvent keyEvent) {
if(keyEvent != null){
switch(keyEvent.getKeyCode()){
case KeyEvent.VK_UP:
pointerUp = true;
update = true;
break;
case KeyEvent.VK_DOWN:
pointerDown = true;
update = true;
break;
case KeyEvent.VK_ENTER:
changeState = true;
break;
}
}
}
@Override
public void logic() {
if(pointerUp && pointer != 1)
pointer--;
if(pointerDown && pointer != 3)
pointer++;
if(changeState){
if(pointer == 1)
nextState = new GameStatePlaying();
if(pointer == 2)
nextState = new GameStateMainMenuOptions();
if(pointer == 3){}
//TODO generate quit code
}
}
@Override
public void update() {
if(update){
text = "\n\n\n\n" + INDENT + (pointer == 1 ? ">" : " ") + START_GAME +
"\n\n\n" + INDENT + (pointer == 2 ? ">" : " ") + OPTIONS +
"\n\n\n" + INDENT + (pointer == 3 ? ">" : " ") + QUIT;
update = false;
}
((MainMenuPanel)gamePanel).setText(text);
}
@Override
public GameState getNextState() {
return nextState;
}
}
and the game panel's code
package main.java.dungeon.gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JPanel;
import javax.swing.JTextPane;
public class MainMenuPanel extends JPanel{
private static final long serialVersionUID = 1L;
private JTextPane text;
public MainMenuPanel(){
setPreferredSize(new Dimension(640, 480));
setBounds(0, 0, 640, 480);
text = new JTextPane();
text.setPreferredSize(new Dimension(640, 480));
text.setEditable(false);
add(text, BorderLayout.CENTER);
}
public void setText(String s){
if(!s.equals(text.getText()))
text.setText(s);
}
}
Lots of code to read, I know. Thank you for taking the time to look at it! If there is any other code you need to see, please let me know! (Also, this is very much a work in progress, I know there are a lot of things that will need cleaned up in this as I work through it.) Thanks again.