wip ui for waveforms

This commit is contained in:
lunarcleint
2024-03-20 15:52:23 -07:00
parent 52133d7969
commit 864239108a
5 changed files with 70 additions and 10 deletions
+29 -8
View File
@@ -86,6 +86,7 @@ class Charter extends UIState {
public static var undos:UndoList<CharterChange>;
public static var clipboard:Array<CharterCopyboardObject> = [];
public static var waveformHandler:CharterWaveformHandler;
public function new(song:String, diff:String, reload:Bool = true) {
super();
@@ -551,13 +552,7 @@ class Charter extends UIState {
__relinkUndos();
__applyPlaytestInfo();
var charterWaveHandler:CharterWaveformHandler = new CharterWaveformHandler();
charterWaveHandler.ampsNeeded = __endStep*40;
var waveShader:CustomShader = charterWaveHandler.generateShader("Voices.ogg", vocals);
for (grid in gridBackdrops) grid.waveformSprite.shader = waveShader;
var dataDisplay:FlxSprite = new FlxSprite().loadGraphic(charterWaveHandler.waveDatas.get("Voices.ogg"));
var dataDisplay:FlxSprite = new FlxSprite().loadGraphic(waveformHandler.waveDatas.get("Voices.ogg"));
dataDisplay.cameras = [charterCamera]; dataDisplay.x = -dataDisplay.width; add(dataDisplay);
}
@@ -569,6 +564,30 @@ class Charter extends UIState {
gridBackdrops.bottomLimitY = __endStep * 40;
eventsBackdrop.bottomSeparator.y = gridBackdrops.bottomLimitY-2;
regenerateWaveforms();
}
public function regenerateWaveforms() {
if (waveformHandler == null ? true : waveformHandler.ampsNeeded != __endStep*40) {
trace("REGEN WAVES");
waveformHandler.clearWaveforms();
waveformHandler.ampsNeeded = __endStep * 40;
var wavesToGenerate:Array<{name:String, sound:FlxSound}> = [
{name: "Inst.ogg", sound: FlxG.sound.music},
{name: "Voices.ogg", sound: vocals}
];
for (data in wavesToGenerate) {
waveformHandler.generateShader(data.name, data.sound);
waveformHandler.waveformList.push(data.name);
}
for (strumLine in strumLines) // Update grids
strumLine.selectedWaveform = strumLine.selectedWaveform;
}
}
public override function beatHit(curBeat:Int) {
@@ -1726,10 +1745,12 @@ class Charter extends UIState {
selection = new Selection();
undos = new UndoList<CharterChange>();
clipboard = []; playtestInfo = null;
waveformHandler = new CharterWaveformHandler();
}
@:noCompletion public function __clearStatics() {
selection = null; undos = null; clipboard = null; playtestInfo = null;
selection = null; undos = null; clipboard = null; playtestInfo = null;
waveformHandler.destroy(); Charter.waveformHandler = null;
}
@:noCompletion public function __updatePlaytestInfo() {
@@ -64,6 +64,8 @@ class CharterBackdropGroup extends FlxTypedGroup<CharterBackdrop> {
grid.sectionSeparator.visible = sectionsVisible;
grid.beatSeparator.visible = beatsVisible;
grid.waveformSprite.shader = strumLine.waveformShader;
grid.notesGroup.clear();
notesGroup.forEach((n) -> {
var onStr:Bool = (n.snappedToStrumline ? n.strumLineID : Std.int(FlxMath.bound((n.x+n.width)/(40*4), 0, strumLineGroup.members.length-1))) == i;
@@ -79,13 +79,13 @@ class CharterEventScreen extends UISubstateWindow {
else {
chartEvent.events = [for (i in eventsList.buttons.members) i.event];
chartEvent.refreshEventIcons();
Charter.instance.updateBPMEvents();
Charter.undos.addToUndo(CEditEvent(chartEvent, oldEvents, [for (event in events) Reflect.copy(event)]));
}
}
close();
Charter.instance.updateBPMEvents();
});
saveButton.x -= saveButton.bWidth;
add(saveButton);
@@ -5,6 +5,7 @@ import funkin.game.Character;
import funkin.editors.ui.UITopMenu.UITopMenuButton;
import funkin.game.HealthIcon;
import funkin.backend.chart.ChartData.ChartStrumLine;
import funkin.backend.shaders.CustomShader;
import flixel.sound.FlxSound;
class CharterStrumline extends UISprite {
@@ -22,6 +23,17 @@ class CharterStrumline extends UISprite {
public var vocals:FlxSound;
public var selectedWaveform(default, set):Int = -1;
public function set_selectedWaveform(value:Int):Int {
if (value == -1) waveformShader = null;
else {
var shaderName:String = Charter.waveformHandler.waveformList[value];
waveformShader = Charter.waveformHandler.waveShaders.get(shaderName);
}
return selectedWaveform = value;
}
public var waveformShader:CustomShader;
public function new(strumLine:ChartStrumLine) {
super();
this.strumLine = strumLine;
@@ -60,6 +72,8 @@ class CharterStrumline extends UISprite {
vocals = strumLine.vocalsSuffix.length > 0 ? FlxG.sound.load(Paths.voices(PlayState.SONG.meta.name, PlayState.difficulty, strumLine.vocalsSuffix)) : new FlxSound();
vocals.group = FlxG.sound.defaultMusicGroup;
selectedWaveform = -1;
}
private var __healthYOffset:Float = 0;
@@ -154,6 +168,22 @@ class CharterStrumlineOptions extends UITopMenuButton {
icon: 3
}
];
contextMenu.insert(0, {
label: "No Waveform",
onSelect: function(_) {strLine.selectedWaveform = -1;},
icon: strLine.selectedWaveform == -1 ? 1 : 0
});
for (i => name in Charter.waveformHandler.waveformList)
contextMenu.insert(1+i, {
label: name,
onSelect: function(_) {strLine.selectedWaveform = i;},
icon: strLine.selectedWaveform == i ? 1 : 0
});
contextMenu.insert(1+Charter.waveformHandler.waveformList.length, null);
super.openContextMenu();
}
}
@@ -22,6 +22,8 @@ class CharterWaveformHandler extends FlxBasic {
public var sounds:Map<String, FlxSound> = [];
public var analyzers:Map<String, AudioAnalyzer> = [];
public var waveformList:Array<String> = [];
public function new() {super(); exists = false;}
public function generateData(name:String, sound:FlxSound):BitmapData {
@@ -75,14 +77,19 @@ class CharterWaveformHandler extends FlxBasic {
return waveShader;
}
public override function destroy() {
public function clearWaveforms() {
for (data in waveDatas) data.dispose();
for (shader in waveShaders) shader = null;
for (analyzer in analyzers) analyzer = null;
waveDatas.clear(); waveShaders.clear();
analyzers.clear(); sounds.clear();
waveformList = [];
}
public override function destroy() {
clearWaveforms();
super.destroy();
}
}