wip ui for waveforms
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user