Merge pull request #148 from mad-s/master
Make music pitch and speed go down on fail (like in osu!)
This commit is contained in:
commit
af0d3b8c56
|
@ -237,6 +237,15 @@ public class MusicController {
|
||||||
player.fade(duration, 0f, true);
|
player.fade(duration, 0f, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fades out the pitch (and speed) of the track.
|
||||||
|
* @param duration the pitch fade time (in ms)
|
||||||
|
*/
|
||||||
|
public static void pitchFadeOut(int duration) {
|
||||||
|
if (isPlaying())
|
||||||
|
player.pitchFade(duration, 0f);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the position in the current track, in milliseconds.
|
* Returns the position in the current track, in milliseconds.
|
||||||
* If no track is loaded, 0 will be returned.
|
* If no track is loaded, 0 will be returned.
|
||||||
|
@ -316,7 +325,7 @@ public class MusicController {
|
||||||
* @param pitch the new pitch
|
* @param pitch the new pitch
|
||||||
*/
|
*/
|
||||||
public static void setPitch(float pitch) {
|
public static void setPitch(float pitch) {
|
||||||
SoundStore.get().setMusicPitch(pitch);
|
player.setPitch(pitch);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1262,9 +1262,6 @@ public class Game extends BasicGameState {
|
||||||
// replays
|
// replays
|
||||||
if (isReplay)
|
if (isReplay)
|
||||||
GameMod.loadModState(previousMods);
|
GameMod.loadModState(previousMods);
|
||||||
|
|
||||||
// reset playback speed
|
|
||||||
MusicController.setPitch(1f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -48,7 +48,7 @@ import org.newdawn.slick.state.transition.FadeOutTransition;
|
||||||
*/
|
*/
|
||||||
public class GamePauseMenu extends BasicGameState {
|
public class GamePauseMenu extends BasicGameState {
|
||||||
/** Music fade-out time, in milliseconds. */
|
/** Music fade-out time, in milliseconds. */
|
||||||
private static final int FADEOUT_TIME = 1000;
|
private static final int FADEOUT_TIME = 2000;
|
||||||
|
|
||||||
/** Track position when the pause menu was loaded (for FADEOUT_TIME). */
|
/** Track position when the pause menu was loaded (for FADEOUT_TIME). */
|
||||||
private long pauseStartTime;
|
private long pauseStartTime;
|
||||||
|
@ -207,6 +207,7 @@ public class GamePauseMenu extends BasicGameState {
|
||||||
pauseStartTime = System.currentTimeMillis();
|
pauseStartTime = System.currentTimeMillis();
|
||||||
if (gameState.getRestart() == Game.Restart.LOSE) {
|
if (gameState.getRestart() == Game.Restart.LOSE) {
|
||||||
MusicController.fadeOut(FADEOUT_TIME);
|
MusicController.fadeOut(FADEOUT_TIME);
|
||||||
|
MusicController.pitchFadeOut(FADEOUT_TIME);
|
||||||
SoundController.playSound(SoundEffect.FAIL);
|
SoundController.playSound(SoundEffect.FAIL);
|
||||||
} else
|
} else
|
||||||
MusicController.pause();
|
MusicController.pause();
|
||||||
|
@ -215,6 +216,13 @@ public class GamePauseMenu extends BasicGameState {
|
||||||
backButton.resetHover();
|
backButton.resetHover();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void leave(GameContainer container, StateBasedGame game)
|
||||||
|
throws SlickException {
|
||||||
|
// reset pitch fade out
|
||||||
|
MusicController.pitchFadeOut(0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads all game pause/fail menu images.
|
* Loads all game pause/fail menu images.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1118,6 +1118,7 @@ public class SongMenu extends BasicGameState {
|
||||||
else if (resetTrack) {
|
else if (resetTrack) {
|
||||||
MusicController.pause();
|
MusicController.pause();
|
||||||
MusicController.playAt(MusicController.getBeatmap().previewTime, true);
|
MusicController.playAt(MusicController.getBeatmap().previewTime, true);
|
||||||
|
MusicController.setPitch(1.0f);
|
||||||
resetTrack = false;
|
resetTrack = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,18 @@ public class Music {
|
||||||
/** The position that was requested */
|
/** The position that was requested */
|
||||||
private float requiredPosition = -1;
|
private float requiredPosition = -1;
|
||||||
|
|
||||||
|
/** The pitch of this music */
|
||||||
|
private float pitch = 1.0f;
|
||||||
|
/** Start pitch for fading pitch */
|
||||||
|
private float pitchStart;
|
||||||
|
/** End pitch for fading pitch */
|
||||||
|
private float pitchEnd;
|
||||||
|
/** Countdown for fading pitch */
|
||||||
|
private int pitchTime;
|
||||||
|
/** Duration for fading pitch */
|
||||||
|
private int pitchDuration;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create and load a piece of music (either OGG or MOD/XM)
|
* Create and load a piece of music (either OGG or MOD/XM)
|
||||||
*
|
*
|
||||||
|
@ -313,6 +325,7 @@ public class Music {
|
||||||
currentMusic = this;
|
currentMusic = this;
|
||||||
sound.playAsMusic(pitch, volume, loop);
|
sound.playAsMusic(pitch, volume, loop);
|
||||||
setVolume(volume);
|
setVolume(volume);
|
||||||
|
setPitch(pitch);
|
||||||
if (requiredPosition != -1) {
|
if (requiredPosition != -1) {
|
||||||
setPosition(requiredPosition);
|
setPosition(requiredPosition);
|
||||||
}
|
}
|
||||||
|
@ -373,6 +386,17 @@ public class Music {
|
||||||
SoundStore.get().setCurrentMusicVolume(volume);
|
SoundStore.get().setCurrentMusicVolume(volume);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Set the pitch of the music as a factor of it's normal pitch
|
||||||
|
*
|
||||||
|
* @param pitch The pitch to play music at.
|
||||||
|
*/
|
||||||
|
public void setPitch(float pitch) {
|
||||||
|
this.pitch = pitch;
|
||||||
|
if (currentMusic == this) {
|
||||||
|
SoundStore.get().setMusicPitch(pitch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the individual volume of the music
|
* Get the individual volume of the music
|
||||||
|
@ -397,6 +421,19 @@ public class Music {
|
||||||
fadeTime = duration;
|
fadeTime = duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fade the pitch and speed of this music to the pitch specified
|
||||||
|
*
|
||||||
|
* @param duration Pitch fade time in milliseconds
|
||||||
|
* @param endPitch The target pitch (and speed)
|
||||||
|
*/
|
||||||
|
public void pitchFade (int duration, float endPitch) {
|
||||||
|
pitchStart = pitch;
|
||||||
|
pitchEnd = endPitch;
|
||||||
|
pitchDuration = duration;
|
||||||
|
pitchTime = duration;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the current music applying any effects that need to updated per
|
* Update the current music applying any effects that need to updated per
|
||||||
* tick.
|
* tick.
|
||||||
|
@ -408,6 +445,14 @@ public class Music {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pitchTime > 0) {
|
||||||
|
pitchTime -= delta;
|
||||||
|
if (pitchTime < 0) {
|
||||||
|
pitchTime = 0;
|
||||||
|
}
|
||||||
|
float offset = (pitchEnd - pitchStart) * (1 - (pitchTime / (float)pitchDuration));
|
||||||
|
setPitch(pitchStart + offset);
|
||||||
|
}
|
||||||
if (fadeTime > 0) {
|
if (fadeTime > 0) {
|
||||||
fadeTime -= delta;
|
fadeTime -= delta;
|
||||||
if (fadeTime < 0) {
|
if (fadeTime < 0) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user