gdxapp4d/demo4d-gdxapp/src/main/love/distributedrebirth/demo4d/music/MusicPlayerRenderer.java

122 lines
3.4 KiB
Java
Raw Normal View History

2022-01-28 11:59:57 +01:00
package love.distributedrebirth.demo4d.music;
2022-01-31 23:05:27 +01:00
import java.util.function.Consumer;
2022-01-28 11:59:57 +01:00
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import imgui.ImGui;
import imgui.flag.ImGuiCond;
import imgui.flag.ImGuiSelectableFlags;
import imgui.flag.ImGuiTableColumnFlags;
import imgui.flag.ImGuiTableFlags;
import imgui.type.ImBoolean;
import love.distributedrebirth.demo4d.ImGuiRendererMain;
2022-02-04 14:39:25 +01:00
import love.distributedrebirth.bassboonyd.BãßBȍőnAuthorInfoʸᴰ;
2022-01-28 11:59:57 +01:00
import love.distributedrebirth.demo4d.Demo4DMain;
import net.spookygames.gdx.nativefilechooser.NativeFileChooserCallback;
import net.spookygames.gdx.nativefilechooser.NativeFileChooserConfiguration;
/**
2022-02-04 14:39:25 +01:00
* The music player ui.
*/
2022-02-04 14:39:25 +01:00
@BãßBȍőnAuthorInfoʸᴰ(name = "willemtsade", copyright = "©Δ∞ 仙上主天")
2022-01-28 11:59:57 +01:00
public class MusicPlayerRenderer extends ImGuiRendererMain {
2022-01-31 23:05:27 +01:00
private final NativeFileChooserConfiguration fileChooserConfig;
2022-01-28 11:59:57 +01:00
public MusicPlayerRenderer(Demo4DMain main) {
super(main);
2022-01-31 23:05:27 +01:00
fileChooserConfig = new NativeFileChooserConfiguration();
fileChooserConfig.directory = Gdx.files.absolute(System.getProperty("user.home"));
fileChooserConfig.mimeFilter = "audio/*";
fileChooserConfig.title = "Choose audio file";
2022-01-28 11:59:57 +01:00
}
@Override
public void render(ImBoolean widgetOpen) {
ImGui.setNextWindowPos(100, 100, ImGuiCond.FirstUseEver);
ImGui.setNextWindowSize(320, 240, ImGuiCond.FirstUseEver);
ImGui.begin("Music Player", widgetOpen);
ImGui.text("Current Song:");
2022-01-31 23:05:27 +01:00
MusicSong currentSong = main.music.getCurrentSong();
if (currentSong != null) {
ImGui.sameLine();
ImGui.text(currentSong.getName());
}
2022-01-28 11:59:57 +01:00
ImGui.separator();
2022-02-01 00:26:21 +01:00
if (currentSong != null) {
if (ImGui.button("Play")) {
main.music.play(currentSong);
}
} else {
ImGui.text("Play");
2022-01-28 11:59:57 +01:00
}
ImGui.sameLine();
if (ImGui.button("<")) {
main.music.prev();
}
ImGui.sameLine();
if (ImGui.button(">")) {
main.music.next();
}
ImGui.sameLine();
if (ImGui.button("Stop")) {
main.music.stop();
}
ImGui.sameLine();
if (ImGui.button("Add")) {
2022-01-31 23:05:27 +01:00
main.fileChooser.chooseFile(fileChooserConfig, NativeFileChooserCallbackAdapter.onFileChosen(v -> main.music.addBackgroundMusic(v)));
2022-01-28 11:59:57 +01:00
}
int flags = ImGuiTableFlags.ScrollX | ImGuiTableFlags.RowBg | ImGuiTableFlags.BordersOuter | ImGuiTableFlags.BordersV;
ImGui.beginTable("playlist", 3, flags);
ImGui.tableSetupColumn("#", ImGuiTableColumnFlags.NoHide);
ImGui.tableSetupColumn("Play");
ImGui.tableSetupColumn("Name");
ImGui.tableHeadersRow();
int i=1;
for (MusicSong song:main.music.getBackgroundSongs()) {
ImGui.pushID(i);
ImGui.tableNextRow();
ImGui.tableNextColumn();
ImGui.selectable(""+i, song.isPlaying(), ImGuiSelectableFlags.None);
ImGui.tableNextColumn();
if (ImGui.smallButton(">")) {
main.music.play(song);
}
ImGui.tableNextColumn();
ImGui.selectable(song.getName(), song.isPlaying(), ImGuiSelectableFlags.None);
ImGui.popID();
i++;
}
ImGui.endTable();
ImGui.end();
}
2022-01-31 23:05:27 +01:00
static class NativeFileChooserCallbackAdapter implements NativeFileChooserCallback {
@Override
public void onFileChosen(FileHandle file) {
}
@Override
public void onCancellation() {
}
@Override
public void onError(Exception exception) {
}
static NativeFileChooserCallbackAdapter onFileChosen(Consumer<FileHandle> eater) {
return new NativeFileChooserCallbackAdapter() {
@Override
public void onFileChosen(FileHandle file) {
eater.accept(file);
}
};
}
}
2022-01-28 11:59:57 +01:00
}