strip Input handling
This commit is contained in:
parent
42bc11ef75
commit
a5efe7e649
|
@ -131,6 +131,9 @@ then run (code is compiled automatically when you run)
|
||||||
<exclude name="org/newdawn/slick/Music.*" />
|
<exclude name="org/newdawn/slick/Music.*" />
|
||||||
<exclude name="org/newdawn/slick/Input.*" />
|
<exclude name="org/newdawn/slick/Input.*" />
|
||||||
<exclude name="org/newdawn/slick/Input$NullOutputStream.*" />
|
<exclude name="org/newdawn/slick/Input$NullOutputStream.*" />
|
||||||
|
<exclude name="org/newdawn/slick/MouseListener.*" />
|
||||||
|
<exclude name="org/newdawn/slick/KeyListener.*" />
|
||||||
|
<exclude name="org/newdawn/slick/InputListener.*" />
|
||||||
<exclude name="org/newdawn/slick/gui/TextField.*" />
|
<exclude name="org/newdawn/slick/gui/TextField.*" />
|
||||||
<exclude name="org/newdawn/slick/openal/AudioInputStream*" />
|
<exclude name="org/newdawn/slick/openal/AudioInputStream*" />
|
||||||
<exclude name="org/newdawn/slick/openal/OpenALStreamPlayer*" />
|
<exclude name="org/newdawn/slick/openal/OpenALStreamPlayer*" />
|
||||||
|
|
3
pom.xml
3
pom.xml
|
@ -125,6 +125,9 @@
|
||||||
<exclude>org/newdawn/slick/Music.*</exclude>
|
<exclude>org/newdawn/slick/Music.*</exclude>
|
||||||
<exclude>org/newdawn/slick/Input.*</exclude>
|
<exclude>org/newdawn/slick/Input.*</exclude>
|
||||||
<exclude>org/newdawn/slick/Input$NullOutputStream.*</exclude>
|
<exclude>org/newdawn/slick/Input$NullOutputStream.*</exclude>
|
||||||
|
<exclude>org/newdawn/slick/MouseListener.*</exclude>
|
||||||
|
<exclude>org/newdawn/slick/KeyListener.*</exclude>
|
||||||
|
<exclude>org/newdawn/slick/InputListener.*</exclude>
|
||||||
<exclude>org/newdawn/slick/gui/TextField.*</exclude>
|
<exclude>org/newdawn/slick/gui/TextField.*</exclude>
|
||||||
<exclude>org/newdawn/slick/openal/AudioInputStream*</exclude>
|
<exclude>org/newdawn/slick/openal/AudioInputStream*</exclude>
|
||||||
<exclude>org/newdawn/slick/openal/OpenALStreamPlayer*</exclude>
|
<exclude>org/newdawn/slick/openal/OpenALStreamPlayer*</exclude>
|
||||||
|
|
|
@ -306,7 +306,7 @@ public class DownloadsMenu extends ComplexOpsuState {
|
||||||
// search
|
// search
|
||||||
searchTimer = SEARCH_DELAY;
|
searchTimer = SEARCH_DELAY;
|
||||||
searchResultString = "Loading data from server...";
|
searchResultString = "Loading data from server...";
|
||||||
search = new TextField(displayContainer, Fonts.DEFAULT, baseX, searchY, searchWidth, Fonts.MEDIUM.getLineHeight()) {
|
search = new TextField(Fonts.DEFAULT, baseX, searchY, searchWidth, Fonts.MEDIUM.getLineHeight()) {
|
||||||
@Override
|
@Override
|
||||||
public boolean isFocusable() {
|
public boolean isFocusable() {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1150,7 +1150,7 @@ public class Game extends ComplexOpsuState {
|
||||||
break;
|
break;
|
||||||
case Input.KEY_R:
|
case Input.KEY_R:
|
||||||
// restart
|
// restart
|
||||||
if (displayContainer.input.isKeyDown(Input.KEY_RCONTROL) || displayContainer.input.isKeyDown(Input.KEY_LCONTROL)) {
|
if (input.isKeyDown(Input.KEY_RCONTROL) || input.isKeyDown(Input.KEY_LCONTROL)) {
|
||||||
if (trackPosition < beatmap.objects[0].getTime()) {
|
if (trackPosition < beatmap.objects[0].getTime()) {
|
||||||
retries--; // don't count this retry (cancel out later increment)
|
retries--; // don't count this retry (cancel out later increment)
|
||||||
}
|
}
|
||||||
|
@ -1161,7 +1161,7 @@ public class Game extends ComplexOpsuState {
|
||||||
break;
|
break;
|
||||||
case Input.KEY_S:
|
case Input.KEY_S:
|
||||||
// save checkpoint
|
// save checkpoint
|
||||||
if (displayContainer.input.isKeyDown(Input.KEY_RCONTROL) || displayContainer.input.isKeyDown(Input.KEY_LCONTROL)) {
|
if (input.isKeyDown(Input.KEY_RCONTROL) || input.isKeyDown(Input.KEY_LCONTROL)) {
|
||||||
if (isLeadIn()) {
|
if (isLeadIn()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1177,7 +1177,7 @@ public class Game extends ComplexOpsuState {
|
||||||
break;
|
break;
|
||||||
case Input.KEY_L:
|
case Input.KEY_L:
|
||||||
// load checkpoint
|
// load checkpoint
|
||||||
if (displayContainer.input.isKeyDown(Input.KEY_RCONTROL) || displayContainer.input.isKeyDown(Input.KEY_LCONTROL)) {
|
if (input.isKeyDown(Input.KEY_RCONTROL) || input.isKeyDown(Input.KEY_LCONTROL)) {
|
||||||
int checkpoint = OPTION_CHECKPOINT.val * 1000;
|
int checkpoint = OPTION_CHECKPOINT.val * 1000;
|
||||||
if (checkpoint == 0 || checkpoint > beatmap.endTime)
|
if (checkpoint == 0 || checkpoint > beatmap.endTime)
|
||||||
break; // invalid checkpoint
|
break; // invalid checkpoint
|
||||||
|
@ -1396,7 +1396,7 @@ public class Game extends ComplexOpsuState {
|
||||||
keys = ReplayFrame.KEY_K2;
|
keys = ReplayFrame.KEY_K2;
|
||||||
}
|
}
|
||||||
if (keys != ReplayFrame.KEY_NONE) {
|
if (keys != ReplayFrame.KEY_NONE) {
|
||||||
gameKeyReleased(keys, displayContainer.input.getMouseX(), displayContainer.input.getMouseY(), MusicController.getPosition());
|
gameKeyReleased(keys, input.getMouseX(), input.getMouseY(), MusicController.getPosition());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -109,7 +109,7 @@ public class GamePauseMenu extends BaseOpsuState {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == Input.KEY_R && (displayContainer.input.isKeyDown(Input.KEY_RCONTROL) || displayContainer.input.isKeyDown(Input.KEY_LCONTROL))) {
|
if (key == Input.KEY_R && (input.isKeyDown(Input.KEY_RCONTROL) || input.isKeyDown(Input.KEY_LCONTROL))) {
|
||||||
gameState.setRestart(Game.Restart.MANUAL);
|
gameState.setRestart(Game.Restart.MANUAL);
|
||||||
displayContainer.switchState(gameState);
|
displayContainer.switchState(gameState);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -389,7 +389,7 @@ public class SongMenu extends ComplexOpsuState {
|
||||||
// search
|
// search
|
||||||
int textFieldX = (int) (displayContainer.width * 0.7125f + Fonts.BOLD.getWidth("Search: "));
|
int textFieldX = (int) (displayContainer.width * 0.7125f + Fonts.BOLD.getWidth("Search: "));
|
||||||
int textFieldY = (int) (headerY + Fonts.BOLD.getLineHeight() / 2);
|
int textFieldY = (int) (headerY + Fonts.BOLD.getLineHeight() / 2);
|
||||||
searchTextField = new TextField(displayContainer, Fonts.BOLD, textFieldX, textFieldY, (int) (displayContainer.width * 0.99f) - textFieldX, Fonts.BOLD.getLineHeight()) {
|
searchTextField = new TextField(Fonts.BOLD, textFieldX, textFieldY, (int) (displayContainer.width * 0.99f) - textFieldX, Fonts.BOLD.getLineHeight()) {
|
||||||
@Override
|
@Override
|
||||||
public boolean isFocusable() {
|
public boolean isFocusable() {
|
||||||
return false;
|
return false;
|
||||||
|
@ -1042,8 +1042,6 @@ public class SongMenu extends ComplexOpsuState {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Input input = displayContainer.input;
|
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case Input.KEY_ESCAPE:
|
case Input.KEY_ESCAPE:
|
||||||
if (reloadThread != null) {
|
if (reloadThread != null) {
|
||||||
|
@ -1204,9 +1202,9 @@ public class SongMenu extends ComplexOpsuState {
|
||||||
|
|
||||||
// check mouse button (right click scrolls faster on songs)
|
// check mouse button (right click scrolls faster on songs)
|
||||||
int multiplier;
|
int multiplier;
|
||||||
if (displayContainer.input.isMouseButtonDown(Input.MOUSE_RIGHT_BUTTON)) {
|
if (input.isMouseButtonDown(Input.MOUSE_RIGHT_BUTTON)) {
|
||||||
multiplier = 10;
|
multiplier = 10;
|
||||||
} else if (displayContainer.input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)) {
|
} else if (input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)) {
|
||||||
multiplier = 1;
|
multiplier = 1;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
@ -1226,8 +1224,6 @@ public class SongMenu extends ComplexOpsuState {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Input input = displayContainer.input;
|
|
||||||
|
|
||||||
if (isInputBlocked()) {
|
if (isInputBlocked()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1768,7 +1764,7 @@ public class SongMenu extends ComplexOpsuState {
|
||||||
}
|
}
|
||||||
|
|
||||||
// turn on "auto" mod if holding "ctrl" key
|
// turn on "auto" mod if holding "ctrl" key
|
||||||
if (displayContainer.input.isKeyDown(Input.KEY_RCONTROL) || displayContainer.input.isKeyDown(Input.KEY_LCONTROL)) {
|
if (input.isKeyDown(Input.KEY_RCONTROL) || input.isKeyDown(Input.KEY_LCONTROL)) {
|
||||||
if (!GameMod.AUTO.isActive())
|
if (!GameMod.AUTO.isActive())
|
||||||
GameMod.AUTO.toggle(true);
|
GameMod.AUTO.toggle(true);
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
10
src/org/newdawn/slick/InputListener.java
Normal file
10
src/org/newdawn/slick/InputListener.java
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
package org.newdawn.slick;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A listener that will be notified of keyboard and mouse events
|
||||||
|
* Edited for opsu!
|
||||||
|
*
|
||||||
|
* @author kevin
|
||||||
|
*/
|
||||||
|
public interface InputListener extends MouseListener, KeyListener {
|
||||||
|
}
|
27
src/org/newdawn/slick/KeyListener.java
Normal file
27
src/org/newdawn/slick/KeyListener.java
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
package org.newdawn.slick;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes classes capable of responding to key presses
|
||||||
|
* Edited for opsu!
|
||||||
|
*
|
||||||
|
* @author kevin
|
||||||
|
*/
|
||||||
|
public interface KeyListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notification that a key was pressed
|
||||||
|
*
|
||||||
|
* @param key The key code that was pressed (@see org.newdawn.slick.Input)
|
||||||
|
* @param c The character of the key that was pressed
|
||||||
|
*/
|
||||||
|
boolean keyPressed(int key, char c);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notification that a key was released
|
||||||
|
*
|
||||||
|
* @param key The key code that was released (@see org.newdawn.slick.Input)
|
||||||
|
* @param c The character of the key that was released
|
||||||
|
*/
|
||||||
|
boolean keyReleased(int key, char c);
|
||||||
|
|
||||||
|
}
|
46
src/org/newdawn/slick/MouseListener.java
Normal file
46
src/org/newdawn/slick/MouseListener.java
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package org.newdawn.slick;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of classes that respond to mouse related input events
|
||||||
|
* Edited for opsu!
|
||||||
|
*
|
||||||
|
* @author kevin
|
||||||
|
*/
|
||||||
|
public interface MouseListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notification that the mouse wheel position was updated
|
||||||
|
*
|
||||||
|
* @param delta The amount of the wheel has moved
|
||||||
|
*/
|
||||||
|
boolean mouseWheelMoved(int delta);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notification that a mouse button was pressed
|
||||||
|
*
|
||||||
|
* @param button The index of the button (starting at 0)
|
||||||
|
* @param x The x position of the mouse when the button was pressed
|
||||||
|
* @param y The y position of the mouse when the button was pressed
|
||||||
|
*/
|
||||||
|
boolean mousePressed(int button, int x, int y);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notification that a mouse button was released
|
||||||
|
*
|
||||||
|
* @param button The index of the button (starting at 0)
|
||||||
|
* @param x The x position of the mouse when the button was released
|
||||||
|
* @param y The y position of the mouse when the button was released
|
||||||
|
*/
|
||||||
|
boolean mouseReleased(int button, int x, int y);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notification that mouse cursor was dragged
|
||||||
|
*
|
||||||
|
* @param oldx The old x position of the mouse
|
||||||
|
* @param oldy The old y position of the mouse
|
||||||
|
* @param newx The new x position of the mouse
|
||||||
|
* @param newy The new y position of the mouse
|
||||||
|
*/
|
||||||
|
boolean mouseDragged(int oldx, int oldy, int newx, int newy);
|
||||||
|
|
||||||
|
}
|
|
@ -34,10 +34,11 @@ import org.newdawn.slick.Font;
|
||||||
import org.newdawn.slick.Graphics;
|
import org.newdawn.slick.Graphics;
|
||||||
import org.newdawn.slick.Input;
|
import org.newdawn.slick.Input;
|
||||||
import org.newdawn.slick.geom.Rectangle;
|
import org.newdawn.slick.geom.Rectangle;
|
||||||
import yugecin.opsudance.core.DisplayContainer;
|
|
||||||
import yugecin.opsudance.core.components.ActionListener;
|
import yugecin.opsudance.core.components.ActionListener;
|
||||||
import yugecin.opsudance.core.components.Component;
|
import yugecin.opsudance.core.components.Component;
|
||||||
|
|
||||||
|
import static yugecin.opsudance.core.InstanceContainer.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A single text field supporting text entry
|
* A single text field supporting text entry
|
||||||
*
|
*
|
||||||
|
@ -48,8 +49,6 @@ public class TextField extends Component {
|
||||||
private static final int INITIAL_KEY_REPEAT_INTERVAL = 400;
|
private static final int INITIAL_KEY_REPEAT_INTERVAL = 400;
|
||||||
private static final int KEY_REPEAT_INTERVAL = 50;
|
private static final int KEY_REPEAT_INTERVAL = 50;
|
||||||
|
|
||||||
private final DisplayContainer displayContainer;
|
|
||||||
|
|
||||||
private String value = "";
|
private String value = "";
|
||||||
private Font font;
|
private Font font;
|
||||||
private int maxCharacter = 10000;
|
private int maxCharacter = 10000;
|
||||||
|
@ -65,8 +64,7 @@ public class TextField extends Component {
|
||||||
|
|
||||||
private ActionListener listener;
|
private ActionListener listener;
|
||||||
|
|
||||||
public TextField(DisplayContainer displayContainer, Font font, int x, int y, int width, int height) {
|
public TextField(Font font, int x, int y, int width, int height) {
|
||||||
this.displayContainer = displayContainer;
|
|
||||||
this.font = font;
|
this.font = font;
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
|
@ -97,7 +95,7 @@ public class TextField extends Component {
|
||||||
|
|
||||||
public void render(Graphics g) {
|
public void render(Graphics g) {
|
||||||
if (lastKey != -1) {
|
if (lastKey != -1) {
|
||||||
if (displayContainer.input.isKeyDown(lastKey)) {
|
if (input.isKeyDown(lastKey)) {
|
||||||
if (repeatTimer < System.currentTimeMillis()) {
|
if (repeatTimer < System.currentTimeMillis()) {
|
||||||
repeatTimer = System.currentTimeMillis() + KEY_REPEAT_INTERVAL;
|
repeatTimer = System.currentTimeMillis() + KEY_REPEAT_INTERVAL;
|
||||||
keyPressed(lastKey, lastChar);
|
keyPressed(lastKey, lastChar);
|
||||||
|
@ -173,7 +171,7 @@ public class TextField extends Component {
|
||||||
if (key != -1)
|
if (key != -1)
|
||||||
{
|
{
|
||||||
if ((key == Input.KEY_V) &&
|
if ((key == Input.KEY_V) &&
|
||||||
((displayContainer.input.isKeyDown(Input.KEY_LCONTROL)) || (displayContainer.input.isKeyDown(Input.KEY_RCONTROL)))) {
|
((input.isKeyDown(Input.KEY_LCONTROL)) || (input.isKeyDown(Input.KEY_RCONTROL)))) {
|
||||||
String text = Sys.getClipboard();
|
String text = Sys.getClipboard();
|
||||||
if (text != null) {
|
if (text != null) {
|
||||||
doPaste(text);
|
doPaste(text);
|
||||||
|
@ -208,7 +206,7 @@ public class TextField extends Component {
|
||||||
}
|
}
|
||||||
*/ } else if (key == Input.KEY_BACK) {
|
*/ } else if (key == Input.KEY_BACK) {
|
||||||
if ((cursorPos > 0) && (value.length() > 0)) {
|
if ((cursorPos > 0) && (value.length() > 0)) {
|
||||||
if (displayContainer.input.isKeyDown(Input.KEY_LCONTROL) || displayContainer.input.isKeyDown(Input.KEY_RCONTROL)) {
|
if (input.isKeyDown(Input.KEY_LCONTROL) || input.isKeyDown(Input.KEY_RCONTROL)) {
|
||||||
int sp = 0;
|
int sp = 0;
|
||||||
boolean startSpace = Character.isWhitespace(value.charAt(cursorPos - 1));
|
boolean startSpace = Character.isWhitespace(value.charAt(cursorPos - 1));
|
||||||
boolean charSeen = false;
|
boolean charSeen = false;
|
||||||
|
|
|
@ -59,7 +59,7 @@ import static yugecin.opsudance.options.Options.*;
|
||||||
/**
|
/**
|
||||||
* based on org.newdawn.slick.AppGameContainer
|
* based on org.newdawn.slick.AppGameContainer
|
||||||
*/
|
*/
|
||||||
public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListener, ResolutionChangedListener, SkinChangedListener {
|
public class DisplayContainer implements ErrorDumpable, ResolutionChangedListener, SkinChangedListener {
|
||||||
|
|
||||||
private static SGL GL = Renderer.get();
|
private static SGL GL = Renderer.get();
|
||||||
|
|
||||||
|
@ -72,7 +72,6 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen
|
||||||
public final DisplayMode nativeDisplayMode;
|
public final DisplayMode nativeDisplayMode;
|
||||||
|
|
||||||
private Graphics graphics;
|
private Graphics graphics;
|
||||||
public Input input;
|
|
||||||
|
|
||||||
public int width;
|
public int width;
|
||||||
public int height;
|
public int height;
|
||||||
|
@ -208,12 +207,12 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen
|
||||||
setUPS(OPTION_TARGET_UPS.val);
|
setUPS(OPTION_TARGET_UPS.val);
|
||||||
setFPS(targetFPS[targetFPSIndex]);
|
setFPS(targetFPS[targetFPSIndex]);
|
||||||
|
|
||||||
state = startingState;
|
|
||||||
state.enter();
|
|
||||||
|
|
||||||
fpsState = new FpsRenderState();
|
fpsState = new FpsRenderState();
|
||||||
bubNotifState = new BubNotifState();
|
bubNotifState = new BubNotifState();
|
||||||
barNotifState = new BarNotificationState();
|
barNotifState = new BarNotificationState();
|
||||||
|
|
||||||
|
state = startingState;
|
||||||
|
state.enter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -281,7 +280,6 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen
|
||||||
|
|
||||||
public void setup() throws Exception {
|
public void setup() throws Exception {
|
||||||
width = height = -1;
|
width = height = -1;
|
||||||
Input.disableControllers();
|
|
||||||
Display.setTitle("opsu!dance");
|
Display.setTitle("opsu!dance");
|
||||||
setupResolutionOptionlist(nativeDisplayMode.getWidth(), nativeDisplayMode.getHeight());
|
setupResolutionOptionlist(nativeDisplayMode.getWidth(), nativeDisplayMode.getHeight());
|
||||||
updateDisplayMode(OPTION_SCREEN_RESOLUTION.getValueString());
|
updateDisplayMode(OPTION_SCREEN_RESOLUTION.getValueString());
|
||||||
|
@ -434,10 +432,12 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen
|
||||||
graphics = new Graphics(width, height);
|
graphics = new Graphics(width, height);
|
||||||
graphics.setAntiAlias(false);
|
graphics.setAntiAlias(false);
|
||||||
|
|
||||||
input = new Input(height);
|
if (input == null) {
|
||||||
input.enableKeyRepeat();
|
input = new Input(height);
|
||||||
input.addKeyListener(this);
|
input.enableKeyRepeat();
|
||||||
input.addMouseListener(this);
|
input.addListener(new GlobalInputListener());
|
||||||
|
input.addMouseListener(bubNotifState);
|
||||||
|
}
|
||||||
|
|
||||||
sout("GL ready");
|
sout("GL ready");
|
||||||
|
|
||||||
|
@ -469,6 +469,7 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen
|
||||||
state.writeErrorDump(dump);
|
state.writeErrorDump(dump);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO change this
|
||||||
public boolean isInState(Class<? extends OpsuState> state) {
|
public boolean isInState(Class<? extends OpsuState> state) {
|
||||||
return state.isInstance(state);
|
return state.isInstance(state);
|
||||||
}
|
}
|
||||||
|
@ -494,65 +495,10 @@ public class DisplayContainer implements ErrorDumpable, KeyListener, MouseListen
|
||||||
|
|
||||||
public void switchStateInstantly(OpsuState state) {
|
public void switchStateInstantly(OpsuState state) {
|
||||||
this.state.leave();
|
this.state.leave();
|
||||||
|
input.removeListener(this.state);
|
||||||
this.state = state;
|
this.state = state;
|
||||||
this.state.enter();
|
this.state.enter();
|
||||||
|
input.addListener(this.state);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* input events below, see org.newdawn.slick.KeyListener & org.newdawn.slick.MouseListener
|
|
||||||
*/
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyPressed(int key, char c) {
|
|
||||||
state.keyPressed(key, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void keyReleased(int key, char c) {
|
|
||||||
state.keyReleased(key, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseWheelMoved(int change) {
|
|
||||||
state.mouseWheelMoved(change);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseClicked(int button, int x, int y, int clickCount) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mousePressed(int button, int x, int y) {
|
|
||||||
state.mousePressed(button, x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseReleased(int button, int x, int y) {
|
|
||||||
if (bubNotifState.mouseReleased(x, y)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
state.mouseReleased(button, x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseMoved(int oldx, int oldy, int newx, int newy) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseDragged(int oldx, int oldy, int newx, int newy) {
|
|
||||||
state.mouseDragged(oldx, oldy, newx, newy);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setInput(Input input) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAcceptingInput() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void inputEnded() { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void inputStarted() { }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
83
src/yugecin/opsudance/core/GlobalInputListener.java
Normal file
83
src/yugecin/opsudance/core/GlobalInputListener.java
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
/*
|
||||||
|
* opsu!dance - fork of opsu! with cursordance auto
|
||||||
|
* Copyright (C) 2017 yugecin
|
||||||
|
*
|
||||||
|
* opsu!dance is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* opsu!dance is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with opsu!dance. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package yugecin.opsudance.core;
|
||||||
|
|
||||||
|
import itdelatrisu.opsu.states.Game;
|
||||||
|
import itdelatrisu.opsu.ui.UI;
|
||||||
|
import org.newdawn.slick.Input;
|
||||||
|
import org.newdawn.slick.InputListener;
|
||||||
|
import yugecin.opsudance.events.BarNotifListener;
|
||||||
|
|
||||||
|
import static yugecin.opsudance.core.InstanceContainer.*;
|
||||||
|
import static yugecin.opsudance.options.Options.*;
|
||||||
|
|
||||||
|
public class GlobalInputListener implements InputListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean keyPressed(int key, char c) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean keyReleased(int key, char c) {
|
||||||
|
if (key == Input.KEY_F7) {
|
||||||
|
OPTION_TARGET_FPS.clickListItem((targetFPSIndex + 1) % targetFPS.length);
|
||||||
|
BarNotifListener.EVENT.make().onBarNotif(String.format("Frame limiter: %s",
|
||||||
|
OPTION_TARGET_FPS.getValueString()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (key == Input.KEY_F10) {
|
||||||
|
OPTION_DISABLE_MOUSE_BUTTONS.toggle();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (key == Input.KEY_F12) {
|
||||||
|
config.takeScreenShot();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (key == Input.KEY_S && input.isKeyDown(Input.KEY_LMENU) && input.isKeyDown(Input.KEY_LSHIFT) &&
|
||||||
|
input.isKeyDown(Input.KEY_LCONTROL) && !displayContainer.isInState(Game.class)) {
|
||||||
|
skinservice.reloadSkin();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseWheelMoved(int delta) {
|
||||||
|
if (input.isKeyDown(Input.KEY_LALT) || input.isKeyDown(Input.KEY_RALT)) {
|
||||||
|
UI.changeVolume((delta < 0) ? -1 : 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mousePressed(int button, int x, int y) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseReleased(int button, int x, int y) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseDragged(int oldx, int oldy, int newx, int newy) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -23,6 +23,7 @@ import itdelatrisu.opsu.beatmap.OszUnpacker;
|
||||||
import itdelatrisu.opsu.downloads.Updater;
|
import itdelatrisu.opsu.downloads.Updater;
|
||||||
import itdelatrisu.opsu.replay.ReplayImporter;
|
import itdelatrisu.opsu.replay.ReplayImporter;
|
||||||
import itdelatrisu.opsu.states.*;
|
import itdelatrisu.opsu.states.*;
|
||||||
|
import org.newdawn.slick.Input;
|
||||||
import org.newdawn.slick.util.FileSystemLocation;
|
import org.newdawn.slick.util.FileSystemLocation;
|
||||||
import org.newdawn.slick.util.ResourceLoader;
|
import org.newdawn.slick.util.ResourceLoader;
|
||||||
import yugecin.opsudance.options.Configuration;
|
import yugecin.opsudance.options.Configuration;
|
||||||
|
@ -51,6 +52,7 @@ public class InstanceContainer {
|
||||||
public static Updater updater;
|
public static Updater updater;
|
||||||
|
|
||||||
public static DisplayContainer displayContainer;
|
public static DisplayContainer displayContainer;
|
||||||
|
public static Input input;
|
||||||
|
|
||||||
public static GameObjectRenderer gameObjectRenderer;
|
public static GameObjectRenderer gameObjectRenderer;
|
||||||
|
|
||||||
|
|
|
@ -17,18 +17,11 @@
|
||||||
*/
|
*/
|
||||||
package yugecin.opsudance.core.state;
|
package yugecin.opsudance.core.state;
|
||||||
|
|
||||||
import itdelatrisu.opsu.states.Game;
|
|
||||||
import itdelatrisu.opsu.ui.UI;
|
|
||||||
import org.newdawn.slick.Graphics;
|
import org.newdawn.slick.Graphics;
|
||||||
import org.newdawn.slick.Input;
|
|
||||||
import yugecin.opsudance.events.BarNotifListener;
|
|
||||||
import yugecin.opsudance.events.ResolutionChangedListener;
|
import yugecin.opsudance.events.ResolutionChangedListener;
|
||||||
|
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
|
||||||
import static yugecin.opsudance.options.Options.*;
|
|
||||||
import static yugecin.opsudance.core.InstanceContainer.*;
|
|
||||||
|
|
||||||
public abstract class BaseOpsuState implements OpsuState, ResolutionChangedListener {
|
public abstract class BaseOpsuState implements OpsuState, ResolutionChangedListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -91,33 +84,11 @@ public abstract class BaseOpsuState implements OpsuState, ResolutionChangedListe
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyReleased(int key, char c) {
|
public boolean keyReleased(int key, char c) {
|
||||||
if (key == Input.KEY_F7) {
|
|
||||||
OPTION_TARGET_FPS.clickListItem((targetFPSIndex + 1) % targetFPS.length);
|
|
||||||
BarNotifListener.EVENT.make().onBarNotif(String.format("Frame limiter: %s",
|
|
||||||
OPTION_TARGET_FPS.getValueString()));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (key == Input.KEY_F10) {
|
|
||||||
OPTION_DISABLE_MOUSE_BUTTONS.toggle();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (key == Input.KEY_F12) {
|
|
||||||
config.takeScreenShot();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Input input = displayContainer.input;
|
|
||||||
if (key == Input.KEY_S && input.isKeyDown(Input.KEY_LMENU) && input.isKeyDown(Input.KEY_LSHIFT) &&input.isKeyDown(Input.KEY_LCONTROL) && !displayContainer.isInState(Game.class)) {
|
|
||||||
skinservice.reloadSkin();
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mouseWheelMoved(int delta) {
|
public boolean mouseWheelMoved(int delta) {
|
||||||
if (displayContainer.input.isKeyDown(Input.KEY_LALT) || displayContainer.input.isKeyDown(Input.KEY_RALT)) {
|
|
||||||
UI.changeVolume((delta < 0) ? -1 : 1);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,10 @@
|
||||||
package yugecin.opsudance.core.state;
|
package yugecin.opsudance.core.state;
|
||||||
|
|
||||||
import org.newdawn.slick.Graphics;
|
import org.newdawn.slick.Graphics;
|
||||||
|
import org.newdawn.slick.InputListener;
|
||||||
import yugecin.opsudance.core.errorhandling.ErrorDumpable;
|
import yugecin.opsudance.core.errorhandling.ErrorDumpable;
|
||||||
|
|
||||||
public interface OpsuState extends ErrorDumpable {
|
public interface OpsuState extends ErrorDumpable, InputListener {
|
||||||
|
|
||||||
void update();
|
void update();
|
||||||
void preRenderUpdate();
|
void preRenderUpdate();
|
||||||
|
@ -33,34 +34,4 @@ public interface OpsuState extends ErrorDumpable {
|
||||||
*/
|
*/
|
||||||
boolean onCloseRequest();
|
boolean onCloseRequest();
|
||||||
|
|
||||||
/**
|
|
||||||
* @return false to stop event bubbling
|
|
||||||
*/
|
|
||||||
boolean keyPressed(int key, char c);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return false to stop event bubbling
|
|
||||||
*/
|
|
||||||
boolean keyReleased(int key, char c);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return false to stop event bubbling
|
|
||||||
*/
|
|
||||||
boolean mouseWheelMoved(int delta);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return false to stop event bubbling
|
|
||||||
*/
|
|
||||||
boolean mousePressed(int button, int x, int y);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return false to stop event bubbling
|
|
||||||
*/
|
|
||||||
boolean mouseReleased(int button, int x, int y);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return false to stop event bubbling
|
|
||||||
*/
|
|
||||||
boolean mouseDragged(int oldx, int oldy, int newx, int newy);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import itdelatrisu.opsu.ui.Fonts;
|
||||||
import itdelatrisu.opsu.ui.animations.AnimationEquation;
|
import itdelatrisu.opsu.ui.animations.AnimationEquation;
|
||||||
import org.newdawn.slick.Color;
|
import org.newdawn.slick.Color;
|
||||||
import org.newdawn.slick.Graphics;
|
import org.newdawn.slick.Graphics;
|
||||||
|
import org.newdawn.slick.MouseListener;
|
||||||
import yugecin.opsudance.events.BubNotifListener;
|
import yugecin.opsudance.events.BubNotifListener;
|
||||||
import yugecin.opsudance.events.ResolutionChangedListener;
|
import yugecin.opsudance.events.ResolutionChangedListener;
|
||||||
import yugecin.opsudance.events.SkinChangedListener;
|
import yugecin.opsudance.events.SkinChangedListener;
|
||||||
|
@ -29,9 +30,9 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ListIterator;
|
import java.util.ListIterator;
|
||||||
|
|
||||||
import static yugecin.opsudance.core.InstanceContainer.displayContainer;
|
import static yugecin.opsudance.core.InstanceContainer.*;
|
||||||
|
|
||||||
public class BubNotifState implements BubNotifListener, ResolutionChangedListener, SkinChangedListener {
|
public class BubNotifState implements MouseListener, BubNotifListener, ResolutionChangedListener, SkinChangedListener {
|
||||||
|
|
||||||
public static final int IN_TIME = 633;
|
public static final int IN_TIME = 633;
|
||||||
public static final int DISPLAY_TIME = 7000 + IN_TIME;
|
public static final int DISPLAY_TIME = 7000 + IN_TIME;
|
||||||
|
@ -71,18 +72,6 @@ public class BubNotifState implements BubNotifListener, ResolutionChangedListene
|
||||||
} while (iter.hasNext());
|
} while (iter.hasNext());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean mouseReleased(int x, int y) {
|
|
||||||
if (x < Notification.finalX) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (Notification bubble : bubbles) {
|
|
||||||
if (bubble.mouseReleased(x, y)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void calculatePositions() {
|
private void calculatePositions() {
|
||||||
Notification.width = (int) (displayContainer.width * 0.1703125f);
|
Notification.width = (int) (displayContainer.width * 0.1703125f);
|
||||||
Notification.baseLine = (int) (displayContainer.height * 0.9645f);
|
Notification.baseLine = (int) (displayContainer.height * 0.9645f);
|
||||||
|
@ -146,6 +135,34 @@ public class BubNotifState implements BubNotifListener, ResolutionChangedListene
|
||||||
calculatePositions();
|
calculatePositions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseWheelMoved(int delta) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mousePressed(int button, int x, int y) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseReleased(int button, int x, int y) {
|
||||||
|
if (x < Notification.finalX) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (Notification bubble : bubbles) {
|
||||||
|
if (bubble.mouseReleased(x, y)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseDragged(int oldx, int oldy, int newx, int newy) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private static class Notification {
|
private static class Notification {
|
||||||
|
|
||||||
private final static int HOVER_ANIM_TIME = 150;
|
private final static int HOVER_ANIM_TIME = 150;
|
||||||
|
|
|
@ -146,7 +146,7 @@ public class OptionsOverlay extends OverlayOpsuState {
|
||||||
dropdownMenus = new HashMap<>();
|
dropdownMenus = new HashMap<>();
|
||||||
visibleDropdownMenus = new LinkedList<>();
|
visibleDropdownMenus = new LinkedList<>();
|
||||||
|
|
||||||
searchField = new TextField(displayContainer, null, 0, 0, 0, 0);
|
searchField = new TextField(null, 0, 0, 0, 0);
|
||||||
searchField.setMaxLength(20);
|
searchField.setMaxLength(20);
|
||||||
|
|
||||||
scrollHandler = new KineticScrolling();
|
scrollHandler = new KineticScrolling();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user