Merge pull request #687 from FunkinCrew/feature/erect-stages

Erect stages for weeks 2,3,4 + unfinished pico shit
This commit is contained in:
Cameron Taylor 2024-08-09 22:27:05 -04:00 committed by GitHub
commit 09fe8c1196
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 100 additions and 6 deletions

2
assets

@ -1 +1 @@
Subproject commit aa1231e8cf2990bb902eac3b37815c010fa9919a Subproject commit ee6506f5fa9e80503b4bd9f663a0cdbaae03b357

View file

@ -93,8 +93,8 @@ class StageRegistry extends BaseRegistry<Stage, StageData>
public function listBaseGameStageIds():Array<String> public function listBaseGameStageIds():Array<String>
{ {
return [ return [
"mainStage", "spookyMansion", "phillyTrain", "limoRide", "mallXmas", "mallEvil", "school", "schoolEvil", "tankmanBattlefield", "phillyStreets", "mainStage", "spookyMansion", "phillyTrain", "phillyTrainErect", "limoRide", "limoRideErect", "mallXmas", "mallEvil", "school", "schoolEvil",
"phillyBlazin", "tankmanBattlefield", "phillyStreets", "phillyBlazin",
]; ];
} }

View file

@ -0,0 +1,55 @@
package funkin.graphics.shaders;
import flixel.addons.display.FlxRuntimeShader;
import funkin.Paths;
import openfl.utils.Assets;
class AdjustColorShader extends FlxRuntimeShader
{
public var hue(default, set):Float;
public var saturation(default, set):Float;
public var brightness(default, set):Float;
public var contrast(default, set):Float;
public function new()
{
super(Assets.getText(Paths.frag('adjustColor')));
// FlxG.debugger.addTrackerProfile(new TrackerProfile(HSVShader, ['hue', 'saturation', 'brightness', 'contrast']));
hue = 0;
saturation = 0;
brightness = 0;
contrast = 0;
}
function set_hue(value:Float):Float
{
this.setFloat('hue', value);
this.hue = value;
return this.hue;
}
function set_saturation(value:Float):Float
{
this.setFloat('saturation', value);
this.saturation = value;
return this.saturation;
}
function set_brightness(value:Float):Float
{
this.setFloat('brightness', value);
this.brightness = value;
return this.brightness;
}
function set_contrast(value:Float):Float
{
this.setFloat('contrast', value);
this.contrast = value;
return this.contrast;
}
}

View file

@ -2,6 +2,7 @@ package funkin.graphics.shaders;
import flixel.FlxCamera; import flixel.FlxCamera;
import flixel.FlxG; import flixel.FlxG;
import flixel.graphics.frames.FlxFrame;
import flixel.addons.display.FlxRuntimeShader; import flixel.addons.display.FlxRuntimeShader;
import lime.graphics.opengl.GLProgram; import lime.graphics.opengl.GLProgram;
import lime.utils.Log; import lime.utils.Log;
@ -32,6 +33,9 @@ class RuntimePostEffectShader extends FlxRuntimeShader
// equals (camera.viewLeft, camera.viewTop, camera.viewRight, camera.viewBottom) // equals (camera.viewLeft, camera.viewTop, camera.viewRight, camera.viewBottom)
uniform vec4 uCameraBounds; uniform vec4 uCameraBounds;
// equals (frame.left, frame.top, frame.right, frame.bottom)
uniform vec4 uFrameBounds;
// screen coord -> world coord conversion // screen coord -> world coord conversion
// returns world coord in px // returns world coord in px
vec2 screenToWorld(vec2 screenCoord) { vec2 screenToWorld(vec2 screenCoord) {
@ -56,6 +60,25 @@ class RuntimePostEffectShader extends FlxRuntimeShader
return (worldCoord - offset) / scale; return (worldCoord - offset) / scale;
} }
// screen coord -> frame coord conversion
// returns normalized frame coord
vec2 screenToFrame(vec2 screenCoord) {
float left = uFrameBounds.x;
float top = uFrameBounds.y;
float right = uFrameBounds.z;
float bottom = uFrameBounds.w;
float width = right - left;
float height = bottom - top;
float clampedX = clamp(screenCoord.x, left, right);
float clampedY = clamp(screenCoord.y, top, bottom);
return vec2(
(clampedX - left) / (width),
(clampedY - top) / (height)
);
}
// internally used to get the maximum `openfl_TextureCoordv` // internally used to get the maximum `openfl_TextureCoordv`
vec2 bitmapCoordScale() { vec2 bitmapCoordScale() {
return openfl_TextureCoordv / screenCoord; return openfl_TextureCoordv / screenCoord;
@ -80,6 +103,8 @@ class RuntimePostEffectShader extends FlxRuntimeShader
{ {
super(fragmentSource, null, glVersion); super(fragmentSource, null, glVersion);
uScreenResolution.value = [FlxG.width, FlxG.height]; uScreenResolution.value = [FlxG.width, FlxG.height];
uCameraBounds.value = [0, 0, FlxG.width, FlxG.height];
uFrameBounds.value = [0, 0, FlxG.width, FlxG.height];
} }
// basically `updateViewInfo(FlxG.width, FlxG.height, FlxG.camera)` is good // basically `updateViewInfo(FlxG.width, FlxG.height, FlxG.camera)` is good
@ -89,6 +114,12 @@ class RuntimePostEffectShader extends FlxRuntimeShader
uCameraBounds.value = [camera.viewLeft, camera.viewTop, camera.viewRight, camera.viewBottom]; uCameraBounds.value = [camera.viewLeft, camera.viewTop, camera.viewRight, camera.viewBottom];
} }
public function updateFrameInfo(frame:FlxFrame)
{
// NOTE: uv.width is actually the right pos and uv.height is the bottom pos
uFrameBounds.value = [frame.uv.x, frame.uv.y, frame.uv.width, frame.uv.height];
}
override function __createGLProgram(vertexSource:String, fragmentSource:String):GLProgram override function __createGLProgram(vertexSource:String, fragmentSource:String):GLProgram
{ {
try try

View file

@ -32,6 +32,14 @@ class RuntimeRainShader extends RuntimePostEffectShader
return time = value; return time = value;
} }
public var spriteMode(default, set):Bool = false;
function set_spriteMode(value:Bool):Bool
{
this.setBool('uSpriteMode', value);
return spriteMode = value;
}
// The scale of the rain depends on the world coordinate system, so higher resolution makes // The scale of the rain depends on the world coordinate system, so higher resolution makes
// the raindrops smaller. This parameter can be used to adjust the total scale of the scene. // the raindrops smaller. This parameter can be used to adjust the total scale of the scene.
// The size of the raindrops is proportional to the value of this parameter. // The size of the raindrops is proportional to the value of this parameter.

View file

@ -5701,11 +5701,11 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
{ {
case 'mainStage': case 'mainStage':
PlayStatePlaylist.campaignId = 'week1'; PlayStatePlaylist.campaignId = 'week1';
case 'spookyMansion': case 'spookyMansion' | 'spookyMansionErect':
PlayStatePlaylist.campaignId = 'week2'; PlayStatePlaylist.campaignId = 'week2';
case 'phillyTrain': case 'phillyTrain' | 'phillyTrainErect':
PlayStatePlaylist.campaignId = 'week3'; PlayStatePlaylist.campaignId = 'week3';
case 'limoRide': case 'limoRide' | 'limoRideErect':
PlayStatePlaylist.campaignId = 'week4'; PlayStatePlaylist.campaignId = 'week4';
case 'mallXmas' | 'mallEvil': case 'mallXmas' | 'mallEvil':
PlayStatePlaylist.campaignId = 'week5'; PlayStatePlaylist.campaignId = 'week5';