diff --git a/assets/shaders/engine/editorWaveforms.frag b/assets/shaders/engine/editorWaveforms.frag index 94ae5293..1134581b 100644 --- a/assets/shaders/engine/editorWaveforms.frag +++ b/assets/shaders/engine/editorWaveforms.frag @@ -8,16 +8,15 @@ uniform vec2 textureRes; uniform sampler2D waveformTexture; uniform ivec2 waveformSize; -float getAmplitude() { +float getAmplitude(vec2 pixel) { float amplitudeRet = 0.; // look in charter for more how it works -lunar - vec2 pixel = openfl_TextureCoordv * textureRes; float pixelID = floor(pixel.y/3.); - vec2 wavePixel = vec2(int(pixelID)%waveformSize.x, floor(pixelID/waveformSize.x)); + vec2 wavePixel = vec2(mod(pixelID, waveformSize.x), floor(pixelID/waveformSize.x)); vec4 waveData = texture2D(waveformTexture, wavePixel / waveformSize); - switch (int(pixel.y) % 3) { + switch (int(round(mod(wavePixel.x, 3.)))) { case 0: amplitudeRet = waveData.r; break; case 1: amplitudeRet = waveData.g; break; case 2: amplitudeRet = waveData.b; break; @@ -27,5 +26,19 @@ float getAmplitude() { void main() { - gl_FragColor = vec4(vec3(getAmplitude()), 1.); + vec2 pixel = openfl_TextureCoordv * textureRes; + float amplitude = getAmplitude(pixel); + float ampwidth = (1.-amplitude) * textureRes.x; + + gl_FragColor = vec4(0.); // transprenty + + if (pixel.x > (ampwidth/2.) && pixel.x < (textureRes.x-(ampwidth/2.))) { + vec3 waveColor = vec3(0.); + float outline = 2.; + + if (pixel.x > ((ampwidth-outline)/2.) && pixel.x < (textureRes.x-((ampwidth-outline)/2.))) + waveColor = vec3(openfl_TextureCoordv.x); + + gl_FragColor = vec4(waveColor, 1.); + } } \ No newline at end of file diff --git a/source/funkin/editors/charter/Charter.hx b/source/funkin/editors/charter/Charter.hx index 1a70e653..ba203022 100644 --- a/source/funkin/editors/charter/Charter.hx +++ b/source/funkin/editors/charter/Charter.hx @@ -558,7 +558,7 @@ class Charter extends UIState { var pixelsNeeded:Int = Math.floor(pixelsToAnalyze/3); if ((pixelsToAnalyze/3) % 1 > 0) pixelsNeeded += 1; - var WRAP_WIDTH:Int = 4000; // just to test if it works - lunar + var WRAP_WIDTH:Int = 500; // just to test if it works - lunar var waveData:BitmapData = new BitmapData(WRAP_WIDTH, 1+Math.floor(pixelsNeeded/WRAP_WIDTH), true, 0xFF000000); @@ -588,17 +588,24 @@ class Charter extends UIState { var testWaveform:FlxSprite = new FlxSprite().makeSolid(160, 16*Std.int(40 * Conductor.getMeasureLength()), 0xFF000000); testWaveform.cameras = [charterCamera]; - add(testWaveform); + // add(testWaveform); wshader = new CustomShader("engine/editorWaveforms"); + // wshader.data.textureRes.value = [testWaveform.width, testWaveform.height]; wshader.data.waveformSize.value = [waveData.width, waveData.height]; wshader.data.waveformTexture.input = waveData; + wshader.data.pixelOffset.value = [0]; - wshader.data.textureRes.value = [testWaveform.width, testWaveform.height]; - - testWaveform.shader = wshader; + testSpriteCool = new FlxSprite().makeSolid(1, 1, 0xFFFF0000); + testSpriteCool.scale.set(160, FlxG.height); + testSpriteCool.cameras = [charterCamera]; + testSpriteCool.updateHitbox(); + testSpriteCool.setPosition(0,0); + testSpriteCool.shader = wshader; + add(testSpriteCool); } + var testSpriteCool:FlxSprite; var wshader:CustomShader; public var __endStep:Float = 0; @@ -1060,6 +1067,21 @@ class Charter extends UIState { gridBackdrops.conductorSprY - (FlxG.height * 0.5) ); + testSpriteCool.scale.set(160, FlxG.height * (1/charterCamera.zoom)); + testSpriteCool.updateHitbox(); + + testSpriteCool.y = (charterCamera.scroll.y+FlxG.height/2)-(testSpriteCool.height/2); + + if (testSpriteCool.y < 0) {testSpriteCool.scale.y += testSpriteCool.y; testSpriteCool.y = 0;} + if (testSpriteCool.y + testSpriteCool.height > __endStep*40) { + testSpriteCool.scale.y -= (testSpriteCool.y + testSpriteCool.height)-(__endStep*40); + testSpriteCool.y = (__endStep*40) - testSpriteCool.scale.y; + } + testSpriteCool.updateHitbox(); + + wshader.data.textureRes.value = [testSpriteCool.width, testSpriteCool.height]; + wshader.data.pixelOffset.value = [Math.max(gridBackdrops.conductorSprY - ((FlxG.height * (1/charterCamera.zoom)) * 0.5), 0)]; + if (topMenuSpr.members[playbackIndex] != null) { var playBackButton:UITopMenuButton = cast topMenuSpr.members[playbackIndex]; playBackButton.x = playBackSlider.x-playBackSlider.startText.width-10-playBackSlider.valueStepper.bWidth-playBackButton.bWidth-10; diff --git a/source/funkin/editors/charter/CharterWaveformHandler.hx b/source/funkin/editors/charter/CharterWaveformHandler.hx new file mode 100644 index 00000000..14be299c --- /dev/null +++ b/source/funkin/editors/charter/CharterWaveformHandler.hx @@ -0,0 +1 @@ +package funkin.editors.charter;