Implemented various keyboard shortcuts.
- Main menu: -- 'd': opens downloads menu -- 'r': plays random track - Song menu: -- SHIFT+DEL: opens beatmap deletion menu Other changes: - In the main menu, tracks now play from the beginning instead of the preview time. - Fixed "next page" icon sometimes showing in the downloads menu when a next page didn't exist. Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This commit is contained in:
@@ -507,14 +507,14 @@ public class SongMenu extends BasicGameState {
|
||||
if (search.getText().isEmpty()) { // cleared search
|
||||
// use previous start/focus if possible
|
||||
if (oldFocusNode != null)
|
||||
setFocus(oldFocusNode.getNode(), oldFocusNode.getIndex(), true);
|
||||
setFocus(oldFocusNode.getNode(), oldFocusNode.getIndex(), true, true);
|
||||
else
|
||||
setFocus(OsuGroupList.get().getRandomNode(), -1, true);
|
||||
setFocus(OsuGroupList.get().getRandomNode(), -1, true, true);
|
||||
} else {
|
||||
int size = OsuGroupList.get().size();
|
||||
searchResultString = String.format("%d match%s found!",
|
||||
size, (size == 1) ? "" : "es");
|
||||
setFocus(OsuGroupList.get().getRandomNode(), -1, true);
|
||||
setFocus(OsuGroupList.get().getRandomNode(), -1, true, true);
|
||||
}
|
||||
oldFocusNode = null;
|
||||
} else if (!search.getText().isEmpty())
|
||||
@@ -618,7 +618,7 @@ public class SongMenu extends BasicGameState {
|
||||
int oldFocusFileIndex = focusNode.osuFileIndex;
|
||||
focusNode = null;
|
||||
OsuGroupList.get().init();
|
||||
setFocus(oldFocusBase, oldFocusFileIndex, true);
|
||||
setFocus(oldFocusBase, oldFocusFileIndex, true, true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -647,14 +647,14 @@ public class SongMenu extends BasicGameState {
|
||||
} else {
|
||||
// focus the node
|
||||
SoundController.playSound(SoundEffect.MENUCLICK);
|
||||
setFocus(node, 0, false);
|
||||
setFocus(node, 0, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
// clicked node is a new group
|
||||
else {
|
||||
SoundController.playSound(SoundEffect.MENUCLICK);
|
||||
setFocus(node, -1, false);
|
||||
setFocus(node, -1, false, true);
|
||||
}
|
||||
|
||||
// restore hover data
|
||||
@@ -731,11 +731,11 @@ public class SongMenu extends BasicGameState {
|
||||
SongNode prev;
|
||||
if (randomStack.isEmpty() || (prev = randomStack.pop()) == null)
|
||||
break;
|
||||
setFocus(prev.getNode(), prev.getIndex(), true);
|
||||
setFocus(prev.getNode(), prev.getIndex(), true, true);
|
||||
} else {
|
||||
// random track, add previous to stack
|
||||
randomStack.push(new SongNode(OsuGroupList.get().getBaseNode(focusNode.index), focusNode.osuFileIndex));
|
||||
setFocus(OsuGroupList.get().getRandomNode(), -1, true);
|
||||
setFocus(OsuGroupList.get().getRandomNode(), -1, true, true);
|
||||
}
|
||||
break;
|
||||
case Input.KEY_F3:
|
||||
@@ -750,6 +750,17 @@ public class SongMenu extends BasicGameState {
|
||||
((ButtonMenu) game.getState(Opsu.STATE_BUTTONMENU)).setMenuState(MenuState.RELOAD);
|
||||
game.enterState(Opsu.STATE_BUTTONMENU);
|
||||
break;
|
||||
case Input.KEY_DELETE:
|
||||
if (focusNode == null)
|
||||
break;
|
||||
if (input.isKeyDown(Input.KEY_RSHIFT) || input.isKeyDown(Input.KEY_LSHIFT)) {
|
||||
SoundController.playSound(SoundEffect.MENUHIT);
|
||||
MenuState ms = (focusNode.osuFileIndex == -1 || focusNode.osuFiles.size() == 1) ?
|
||||
MenuState.BEATMAP_DELETE_CONFIRM : MenuState.BEATMAP_DELETE_SELECT;
|
||||
((ButtonMenu) game.getState(Opsu.STATE_BUTTONMENU)).setMenuState(ms, focusNode);
|
||||
game.enterState(Opsu.STATE_BUTTONMENU);
|
||||
}
|
||||
break;
|
||||
case Input.KEY_F7:
|
||||
Options.setNextFPS(container);
|
||||
break;
|
||||
@@ -784,7 +795,7 @@ public class SongMenu extends BasicGameState {
|
||||
OsuGroupNode oldStartNode = startNode;
|
||||
float oldHoverOffset = hoverOffset;
|
||||
int oldHoverIndex = hoverIndex;
|
||||
setFocus(next, 0, false);
|
||||
setFocus(next, 0, false, true);
|
||||
if (startNode == oldStartNode) {
|
||||
hoverOffset = oldHoverOffset;
|
||||
hoverIndex = oldHoverIndex;
|
||||
@@ -800,7 +811,7 @@ public class SongMenu extends BasicGameState {
|
||||
OsuGroupNode oldStartNode = startNode;
|
||||
float oldHoverOffset = hoverOffset;
|
||||
int oldHoverIndex = hoverIndex;
|
||||
setFocus(prev, (prev.index == focusNode.index) ? 0 : prev.osuFiles.size() - 1, false);
|
||||
setFocus(prev, (prev.index == focusNode.index) ? 0 : prev.osuFiles.size() - 1, false, true);
|
||||
if (startNode == oldStartNode) {
|
||||
hoverOffset = oldHoverOffset;
|
||||
hoverIndex = oldHoverIndex;
|
||||
@@ -902,7 +913,7 @@ public class SongMenu extends BasicGameState {
|
||||
|
||||
// set focus node if not set (e.g. theme song playing)
|
||||
if (focusNode == null && OsuGroupList.get().size() > 0)
|
||||
setFocus(OsuGroupList.get().getRandomNode(), -1, true);
|
||||
setFocus(OsuGroupList.get().getRandomNode(), -1, true, true);
|
||||
|
||||
// reset music track
|
||||
else if (resetTrack) {
|
||||
@@ -972,9 +983,9 @@ public class SongMenu extends BasicGameState {
|
||||
OsuGroupList.get().deleteSongGroup(stateActionNode);
|
||||
if (oldIndex == focusNodeIndex) {
|
||||
if (prev != null)
|
||||
setFocus(prev, -1, true);
|
||||
setFocus(prev, -1, true, true);
|
||||
else if (next != null)
|
||||
setFocus(next, -1, true);
|
||||
setFocus(next, -1, true, true);
|
||||
else {
|
||||
startNode = focusNode = null;
|
||||
oldFocusNode = null;
|
||||
@@ -1003,14 +1014,14 @@ public class SongMenu extends BasicGameState {
|
||||
if (stateActionNode.prev != null &&
|
||||
!(stateActionNode.next != null && stateActionNode.next.index == index)) {
|
||||
if (stateActionNode.prev.index == index)
|
||||
setFocus(stateActionNode.prev, 0, true);
|
||||
setFocus(stateActionNode.prev, 0, true, true);
|
||||
else
|
||||
setFocus(stateActionNode.prev, -1, true);
|
||||
setFocus(stateActionNode.prev, -1, true, true);
|
||||
} else if (stateActionNode.next != null) {
|
||||
if (stateActionNode.next.index == index)
|
||||
setFocus(stateActionNode.next, 0, true);
|
||||
setFocus(stateActionNode.next, 0, true, true);
|
||||
else
|
||||
setFocus(stateActionNode.next, -1, true);
|
||||
setFocus(stateActionNode.next, -1, true, true);
|
||||
}
|
||||
} else if (stateActionNode == startNode) {
|
||||
if (startNode.prev != null)
|
||||
@@ -1050,7 +1061,7 @@ public class SongMenu extends BasicGameState {
|
||||
// initialize song list
|
||||
if (OsuGroupList.get().size() > 0) {
|
||||
OsuGroupList.get().init();
|
||||
setFocus(OsuGroupList.get().getRandomNode(), -1, true);
|
||||
setFocus(OsuGroupList.get().getRandomNode(), -1, true, true);
|
||||
} else
|
||||
MusicController.playThemeSong();
|
||||
|
||||
@@ -1120,9 +1131,10 @@ public class SongMenu extends BasicGameState {
|
||||
* @param node the base node; it will be expanded if it isn't already
|
||||
* @param osuFileIndex the OsuFile element to focus; if out of bounds, it will be randomly chosen
|
||||
* @param changeStartNode if true, startNode will be set to the first node in the group
|
||||
* @param preview whether to start at the preview time (true) or beginning (false)
|
||||
* @return the old focus node
|
||||
*/
|
||||
public OsuGroupNode setFocus(OsuGroupNode node, int osuFileIndex, boolean changeStartNode) {
|
||||
public OsuGroupNode setFocus(OsuGroupNode node, int osuFileIndex, boolean changeStartNode, boolean preview) {
|
||||
if (node == null)
|
||||
return null;
|
||||
|
||||
@@ -1151,7 +1163,7 @@ public class SongMenu extends BasicGameState {
|
||||
startNode = node;
|
||||
focusNode = OsuGroupList.get().getNode(node, osuFileIndex);
|
||||
OsuFile osu = focusNode.osuFiles.get(focusNode.osuFileIndex);
|
||||
MusicController.play(osu, true);
|
||||
MusicController.play(osu, true, preview);
|
||||
Utils.loadGlyphs(osu);
|
||||
|
||||
// load scores
|
||||
|
||||
Reference in New Issue
Block a user