glow shader works better, changed way of loading assets, default song set up
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 9.0 KiB |
BIN
android/assets/music/Alan Walker - Spectre.mp3
Executable file
@ -11,7 +11,7 @@ max: 50
|
|||||||
lowMin: 0.0
|
lowMin: 0.0
|
||||||
lowMax: 0.0
|
lowMax: 0.0
|
||||||
highMin: 45.0
|
highMin: 45.0
|
||||||
highMax: 70.0
|
highMax: 60.0
|
||||||
relative: false
|
relative: false
|
||||||
scalingCount: 3
|
scalingCount: 3
|
||||||
scaling0: 1.0
|
scaling0: 1.0
|
||||||
@ -125,9 +125,9 @@ timeline0: 0.0
|
|||||||
active: false
|
active: false
|
||||||
- Tint -
|
- Tint -
|
||||||
colorsCount: 3
|
colorsCount: 3
|
||||||
colors0: 0.7411765
|
colors0: 1.0
|
||||||
colors1: 0.20392157
|
colors1: 0.6627451
|
||||||
colors2: 0.0
|
colors2: 0.23921569
|
||||||
timelineCount: 1
|
timelineCount: 1
|
||||||
timeline0: 0.0
|
timeline0: 0.0
|
||||||
- Transparency -
|
- Transparency -
|
||||||
@ -138,13 +138,13 @@ highMax: 1.0
|
|||||||
relative: false
|
relative: false
|
||||||
scalingCount: 5
|
scalingCount: 5
|
||||||
scaling0: 0.21052632
|
scaling0: 0.21052632
|
||||||
scaling1: 0.5263158
|
scaling1: 0.45614034
|
||||||
scaling2: 0.54385966
|
scaling2: 0.54385966
|
||||||
scaling3: 0.45614034
|
scaling3: 0.45614034
|
||||||
scaling4: 0.0
|
scaling4: 0.0
|
||||||
timelineCount: 5
|
timelineCount: 5
|
||||||
timeline0: 0.0
|
timeline0: 0.0
|
||||||
timeline1: 0.38356164
|
timeline1: 0.56164384
|
||||||
timeline2: 0.67808217
|
timeline2: 0.67808217
|
||||||
timeline3: 0.7671233
|
timeline3: 0.7671233
|
||||||
timeline4: 1.0
|
timeline4: 1.0
|
||||||
|
@ -14,20 +14,20 @@ uniform sampler2D u_texture;
|
|||||||
uniform float weight[5] = float[] (0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216);
|
uniform float weight[5] = float[] (0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216);
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec2 tex_offset = 1.0 /textureSize(u_texture, 0);
|
vec2 tex_offset = 1.0 / textureSize(u_texture, 0);
|
||||||
vec3 result = texture(u_texture, vTexCoord).rgb * weight[0];
|
vec3 result = texture(u_texture, vTexCoord).rgb * weight[0];
|
||||||
|
|
||||||
if (horizontal == 1) {
|
if (horizontal == 1) {
|
||||||
for (int i = 1; i < 5; ++i) {
|
for (int i = 1; i < 5; ++i) {
|
||||||
result += texture(u_texture, vTexCoord + vec2(tex_offset.x *i, 0.0)).rgb * weight[i];
|
result += texture(u_texture, vTexCoord + vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
|
||||||
result += texture(u_texture, vTexCoord - vec2(tex_offset.x *i, 0.0)).rgb * weight[i];
|
result += texture(u_texture, vTexCoord - vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int i = 1; i < 5; ++i) {
|
for (int i = 1; i < 5; ++i) {
|
||||||
result += texture(u_texture, vTexCoord + vec2(0.0, tex_offset.y * i)).rgb * weight[i];
|
result += texture(u_texture, vTexCoord + vec2(0.0, tex_offset.y * i)).rgb * weight[i];
|
||||||
result += texture(u_texture, vTexCoord - vec2(0.0, tex_offset.y * i)).rgb * weight[i];
|
result += texture(u_texture, vTexCoord - vec2(0.0, tex_offset.y * i)).rgb * weight[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_FragColor = vec4(result, 1.0);
|
gl_FragColor = vec4(result, 1.0);
|
||||||
}
|
}
|
BIN
android/assets/splashlogo.png
Executable file
After Width: | Height: | Size: 31 KiB |
@ -71,8 +71,9 @@ public class RhythmBullet extends Game {
|
|||||||
new Resolution(1920, 1080, "1920x1080"),
|
new Resolution(1920, 1080, "1920x1080"),
|
||||||
new Resolution(1920, 1200, "1920x1200"),
|
new Resolution(1920, 1200, "1920x1200"),
|
||||||
new Resolution(2560, 1440, "2560x1440"),
|
new Resolution(2560, 1440, "2560x1440"),
|
||||||
new Resolution(3840, 2160, "3840x2160"),
|
new Resolution(3840, 2160, "3840x2160")
|
||||||
};
|
};
|
||||||
|
|
||||||
InternalFileHandleResolver internalFileResolver = new InternalFileHandleResolver();
|
InternalFileHandleResolver internalFileResolver = new InternalFileHandleResolver();
|
||||||
rRHandler = new RoundingResolutionHandler(internalFileResolver, resolution);
|
rRHandler = new RoundingResolutionHandler(internalFileResolver, resolution);
|
||||||
GenericFileTypeHandler genericFileFinder = new GenericFileTypeHandler(internalFileResolver);
|
GenericFileTypeHandler genericFileFinder = new GenericFileTypeHandler(internalFileResolver);
|
||||||
@ -101,7 +102,9 @@ public class RhythmBullet extends Game {
|
|||||||
generateFonts(Gdx.graphics.getHeight());
|
generateFonts(Gdx.graphics.getHeight());
|
||||||
defineSkinStyles();
|
defineSkinStyles();
|
||||||
assetManager.get("standard_thrust.p", ParticleEffect.class).flipY();
|
assetManager.get("standard_thrust.p", ParticleEffect.class).flipY();
|
||||||
((TransitionAdapter) getScreen()).postTransition();
|
if (initComplete) {
|
||||||
|
((TransitionAdapter) getScreen()).postTransition();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.render();
|
super.render();
|
||||||
@ -123,7 +126,7 @@ public class RhythmBullet extends Game {
|
|||||||
@Override
|
@Override
|
||||||
public void resize(int width, int height) {
|
public void resize(int width, int height) {
|
||||||
if (initComplete) {
|
if (initComplete) {
|
||||||
Gdx.app.debug("Resize", "Pre-transition is happening.");
|
Gdx.app.debug("Resize", "Pre-transition is happening. Using resolution " + width + "x" + height);
|
||||||
rRHandler.setResolution(width, height);
|
rRHandler.setResolution(width, height);
|
||||||
((TransitionAdapter) getScreen()).preTransition();
|
((TransitionAdapter) getScreen()).preTransition();
|
||||||
assetManager.clear();
|
assetManager.clear();
|
||||||
@ -137,7 +140,11 @@ public class RhythmBullet extends Game {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int fontScale(float fontSize, int height) {
|
public int fontScale(float fontSize, int height) {
|
||||||
return MathUtils.round(Gdx.graphics.getDensity()*(fontSize*height));
|
int size = MathUtils.round(Gdx.graphics.getDensity()*(fontSize*height));
|
||||||
|
if (size >= 200) {
|
||||||
|
size = 200;
|
||||||
|
}
|
||||||
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AssetManager getAssetManager() {
|
public AssetManager getAssetManager() {
|
||||||
@ -184,9 +191,10 @@ public class RhythmBullet extends Game {
|
|||||||
assetManager.load("tpSelector.png", Texture.class);
|
assetManager.load("tpSelector.png", Texture.class);
|
||||||
assetManager.load("magic1.png", Texture.class);
|
assetManager.load("magic1.png", Texture.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateFonts(final int height) {
|
public void generateFonts(final int height) {
|
||||||
defaultSkin = new Skin();
|
defaultSkin = new Skin();
|
||||||
Gdx.app.debug("Prelaunch Debug Info", "Generating fonts...");
|
Gdx.app.debug("Prelaunch Debug Info", "Generating fonts with screen height of " + height);
|
||||||
skinAtlas = assetManager.get("uiskin.atlas", TextureAtlas.class);
|
skinAtlas = assetManager.get("uiskin.atlas", TextureAtlas.class);
|
||||||
getDefaultSkin().addRegions(skinAtlas);
|
getDefaultSkin().addRegions(skinAtlas);
|
||||||
|
|
||||||
|
@ -61,9 +61,8 @@ public class Mp3Manager implements MusicManager {
|
|||||||
|
|
||||||
} catch (IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) {
|
} catch (IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} finally {
|
|
||||||
lock.unlock();
|
|
||||||
}
|
}
|
||||||
|
lock.unlock();
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -36,7 +36,8 @@ public class SongList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public MusicManager getMusicInfoFromIndex(int index) {
|
public MusicManager getMusicInfoFromIndex(int index) {
|
||||||
if (index > songList.size) {
|
if (!searched) Gdx.app.debug("SongList", "Warning, this list hasn't even searched yet...");
|
||||||
|
if (songList.size == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return getAudioData(songList.get(index));
|
return getAudioData(songList.get(index));
|
||||||
@ -48,7 +49,7 @@ public class SongList {
|
|||||||
|
|
||||||
public FileHandle getSongFileHandleFromIndex(int index) {
|
public FileHandle getSongFileHandleFromIndex(int index) {
|
||||||
if (!searched) Gdx.app.debug("SongList", "Warning, this list hasn't even searched yet...");
|
if (!searched) Gdx.app.debug("SongList", "Warning, this list hasn't even searched yet...");
|
||||||
if (index > songList.size) {
|
if (songList.size == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return songList.get(index);
|
return songList.get(index);
|
||||||
|
@ -36,7 +36,7 @@ public class SongListController implements OnCompletionListener {
|
|||||||
|
|
||||||
public void play() {
|
public void play() {
|
||||||
mdp.play();
|
mdp.play();
|
||||||
mdp.setVolume(prefs.getFloat("music vol"));
|
mdp.setVolume(prefs.getFloat("music vol", 1f));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSongByIndex(int index) {
|
public void setSongByIndex(int index) {
|
||||||
@ -58,7 +58,11 @@ public class SongListController implements OnCompletionListener {
|
|||||||
public void onCompletion(Music music) {
|
public void onCompletion(Music music) {
|
||||||
if (autoPlay) {
|
if (autoPlay) {
|
||||||
if (shuffle) {
|
if (shuffle) {
|
||||||
currentPlaybackID = rand.nextInt(songList.getAmountOfSongs());
|
if (songList.getAmountOfSongs() != 0) {
|
||||||
|
currentPlaybackID = rand.nextInt(songList.getAmountOfSongs());
|
||||||
|
} else {
|
||||||
|
currentPlaybackID = 0;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
currentPlaybackID++;
|
currentPlaybackID++;
|
||||||
if (currentPlaybackID > songList.getAmountOfSongs()) {
|
if (currentPlaybackID > songList.getAmountOfSongs()) {
|
||||||
@ -71,7 +75,11 @@ public class SongListController implements OnCompletionListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void shuffle() {
|
public void shuffle() {
|
||||||
currentPlaybackID = rand.nextInt(songList.getAmountOfSongs());
|
if (songList.getAmountOfSongs() == 0) {
|
||||||
|
currentPlaybackID = 0;
|
||||||
|
} else {
|
||||||
|
currentPlaybackID = rand.nextInt(songList.getAmountOfSongs());
|
||||||
|
}
|
||||||
changeSong();
|
changeSong();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +107,10 @@ public class SongListController implements OnCompletionListener {
|
|||||||
|
|
||||||
this.mdp = songList.getMusicInfoFromIndex(currentPlaybackID);
|
this.mdp = songList.getMusicInfoFromIndex(currentPlaybackID);
|
||||||
if (mdp == null) {
|
if (mdp == null) {
|
||||||
mdp = songList.getAudioData(Gdx.files.internal("music/default.mp3"));
|
if (!Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3").exists()) {
|
||||||
|
Gdx.files.internal("music/Alan Walker - Spectre.mp3").copyTo(Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3"));
|
||||||
|
}
|
||||||
|
mdp = songList.getAudioData(Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3"));
|
||||||
}
|
}
|
||||||
mdp.setOnCompletionListener(this);
|
mdp.setOnCompletionListener(this);
|
||||||
sendEvent();
|
sendEvent();
|
||||||
|
@ -29,6 +29,7 @@ public class TitleBarVisualizer extends Group implements Disposable {
|
|||||||
ParticleEffectPool beatEffectPool;
|
ParticleEffectPool beatEffectPool;
|
||||||
Array<PooledEffect> effects = new Array<>();
|
Array<PooledEffect> effects = new Array<>();
|
||||||
|
|
||||||
|
private boolean lastEffect;
|
||||||
public TitleBarVisualizer(AssetManager assets) {
|
public TitleBarVisualizer(AssetManager assets) {
|
||||||
if (assets == null) throw new NullPointerException("TitleBarVisualizer requires assets manager... ITS NULL YOU FOOL");
|
if (assets == null) throw new NullPointerException("TitleBarVisualizer requires assets manager... ITS NULL YOU FOOL");
|
||||||
visual = new Visualizer();
|
visual = new Visualizer();
|
||||||
@ -67,7 +68,7 @@ public class TitleBarVisualizer extends Group implements Disposable {
|
|||||||
titleImage.setColor(Color.WHITE);
|
titleImage.setColor(Color.WHITE);
|
||||||
addActor(titleImage);
|
addActor(titleImage);
|
||||||
|
|
||||||
beatEffectPool = new ParticleEffectPool(assets.get("beateffect.p", ParticleEffect.class), 0, 5) {
|
beatEffectPool = new ParticleEffectPool(assets.get("beateffect.p", ParticleEffect.class), 0, 8) {
|
||||||
@Override
|
@Override
|
||||||
protected PooledEffect newObject() {
|
protected PooledEffect newObject() {
|
||||||
PooledEffect effect = super.newObject();
|
PooledEffect effect = super.newObject();
|
||||||
@ -75,14 +76,22 @@ public class TitleBarVisualizer extends Group implements Disposable {
|
|||||||
return effect;
|
return effect;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void act(float delta) {
|
public void act(float delta) {
|
||||||
if (visual.getVis().getCurrentAvg() > visual.getVis().getMaxAvgHeight()*0.55f) {
|
if (!lastEffect) {
|
||||||
PooledEffect effect = beatEffectPool.obtain();
|
if (visual.getVis().getCurrentAvg() > visual.getVis().getMaxAvgHeight()*0.55f) {
|
||||||
effect.setPosition(0, 0);
|
PooledEffect effect = beatEffectPool.obtain();
|
||||||
effects.add(effect);
|
effect.setPosition(0, 0);
|
||||||
|
effects.add(effect);
|
||||||
|
|
||||||
|
lastEffect = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
lastEffect = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
super.act(delta);
|
super.act(delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package zero1hd.rhythmbullet.graphics.ui.pages;
|
package zero1hd.rhythmbullet.graphics.ui.pages;
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.OrthographicCamera;
|
|
||||||
import com.badlogic.gdx.graphics.g2d.Batch;
|
import com.badlogic.gdx.graphics.g2d.Batch;
|
||||||
import com.badlogic.gdx.math.Vector3;
|
import com.badlogic.gdx.math.Vector3;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||||
@ -16,7 +15,7 @@ public class MainPage extends Page implements OnDifferentSongListener {
|
|||||||
|
|
||||||
private SongListController sc;
|
private SongListController sc;
|
||||||
private TitleBarVisualizer titleBar;
|
private TitleBarVisualizer titleBar;
|
||||||
public MainPage(RhythmBullet core, Vector3 targetPosition, SongListController sc, OrthographicCamera camera) {
|
public MainPage(RhythmBullet core, Vector3 targetPosition, SongListController sc) {
|
||||||
this.sc = sc;
|
this.sc = sc;
|
||||||
|
|
||||||
titleBar = new TitleBarVisualizer(core.getAssetManager());
|
titleBar = new TitleBarVisualizer(core.getAssetManager());
|
||||||
|
@ -35,7 +35,7 @@ public class VolumeWindow extends Window {
|
|||||||
save();
|
save();
|
||||||
musicVolPercentage.setText(MathUtils.round(musicVolSlider.getValue()) + "%");
|
musicVolPercentage.setText(MathUtils.round(musicVolSlider.getValue()) + "%");
|
||||||
if (music != null) {
|
if (music != null) {
|
||||||
music.setVolume(musicVolSlider.getValue()/100f);
|
music.setVolume(musicVolSlider.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -70,7 +70,7 @@ public class VolumeWindow extends Window {
|
|||||||
public void setMusic(MusicManager music) {
|
public void setMusic(MusicManager music) {
|
||||||
this.music = music;
|
this.music = music;
|
||||||
if (music != null) {
|
if (music != null) {
|
||||||
music.setVolume(prefs.getFloat("music vol")/100f);
|
music.setVolume(prefs.getFloat("music vol"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,10 +80,10 @@ public class GameScreen extends ScreenAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* needs to be called right after set as screen (should be called in show method).
|
* needs to be called right after set as screen (should be called in show method).
|
||||||
* This is due to the saving preference being done once the screen is hidden.
|
* This is due to the saving preference being done once the screen is hidden.
|
||||||
* @param prefs
|
* @param prefs
|
||||||
*/
|
*/
|
||||||
public void loadShaders() {
|
public void loadShaders() {
|
||||||
if (core.getPrefs().getBoolean("glow shader")) {
|
if (core.getPrefs().getBoolean("glow shader")) {
|
||||||
Gdx.app.debug("Shader", "using glow shader");
|
Gdx.app.debug("Shader", "using glow shader");
|
||||||
@ -141,6 +141,7 @@ public class GameScreen extends ScreenAdapter {
|
|||||||
|
|
||||||
ShaderProgram.pedantic = false;
|
ShaderProgram.pedantic = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(float delta) {
|
public void render(float delta) {
|
||||||
Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
|
Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
|
||||||
@ -185,9 +186,9 @@ public class GameScreen extends ScreenAdapter {
|
|||||||
|
|
||||||
//Horizontal gaussian blur
|
//Horizontal gaussian blur
|
||||||
hBlur.begin();
|
hBlur.begin();
|
||||||
fboRegion.setTexture(lightFilterBuffer.getColorBufferTexture());
|
fboRegion.setRegion(lightFilterBuffer.getColorBufferTexture());
|
||||||
gameArea.getBatch().setShader(gaussianBlurShader);
|
gameArea.getBatch().setShader(gaussianBlurShader);
|
||||||
gaussianBlurShader.setUniformf("horizontal", 1);
|
gaussianBlurShader.setUniformi("horizontal", 1);
|
||||||
gameArea.getBatch().draw(fboRegion, 0f, 0f, RhythmBullet.GAME_AREA_WIDTH, RhythmBullet.GAME_AREA_HEIGHT);
|
gameArea.getBatch().draw(fboRegion, 0f, 0f, RhythmBullet.GAME_AREA_WIDTH, RhythmBullet.GAME_AREA_HEIGHT);
|
||||||
gameArea.getBatch().flush();
|
gameArea.getBatch().flush();
|
||||||
hBlur.end(
|
hBlur.end(
|
||||||
@ -198,9 +199,9 @@ public class GameScreen extends ScreenAdapter {
|
|||||||
|
|
||||||
//Vertical gaussian blur
|
//Vertical gaussian blur
|
||||||
vBlur.begin();
|
vBlur.begin();
|
||||||
fboRegion.setTexture(hBlur.getColorBufferTexture());
|
fboRegion.setRegion(hBlur.getColorBufferTexture());
|
||||||
gameArea.getBatch().setShader(gaussianBlurShader);
|
gameArea.getBatch().setShader(gaussianBlurShader);
|
||||||
gaussianBlurShader.setUniformf("horizontal", 0);
|
gaussianBlurShader.setUniformi("horizontal", 0);
|
||||||
gameArea.getBatch().draw(fboRegion, 0f, 0f, RhythmBullet.GAME_AREA_WIDTH, RhythmBullet.GAME_AREA_HEIGHT);
|
gameArea.getBatch().draw(fboRegion, 0f, 0f, RhythmBullet.GAME_AREA_WIDTH, RhythmBullet.GAME_AREA_HEIGHT);
|
||||||
gameArea.getBatch().flush();
|
gameArea.getBatch().flush();
|
||||||
vBlur.end(
|
vBlur.end(
|
||||||
|
@ -6,7 +6,6 @@ import com.badlogic.gdx.ScreenAdapter;
|
|||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import com.badlogic.gdx.graphics.GL20;
|
import com.badlogic.gdx.graphics.GL20;
|
||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.Stage;
|
import com.badlogic.gdx.scenes.scene2d.Stage;
|
||||||
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
|
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||||
@ -16,24 +15,24 @@ import zero1hd.rhythmbullet.RhythmBullet;
|
|||||||
|
|
||||||
public class LoadingScreen extends ScreenAdapter implements ApplicationListener {
|
public class LoadingScreen extends ScreenAdapter implements ApplicationListener {
|
||||||
private Stage stage;
|
private Stage stage;
|
||||||
RhythmBullet core;
|
private RhythmBullet core;
|
||||||
Image zero1HD;
|
private Texture splash;
|
||||||
|
private Image zero1HD;
|
||||||
private boolean done;
|
private boolean done;
|
||||||
public LoadingScreen(RhythmBullet core) {
|
public LoadingScreen(RhythmBullet core) {
|
||||||
this.core = core;
|
this.core = core;
|
||||||
core.getAssetManager().load("splashlogo.png", Texture.class);
|
|
||||||
core.getAssetManager().finishLoading();
|
|
||||||
|
|
||||||
stage = new Stage(new ScreenViewport());
|
stage = new Stage(new ScreenViewport());
|
||||||
|
splash = new Texture(Gdx.files.internal("splashlogo.png"));
|
||||||
zero1HD = new Image(this.core.getAssetManager().get("splashlogo.png", Texture.class));
|
zero1HD = new Image(splash);
|
||||||
|
zero1HD.setScale((Gdx.graphics.getHeight()*0.8f)/zero1HD.getHeight());
|
||||||
|
|
||||||
zero1HD.setColor(0f,1f,1f,0f);
|
zero1HD.setColor(0f,1f,1f,0f);
|
||||||
stage.addActor(zero1HD);
|
stage.addActor(zero1HD);
|
||||||
zero1HD.setPosition(stage.getWidth()/2 - zero1HD.getWidth()/2, stage.getHeight()/2 - zero1HD.getHeight()/2);
|
zero1HD.setPosition((stage.getWidth() - zero1HD.getWidth()*zero1HD.getScaleX())/2f, (stage.getHeight() - zero1HD.getHeight()*zero1HD.getScaleY())/2f);
|
||||||
zero1HD.addAction(Actions.sequence(Actions.color(Color.WHITE, 1f), Actions.fadeOut(0.5f)));
|
zero1HD.addAction(Actions.sequence(Actions.color(Color.WHITE, 1f), Actions.fadeOut(0.5f)));
|
||||||
|
core.getrRHandler().setResolution(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
||||||
core.queueAssets();
|
core.queueAssets();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -51,6 +50,7 @@ public class LoadingScreen extends ScreenAdapter implements ApplicationListener
|
|||||||
if (!zero1HD.hasActions() & core.getAssetManager().update()) {
|
if (!zero1HD.hasActions() & core.getAssetManager().update()) {
|
||||||
moveOn();
|
moveOn();
|
||||||
}
|
}
|
||||||
|
|
||||||
stage.draw();
|
stage.draw();
|
||||||
super.render(delta);
|
super.render(delta);
|
||||||
}
|
}
|
||||||
@ -59,14 +59,11 @@ public class LoadingScreen extends ScreenAdapter implements ApplicationListener
|
|||||||
if (!done) {
|
if (!done) {
|
||||||
Gdx.app.debug("Loading Screen", "queue has all been loaded. Action is done playing.");
|
Gdx.app.debug("Loading Screen", "queue has all been loaded. Action is done playing.");
|
||||||
done = true;
|
done = true;
|
||||||
|
core.generateFonts(Gdx.graphics.getHeight());
|
||||||
core.generateFonts(core.getPrefs().getInteger("screen-height"));
|
|
||||||
core.defineSkinStyles();
|
core.defineSkinStyles();
|
||||||
|
|
||||||
core.setScreen(new MainMenu(core));
|
core.setScreen(new MainMenu(core));
|
||||||
zero1HD.remove();
|
zero1HD.remove();
|
||||||
core.getAssetManager().unload("splashlogo.png");
|
|
||||||
core.getAssetManager().get("standard_thrust.p", ParticleEffect.class).flipY();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,6 +76,7 @@ public class LoadingScreen extends ScreenAdapter implements ApplicationListener
|
|||||||
@Override
|
@Override
|
||||||
public void hide() {
|
public void hide() {
|
||||||
core.setInitComplete();
|
core.setInitComplete();
|
||||||
|
splash.dispose();
|
||||||
super.hide();
|
super.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,10 @@ import com.badlogic.gdx.Input.Keys;
|
|||||||
import com.badlogic.gdx.ScreenAdapter;
|
import com.badlogic.gdx.ScreenAdapter;
|
||||||
import com.badlogic.gdx.graphics.GL20;
|
import com.badlogic.gdx.graphics.GL20;
|
||||||
import com.badlogic.gdx.graphics.OrthographicCamera;
|
import com.badlogic.gdx.graphics.OrthographicCamera;
|
||||||
|
import com.badlogic.gdx.graphics.Pixmap.Format;
|
||||||
|
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
|
import com.badlogic.gdx.graphics.glutils.FrameBuffer;
|
||||||
|
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
|
||||||
import com.badlogic.gdx.math.Vector3;
|
import com.badlogic.gdx.math.Vector3;
|
||||||
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
||||||
import com.badlogic.gdx.scenes.scene2d.InputListener;
|
import com.badlogic.gdx.scenes.scene2d.InputListener;
|
||||||
@ -34,6 +38,18 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter {
|
|||||||
|
|
||||||
private SongListController sc;
|
private SongListController sc;
|
||||||
private float lerpAlpha;
|
private float lerpAlpha;
|
||||||
|
|
||||||
|
private ShaderProgram gaussianBlurShader;
|
||||||
|
private ShaderProgram brightFilterShader;
|
||||||
|
private ShaderProgram combineShader;
|
||||||
|
private FrameBuffer lightFilterBuffer;
|
||||||
|
private FrameBuffer normalBuffer;
|
||||||
|
private FrameBuffer hBlur, vBlur;
|
||||||
|
private TextureRegion fboRegion;
|
||||||
|
private int fboSize;
|
||||||
|
|
||||||
|
private int blurlvl = 2;
|
||||||
|
|
||||||
public MainMenu(final RhythmBullet core) {
|
public MainMenu(final RhythmBullet core) {
|
||||||
this.core = core;
|
this.core = core;
|
||||||
stage = new Stage(new ScreenViewport());
|
stage = new Stage(new ScreenViewport());
|
||||||
@ -46,9 +62,153 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter {
|
|||||||
sc = new SongListController(songList, core.getPrefs());
|
sc = new SongListController(songList, core.getPrefs());
|
||||||
sc.setAutoPlay(true);
|
sc.setAutoPlay(true);
|
||||||
sc.setShuffle(true);
|
sc.setShuffle(true);
|
||||||
|
|
||||||
|
loadShaders();
|
||||||
|
|
||||||
postTransition();
|
postTransition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void loadShaders() {
|
||||||
|
if (core.getPrefs().getBoolean("glow shader")) {
|
||||||
|
Gdx.app.debug("Shader", "using glow shader");
|
||||||
|
brightFilterShader = new ShaderProgram(Gdx.files.internal("shaders/basic.vsh"), Gdx.files.internal("shaders/bright_filter.fsh"));
|
||||||
|
if (!brightFilterShader.isCompiled()) {
|
||||||
|
System.err.println(brightFilterShader.getLog());
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
if (brightFilterShader.getLog().length() != 0) {
|
||||||
|
System.out.println(brightFilterShader.getLog());
|
||||||
|
}
|
||||||
|
|
||||||
|
gaussianBlurShader = new ShaderProgram(Gdx.files.internal("shaders/basic.vsh"), Gdx.files.internal("shaders/gaussian_blur.fsh"));
|
||||||
|
if (!gaussianBlurShader.isCompiled()) {
|
||||||
|
System.err.println(gaussianBlurShader.getLog());
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
if (gaussianBlurShader.getLog().length() != 0) {
|
||||||
|
System.out.println(gaussianBlurShader.getLog());
|
||||||
|
}
|
||||||
|
|
||||||
|
combineShader = new ShaderProgram(Gdx.files.internal("shaders/basic.vsh"), Gdx.files.internal("shaders/combine.fsh"));
|
||||||
|
if (!combineShader.isCompiled()) {
|
||||||
|
System.err.println(combineShader.getLog());
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
if (combineShader.getLog().length() != 0) {
|
||||||
|
System.out.println(combineShader.getLog());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (Gdx.graphics.getWidth() < 1024) {
|
||||||
|
fboSize = 2048;
|
||||||
|
} else if (Gdx.graphics.getWidth() < 2048) {
|
||||||
|
fboSize = 4096;
|
||||||
|
} else {
|
||||||
|
fboSize = 4096;
|
||||||
|
}
|
||||||
|
|
||||||
|
lightFilterBuffer = new FrameBuffer(Format.RGBA8888, fboSize/2, fboSize/2, false);
|
||||||
|
normalBuffer = new FrameBuffer(Format.RGBA8888, fboSize, fboSize, false);
|
||||||
|
hBlur = new FrameBuffer(Format.RGBA8888, fboSize/2, fboSize/2, false);
|
||||||
|
vBlur = new FrameBuffer(Format.RGBA8888, fboSize/2, fboSize/2, false);
|
||||||
|
|
||||||
|
fboRegion = new TextureRegion();
|
||||||
|
|
||||||
|
combineShader.begin();
|
||||||
|
combineShader.setUniformi("u_texture1", 1);
|
||||||
|
combineShader.end();
|
||||||
|
|
||||||
|
vBlur.getColorBufferTexture().bind(1);
|
||||||
|
|
||||||
|
Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ShaderProgram.pedantic = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(float delta) {
|
||||||
|
Gdx.gl.glClearColor(0.212f, 0.094f, 0f, 1f);
|
||||||
|
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
||||||
|
stage.act(delta);
|
||||||
|
blurlvl = 5;
|
||||||
|
|
||||||
|
if (gaussianBlurShader != null) {
|
||||||
|
|
||||||
|
//Begin drawing a normal version of screen
|
||||||
|
normalBuffer.begin();
|
||||||
|
Gdx.gl.glClearColor(0.212f, 0.094f, 0f, 1f);
|
||||||
|
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
||||||
|
stage.draw();
|
||||||
|
normalBuffer.end();
|
||||||
|
//END
|
||||||
|
|
||||||
|
//Begin light filtering
|
||||||
|
lightFilterBuffer.begin();
|
||||||
|
Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
|
||||||
|
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
||||||
|
stage.getBatch().setShader(brightFilterShader);
|
||||||
|
stage.getBatch().begin(); //BATCH STARTS HERE
|
||||||
|
stage.getRoot().draw(stage.getBatch(), 1f);
|
||||||
|
stage.getBatch().flush();
|
||||||
|
lightFilterBuffer.end();
|
||||||
|
|
||||||
|
//Horizontal gaussian blur
|
||||||
|
hBlur.begin();
|
||||||
|
fboRegion.setRegion(lightFilterBuffer.getColorBufferTexture());
|
||||||
|
stage.getBatch().setShader(gaussianBlurShader);
|
||||||
|
gaussianBlurShader.setUniformi("horizontal", 1);
|
||||||
|
stage.getBatch().draw(fboRegion, 0f, 0f, stage.getWidth(), stage.getHeight());
|
||||||
|
stage.getBatch().flush();
|
||||||
|
hBlur.end();
|
||||||
|
|
||||||
|
//Vertical gaussian blur
|
||||||
|
vBlur.begin();
|
||||||
|
fboRegion.setRegion(hBlur.getColorBufferTexture());
|
||||||
|
stage.getBatch().setShader(gaussianBlurShader);
|
||||||
|
gaussianBlurShader.setUniformi("horizontal", 0);
|
||||||
|
stage.getBatch().draw(fboRegion, 0f, 0f, stage.getWidth(), stage.getHeight());
|
||||||
|
stage.getBatch().flush();
|
||||||
|
vBlur.end();
|
||||||
|
|
||||||
|
for (int i = 0; i < blurlvl; i++) {
|
||||||
|
//Horizontal gaussian blur
|
||||||
|
hBlur.begin();
|
||||||
|
fboRegion.setRegion(vBlur.getColorBufferTexture());
|
||||||
|
stage.getBatch().setShader(gaussianBlurShader);
|
||||||
|
gaussianBlurShader.setUniformi("horizontal", 1);
|
||||||
|
stage.getBatch().draw(fboRegion, 0f, 0f, stage.getWidth(), stage.getHeight());
|
||||||
|
stage.getBatch().flush();
|
||||||
|
hBlur.end();
|
||||||
|
|
||||||
|
//Vertical gaussian blur
|
||||||
|
vBlur.begin();
|
||||||
|
fboRegion.setRegion(hBlur.getColorBufferTexture());
|
||||||
|
stage.getBatch().setShader(gaussianBlurShader);
|
||||||
|
gaussianBlurShader.setUniformi("horizontal", 0);
|
||||||
|
stage.getBatch().draw(fboRegion, 0f, 0f, stage.getWidth(), stage.getHeight());
|
||||||
|
stage.getBatch().flush();
|
||||||
|
vBlur.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Draw everything to screen
|
||||||
|
stage.getBatch().setShader(combineShader);
|
||||||
|
fboRegion.setRegion(normalBuffer.getColorBufferTexture());
|
||||||
|
fboRegion.flip(false, true);
|
||||||
|
stage.getBatch().draw(fboRegion, 0f, 0f, stage.getWidth(), stage.getHeight());
|
||||||
|
stage.getBatch().setShader(null);
|
||||||
|
stage.getBatch().end(); //BATCH ENDS HERE
|
||||||
|
} else {
|
||||||
|
stage.draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stage.getCamera().position.x != targetPosition.x || stage.getCamera().position.y != targetPosition.y) {
|
||||||
|
stage.getCamera().position.lerp(targetPosition, lerpAlpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.render(delta);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void preTransition() {
|
public void preTransition() {
|
||||||
stage.clear();
|
stage.clear();
|
||||||
@ -60,7 +220,7 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postTransition() {
|
public void postTransition() {
|
||||||
mainPage = new MainPage(core, targetPosition, sc, (OrthographicCamera) stage.getCamera());
|
mainPage = new MainPage(core, targetPosition, sc);
|
||||||
mainPage.setPosition(0, 0);
|
mainPage.setPosition(0, 0);
|
||||||
stage.addActor(mainPage);
|
stage.addActor(mainPage);
|
||||||
|
|
||||||
@ -129,19 +289,6 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(float delta) {
|
|
||||||
Gdx.gl.glClearColor(0.212f, 0.094f, 0f, 1f);
|
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
|
||||||
stage.act();
|
|
||||||
stage.draw();
|
|
||||||
if (stage.getCamera().position.x != targetPosition.x || stage.getCamera().position.y != targetPosition.y) {
|
|
||||||
stage.getCamera().position.lerp(targetPosition, lerpAlpha);
|
|
||||||
}
|
|
||||||
|
|
||||||
super.render(delta);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resize(int width, int height) {
|
public void resize(int width, int height) {
|
||||||
stage.getViewport().update(width, height, false);
|
stage.getViewport().update(width, height, false);
|
||||||
|