make options menu use lists
This commit is contained in:
parent
d2ff927ab6
commit
4769c1cfda
|
@ -40,6 +40,8 @@ public class Container extends AppGameContainer {
|
||||||
/** SlickException causing game failure. */
|
/** SlickException causing game failure. */
|
||||||
protected SlickException e = null;
|
protected SlickException e = null;
|
||||||
|
|
||||||
|
public static Container instance;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new container wrapping a game
|
* Create a new container wrapping a game
|
||||||
*
|
*
|
||||||
|
@ -48,6 +50,7 @@ public class Container extends AppGameContainer {
|
||||||
*/
|
*/
|
||||||
public Container(Game game) throws SlickException {
|
public Container(Game game) throws SlickException {
|
||||||
super(game);
|
super(game);
|
||||||
|
instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -61,6 +64,7 @@ public class Container extends AppGameContainer {
|
||||||
*/
|
*/
|
||||||
public Container(Game game, int width, int height, boolean fullscreen) throws SlickException {
|
public Container(Game game, int width, int height, boolean fullscreen) throws SlickException {
|
||||||
super(game, width, height, fullscreen);
|
super(game, width, height, fullscreen);
|
||||||
|
instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -34,9 +34,7 @@ import java.io.IOException;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.jar.Attributes;
|
import java.util.jar.Attributes;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
|
@ -282,20 +280,20 @@ public class Options {
|
||||||
public String getValueString() { return resolution.toString(); }
|
public String getValueString() { return resolution.toString(); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click(GameContainer container) {
|
public Object[] getListItems() {
|
||||||
do {
|
return Resolution.values();
|
||||||
resolution = resolution.next();
|
}
|
||||||
} while (resolution != Resolution.RES_800_600 && (
|
|
||||||
container.getScreenWidth() < resolution.getWidth() ||
|
@Override
|
||||||
container.getScreenHeight() < resolution.getHeight()));
|
public void clickListItem(int index) {
|
||||||
|
resolution = Resolution.values()[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void read(String s) {
|
public void read(String s) {
|
||||||
try {
|
try {
|
||||||
Resolution res = Resolution.valueOf(String.format("RES_%s", s.replace('x', '_')));
|
resolution = Resolution.valueOf(String.format("RES_%s", s.replace('x', '_')));
|
||||||
resolution = res;
|
} catch (IllegalArgumentException ignored) {}
|
||||||
} catch (IllegalArgumentException e) {}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// FULLSCREEN ("Fullscreen Mode", "Fullscreen", "Restart to apply changes.", false),
|
// FULLSCREEN ("Fullscreen Mode", "Fullscreen", "Restart to apply changes.", false),
|
||||||
|
@ -304,9 +302,13 @@ public class Options {
|
||||||
public String getValueString() { return skinName; }
|
public String getValueString() { return skinName; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click(GameContainer container) {
|
public Object[] getListItems() {
|
||||||
skinDirIndex = (skinDirIndex + 1) % skinDirs.length;
|
return skinDirs;
|
||||||
skinName = skinDirs[skinDirIndex];
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clickListItem(int index) {
|
||||||
|
skinName = skinDirs[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -319,10 +321,19 @@ public class Options {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click(GameContainer container) {
|
public Object[] getListItems() {
|
||||||
targetFPSindex = (targetFPSindex + 1) % targetFPS.length;
|
String[] list = new String[targetFPS.length];
|
||||||
container.setTargetFrameRate(getTargetFPS());
|
for (int i = 0; i < targetFPS.length; i++) {
|
||||||
container.setVSync(getTargetFPS() == 60);
|
list[i] = String.format(targetFPS[i] == 60 ? "%dfps (vsync)" : "%dfps", targetFPS[i]);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clickListItem(int index) {
|
||||||
|
targetFPSindex = index;
|
||||||
|
Container.instance.setTargetFrameRate(targetFPS[index]);
|
||||||
|
Container.instance.setVSync(targetFPS[index] == 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -360,7 +371,14 @@ public class Options {
|
||||||
public String getValueString() { return screenshotFormat[screenshotFormatIndex].toUpperCase(); }
|
public String getValueString() { return screenshotFormat[screenshotFormatIndex].toUpperCase(); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void click(GameContainer container) { screenshotFormatIndex = (screenshotFormatIndex + 1) % screenshotFormat.length; }
|
public Object[] getListItems() {
|
||||||
|
return screenshotFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clickListItem(int index) {
|
||||||
|
screenshotFormatIndex = index;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String write() { return Integer.toString(screenshotFormatIndex); }
|
public String write() { return Integer.toString(screenshotFormatIndex); }
|
||||||
|
@ -658,6 +676,18 @@ public class Options {
|
||||||
*/
|
*/
|
||||||
public void click(GameContainer container) { bool = !bool; }
|
public void click(GameContainer container) { bool = !bool; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of values to choose from
|
||||||
|
* @return list with value string or null if no list should be shown
|
||||||
|
*/
|
||||||
|
public Object[] getListItems() { return null; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fired when an item in the value list has been clicked
|
||||||
|
* @param index the itemindex which has been clicked
|
||||||
|
*/
|
||||||
|
public void clickListItem(int index) { };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes a mouse drag action (via override).
|
* Processes a mouse drag action (via override).
|
||||||
* <p>
|
* <p>
|
||||||
|
|
|
@ -31,8 +31,7 @@ import itdelatrisu.opsu.ui.Fonts;
|
||||||
import itdelatrisu.opsu.ui.MenuButton;
|
import itdelatrisu.opsu.ui.MenuButton;
|
||||||
import itdelatrisu.opsu.ui.UI;
|
import itdelatrisu.opsu.ui.UI;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
import org.newdawn.slick.Color;
|
import org.newdawn.slick.Color;
|
||||||
import org.newdawn.slick.GameContainer;
|
import org.newdawn.slick.GameContainer;
|
||||||
|
@ -44,6 +43,7 @@ import org.newdawn.slick.state.BasicGameState;
|
||||||
import org.newdawn.slick.state.StateBasedGame;
|
import org.newdawn.slick.state.StateBasedGame;
|
||||||
import org.newdawn.slick.state.transition.FadeInTransition;
|
import org.newdawn.slick.state.transition.FadeInTransition;
|
||||||
import org.newdawn.slick.state.transition.EmptyTransition;
|
import org.newdawn.slick.state.transition.EmptyTransition;
|
||||||
|
import yugecin.opsudance.ui.ItemList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* "Game Options" state.
|
* "Game Options" state.
|
||||||
|
@ -174,13 +174,18 @@ public class OptionsMenu extends BasicGameState {
|
||||||
private Graphics g;
|
private Graphics g;
|
||||||
private final int state;
|
private final int state;
|
||||||
|
|
||||||
|
private final ItemList list;
|
||||||
|
|
||||||
public OptionsMenu(int state) {
|
public OptionsMenu(int state) {
|
||||||
this.state = state;
|
this.state = state;
|
||||||
|
list = new ItemList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(GameContainer container, StateBasedGame game)
|
public void init(GameContainer container, StateBasedGame game)
|
||||||
throws SlickException {
|
throws SlickException {
|
||||||
|
list.init(container);
|
||||||
|
|
||||||
this.container = container;
|
this.container = container;
|
||||||
this.game = game;
|
this.game = game;
|
||||||
this.input = container.getInput();
|
this.input = container.getInput();
|
||||||
|
@ -241,7 +246,7 @@ public class OptionsMenu extends BasicGameState {
|
||||||
for (OptionTab tab : OptionTab.VALUES_REVERSED) {
|
for (OptionTab tab : OptionTab.VALUES_REVERSED) {
|
||||||
if (tab != currentTab)
|
if (tab != currentTab)
|
||||||
UI.drawTab(tab.button.getX(), tab.button.getY(),
|
UI.drawTab(tab.button.getX(), tab.button.getY(),
|
||||||
tab.getName(), false, tab == hoverTab);
|
tab.getName(), false, tab == hoverTab && !list.isVisible());
|
||||||
}
|
}
|
||||||
UI.drawTab(currentTab.button.getX(), currentTab.button.getY(),
|
UI.drawTab(currentTab.button.getX(), currentTab.button.getY(),
|
||||||
currentTab.getName(), true, false);
|
currentTab.getName(), true, false);
|
||||||
|
@ -251,6 +256,10 @@ public class OptionsMenu extends BasicGameState {
|
||||||
g.drawLine(0, lineY, width, lineY);
|
g.drawLine(0, lineY, width, lineY);
|
||||||
g.resetLineWidth();
|
g.resetLineWidth();
|
||||||
|
|
||||||
|
if (list.isVisible()) {
|
||||||
|
list.render(container, game, g);
|
||||||
|
}
|
||||||
|
|
||||||
UI.getBackButton().draw();
|
UI.getBackButton().draw();
|
||||||
|
|
||||||
// key entry state
|
// key entry state
|
||||||
|
@ -282,8 +291,20 @@ public class OptionsMenu extends BasicGameState {
|
||||||
@Override
|
@Override
|
||||||
public int getID() { return state; }
|
public int getID() { return state; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseReleased(int button, int x, int y) {
|
||||||
|
if (list.isVisible()) {
|
||||||
|
list.mouseReleased(button, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(int button, int x, int y) {
|
public void mousePressed(int button, int x, int y) {
|
||||||
|
if (list.isVisible()) {
|
||||||
|
list.mousePressed(button, x, y);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// key entry state
|
// key entry state
|
||||||
if (keyEntryLeft || keyEntryRight) {
|
if (keyEntryLeft || keyEntryRight) {
|
||||||
keyEntryLeft = keyEntryRight = false;
|
keyEntryLeft = keyEntryRight = false;
|
||||||
|
@ -313,9 +334,22 @@ public class OptionsMenu extends BasicGameState {
|
||||||
}
|
}
|
||||||
|
|
||||||
// options (click only)
|
// options (click only)
|
||||||
GameOption option = getOptionAt(y);
|
final GameOption option = getOptionAt(y);
|
||||||
if (option != null)
|
if (option != null) {
|
||||||
option.click(container);
|
Object[] listItems = option.getListItems();
|
||||||
|
if (listItems == null) {
|
||||||
|
option.click(container);
|
||||||
|
} else {
|
||||||
|
list.setItems(listItems);
|
||||||
|
list.setClickListener(new Observer() {
|
||||||
|
@Override
|
||||||
|
public void update(Observable o, Object arg) {
|
||||||
|
option.clickListItem((int) arg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
list.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// special key entry states
|
// special key entry states
|
||||||
if (option == GameOption.KEY_LEFT) {
|
if (option == GameOption.KEY_LEFT) {
|
||||||
|
@ -329,6 +363,11 @@ public class OptionsMenu extends BasicGameState {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseDragged(int oldx, int oldy, int newx, int newy) {
|
public void mouseDragged(int oldx, int oldy, int newx, int newy) {
|
||||||
|
if (list.isVisible()) {
|
||||||
|
list.mouseDragged(oldx, oldy, newx, newy);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// key entry state
|
// key entry state
|
||||||
if (keyEntryLeft || keyEntryRight)
|
if (keyEntryLeft || keyEntryRight)
|
||||||
return;
|
return;
|
||||||
|
@ -356,12 +395,20 @@ public class OptionsMenu extends BasicGameState {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseWheelMoved(int newValue) {
|
public void mouseWheelMoved(int newValue) {
|
||||||
|
if (list.isVisible()) {
|
||||||
|
list.mouseWheelMoved(newValue);
|
||||||
|
}
|
||||||
if (input.isKeyDown(Input.KEY_LALT) || input.isKeyDown(Input.KEY_RALT))
|
if (input.isKeyDown(Input.KEY_LALT) || input.isKeyDown(Input.KEY_RALT))
|
||||||
UI.changeVolume((newValue < 0) ? -1 : 1);
|
UI.changeVolume((newValue < 0) ? -1 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void keyPressed(int key, char c) {
|
public void keyPressed(int key, char c) {
|
||||||
|
if (list.isVisible()) {
|
||||||
|
list.keyPressed(key, c);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// key entry state
|
// key entry state
|
||||||
if (keyEntryLeft || keyEntryRight) {
|
if (keyEntryLeft || keyEntryRight) {
|
||||||
if (keyEntryLeft)
|
if (keyEntryLeft)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user