add key input option handling and other improvements
This commit is contained in:
parent
03ef993a18
commit
4bfd5147fb
|
@ -18,6 +18,7 @@
|
||||||
package yugecin.opsudance.ui;
|
package yugecin.opsudance.ui;
|
||||||
|
|
||||||
import itdelatrisu.opsu.GameImage;
|
import itdelatrisu.opsu.GameImage;
|
||||||
|
import itdelatrisu.opsu.Options;
|
||||||
import itdelatrisu.opsu.Options.GameOption;
|
import itdelatrisu.opsu.Options.GameOption;
|
||||||
import itdelatrisu.opsu.Options.GameOption.OptionType;
|
import itdelatrisu.opsu.Options.GameOption.OptionType;
|
||||||
import itdelatrisu.opsu.Utils;
|
import itdelatrisu.opsu.Utils;
|
||||||
|
@ -65,6 +66,9 @@ public class OptionsOverlay {
|
||||||
|
|
||||||
private int mousePressY;
|
private int mousePressY;
|
||||||
|
|
||||||
|
private boolean keyEntryLeft;
|
||||||
|
private boolean keyEntryRight;
|
||||||
|
|
||||||
public OptionsOverlay(Parent parent, OptionTab[] tabs, int defaultSelectedTabIndex, GameContainer container) {
|
public OptionsOverlay(Parent parent, OptionTab[] tabs, int defaultSelectedTabIndex, GameContainer container) {
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
this.container = container;
|
this.container = container;
|
||||||
|
@ -92,7 +96,6 @@ public class OptionsOverlay {
|
||||||
maxScrollOffset = Fonts.MEDIUM.getLineHeight() * 2 * tabs.length;
|
maxScrollOffset = Fonts.MEDIUM.getLineHeight() * 2 * tabs.length;
|
||||||
for (int i = 0; i < tabs.length; i++) {
|
for (int i = 0; i < tabs.length; i++) {
|
||||||
maxScrollOffset += tabs[i].options.length * optionHeight;
|
maxScrollOffset += tabs[i].options.length * optionHeight;
|
||||||
tabs[i].tabIndex = i;
|
|
||||||
tabs[i].button = new MenuButton(tabImage, tabX, tabY);
|
tabs[i].button = new MenuButton(tabImage, tabX, tabY);
|
||||||
tabX += tabOffset;
|
tabX += tabOffset;
|
||||||
if (tabX + tabOffset > width) {
|
if (tabX + tabOffset > width) {
|
||||||
|
@ -139,6 +142,18 @@ public class OptionsOverlay {
|
||||||
|
|
||||||
// tooltip
|
// tooltip
|
||||||
renderTooltip(g, mouseX, mouseY);
|
renderTooltip(g, mouseX, mouseY);
|
||||||
|
|
||||||
|
if (keyEntryLeft ||keyEntryRight) {
|
||||||
|
renderKeyEntry(g);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void renderKeyEntry(Graphics g) {
|
||||||
|
g.setColor(Colors.BLACK_ALPHA_75);
|
||||||
|
g.fillRect(0, 0, width, height);
|
||||||
|
g.setColor(Color.white);
|
||||||
|
String prompt = (keyEntryLeft) ? "Please press the new left-click key." : "Please press the new right-click key.";
|
||||||
|
Fonts.LARGE.drawString((width - Fonts.LARGE.getWidth(prompt)) / 2, (height - Fonts.LARGE.getLineHeight()) / 2, prompt);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderTooltip(Graphics g, int mouseX, int mouseY) {
|
private void renderTooltip(Graphics g, int mouseX, int mouseY) {
|
||||||
|
@ -325,9 +340,16 @@ public class OptionsOverlay {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void mousePressed(int button, int x, int y) {
|
public void mousePressed(int button, int x, int y) {
|
||||||
|
if (keyEntryLeft || keyEntryRight) {
|
||||||
|
keyEntryLeft = keyEntryRight = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (isListOptionOpen) {
|
if (isListOptionOpen) {
|
||||||
if (y > optionStartY && listStartX <= x && x < listStartX + listWidth && listStartY <= y && y < listStartY + listHeight) {
|
if (y > optionStartY && listStartX <= x && x < listStartX + listWidth && listStartY <= y && y < listStartY + listHeight) {
|
||||||
hoverOption.clickListItem(listHoverIndex);
|
hoverOption.clickListItem(listHoverIndex);
|
||||||
|
parent.onSaveOption(hoverOption);
|
||||||
|
SoundController.playSound(SoundEffect.MENUCLICK);
|
||||||
}
|
}
|
||||||
isListOptionOpen = false;
|
isListOptionOpen = false;
|
||||||
listHoverIndex = -1;
|
listHoverIndex = -1;
|
||||||
|
@ -342,6 +364,10 @@ public class OptionsOverlay {
|
||||||
isListOptionOpen = true;
|
isListOptionOpen = true;
|
||||||
} else if (selectedOption.getType() == OptionType.NUMERIC) {
|
} else if (selectedOption.getType() == OptionType.NUMERIC) {
|
||||||
isAdjustingSlider = sliderOptionStartX <= x && x < sliderOptionStartX + sliderOptionLength;
|
isAdjustingSlider = sliderOptionStartX <= x && x < sliderOptionStartX + sliderOptionLength;
|
||||||
|
} else if (selectedOption == GameOption.KEY_LEFT) {
|
||||||
|
keyEntryLeft = true;
|
||||||
|
} else if (selectedOption == GameOption.KEY_RIGHT) {
|
||||||
|
keyEntryLeft = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,11 +387,14 @@ public class OptionsOverlay {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hoverOption != null && hoverOption.getType() == OptionType.BOOLEAN) {
|
if (hoverOption != null) {
|
||||||
|
parent.onSaveOption(hoverOption);
|
||||||
|
if (hoverOption.getType() == OptionType.BOOLEAN) {
|
||||||
hoverOption.click(container);
|
hoverOption.click(container);
|
||||||
SoundController.playSound(SoundEffect.MENUHIT);
|
SoundController.playSound(SoundEffect.MENUHIT);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int tScrollOffset = 0;
|
int tScrollOffset = 0;
|
||||||
for (int tabIndex = 0; tabIndex < tabs.length; tabIndex++) {
|
for (int tabIndex = 0; tabIndex < tabs.length; tabIndex++) {
|
||||||
|
@ -395,8 +424,25 @@ public class OptionsOverlay {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean keyPressed(int key, char c) {
|
public boolean keyPressed(int key, char c) {
|
||||||
|
if (keyEntryRight) {
|
||||||
|
Options.setGameKeyRight(key);
|
||||||
|
keyEntryRight = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keyEntryLeft) {
|
||||||
|
Options.setGameKeyLeft(key);
|
||||||
|
keyEntryLeft = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case Input.KEY_ESCAPE:
|
case Input.KEY_ESCAPE:
|
||||||
|
if (isListOptionOpen) {
|
||||||
|
isListOptionOpen = false;
|
||||||
|
listHoverIndex = -1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
parent.onLeave();
|
parent.onLeave();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -404,7 +450,7 @@ public class OptionsOverlay {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateHoverOption(int mouseX, int mouseY) {
|
private void updateHoverOption(int mouseX, int mouseY) {
|
||||||
if (isListOptionOpen) {
|
if (isListOptionOpen || keyEntryLeft || keyEntryRight) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (selectedOption != null) {
|
if (selectedOption != null) {
|
||||||
|
@ -440,7 +486,6 @@ public class OptionsOverlay {
|
||||||
public final String name;
|
public final String name;
|
||||||
public final GameOption[] options;
|
public final GameOption[] options;
|
||||||
private MenuButton button;
|
private MenuButton button;
|
||||||
private int tabIndex;
|
|
||||||
|
|
||||||
public OptionTab(String name, GameOption[] options) {
|
public OptionTab(String name, GameOption[] options) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user