week 6 pause!!

This commit is contained in:
Yoshman29
2022-11-05 19:12:16 +01:00
parent ec7fa26181
commit f854f88923
24 changed files with 310 additions and 32 deletions
+82
View File
@@ -1,9 +1,16 @@
import flixel.FlxCamera.FlxCameraFollowStyle;
public var pixelNotesForBF = true;
public var pixelNotesForDad = true;
public var enablePixelUI = true;
public var enableCameraHacks = true;
public var enablePauseMenu = true;
var daPixelZoom = 6;
/**
* UI
*/
function onNoteCreation(event) {
if (event.note.mustPress && !pixelNotesForBF) return;
if (!event.note.mustPress && !pixelNotesForDad) return;
@@ -51,4 +58,79 @@ function onCountdown(event) {
case 2: 'stages/school/ui/set';
case 3: 'stages/school/ui/go';
};
}
/**
* CAMERA HACKS!!
*/
function createPost() {
if (enablePauseMenu) {
PauseSubState.script = 'data/scripts/week6-pause';
}
if (enableCameraHacks) {
FlxG.camera.antialiasing = false;
FlxG.camera.pixelPerfectRender = true;
FlxG.game.stage.quality = 2;
var newNoteCamera = new FlxCamera();
newNoteCamera.bgColor = 0; // transparent
FlxG.cameras.add(newNoteCamera, false);
var pixelSwagWidth = Note.swagWidth + (6 - (Note.swagWidth % 6));
// TODO: multikey support??
for(s in 0...4) {
var i = 0;
for(str in [cpuStrums.members[s], playerStrums.members[s]]) {
// TODO: middlescroll???
str.x = (FlxG.width * (0.25 + (0.5 * i))) + (pixelSwagWidth * (s - 2));
str.x -= str.x % 6;
str.cameras = [newNoteCamera];
i++;
}
}
iconP1.antialiasing = false;
iconP2.antialiasing = false;
makeCameraPixely(camGame);
makeCameraPixely(newNoteCamera);
}
}
/**
* Use this to make any camera pixelly (you wont be able to zoom with it anymore!)
*/
public function makeCameraPixely(cam) {
cam.pixelPerfectRender = true;
cam.zoom /= Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y) * 6;
defaultCamZoom /= 6;
var shad = new CustomShader('pixelZoomShader');
cam.addShader(shad);
pixellyCameras.push(cam);
pixellyShaders.push(shad);
}
function pixelCam(cam) {
makeCameraPixely(cam);
}
var pixellyCameras = [];
var pixellyShaders = [];
function updatePost(elapsed) {
for(e in pixellyCameras) {
if (!e.exists) continue;
e.zoom = 1 / 6 / Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y);
}
for(e in pixellyShaders) {
e.pixelZoom = 1 / 6 / Math.min(FlxG.scaleMode.scale.x, FlxG.scaleMode.scale.y);
}
if (enableCameraHacks) {
notes.forEach(function(n) {
n.y -= n.y % 6;
});
}
}
+109
View File
@@ -0,0 +1,109 @@
import funkin.ui.FunkinText;
import flixel.text.FlxText;
import flixel.text.FlxTextBorderStyle;
import flixel.util.FlxAxes;
var pixelScript:Script;
var pauseCam = new FlxCamera();
var bg:FlxSprite;
var hand:FlxSprite;
var texts:Array<FlxText> = [];
function create(event) {
// cancel default pause menu!!
event.cancel();
event.music = "pixel/Lunchbox";
cameras = [];
pixelScript = game.scripts.getByName("pixel.hx");
pixelScript.call("pixelCam", [pauseCam]);
FlxG.cameras.add(pauseCam, false);
pauseCam.bgColor = 0x88FF99CC;
pauseCam.alpha = 0;
bg = new FlxSprite(44 * 6, 14 * 6).loadGraphic(Paths.image('stages/school/pause/bg'));
bg.scale.set(6, 6);
bg.updateHitbox();
bg.scale.y = 5;
bg.cameras = [pauseCam];
add(bg);
text = new FlxText(0, 22 * 6, 0, "Pause", 8, false);
confText(text);
add(text);
var i = 2;
for(e in menuItems) {
text = new FlxText(0, (22 * 6) + (i * 9 * 6), 0, e, 8, false);
confText(text);
add(text);
texts.push(text);
i++;
}
hand = new FlxSprite().loadGraphic(Paths.image('stages/school/ui/hand_textbox'));
hand.scale.set(6, 6);
hand.updateHitbox();
add(hand);
FlxTween.tween(bg, {"scale.y": 6}, 0.75, {ease: FlxEase.elasticOut});
cameras = [pauseCam];
FlxG.sound.play(Paths.sound('pixel/clickText'));
}
function confText(text) {
text.scale.set(6, 6);
text.updateHitbox();
text.screenCenter(FlxAxes.X);
text.borderStyle = FlxTextBorderStyle.OUTLINE;
text.borderColor = 0xFF953E3E;
}
function createPost() {
}
function destroy() {
FlxG.cameras.remove(pauseCam);
}
function update(elapsed) {
pixelScript.call("updatePost", [elapsed]);
pauseCam.alpha = lerp(pauseCam.alpha, 1, 0.25);
var oldSec = curSelected;
if (controls.DOWN_P)
changeSelection(1, false);
if (controls.UP_P)
changeSelection(-1);
if (oldSec != curSelected) {
FlxG.sound.play(Paths.sound('pixel/pixelText'));
}
var curText = texts[curSelected];
hand.setPosition(curText.x - hand.width - 12, curText.y + (text.height - hand.height) - 6);
hand.x -= hand.x % 6;
hand.y -= hand.y % 6;
if (controls.ACCEPT) {
FlxG.sound.play(Paths.sound('pixel/clickText'));
selectOption();
}
}
function changeSelection(change) {
curSelected += change;
if (curSelected < 0)
curSelected = menuItems.length - 1;
if (curSelected >= menuItems.length)
curSelected = 0;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.
+11
View File
@@ -0,0 +1,11 @@
#pragma header
uniform float pixelZoom;
// zooms the game 6 times
void main() {
vec2 camPos = getCamPos(openfl_TextureCoordv);
camPos = vec2(0.5, 0.5) + ((camPos - vec2(0.5, 0.5)) * pixelZoom);
gl_FragColor = textureCam(bitmap, camPos);
}
+1 -1
View File
@@ -1 +1 @@
1149
1155
+2
View File
@@ -153,6 +153,8 @@ class PlayState extends MusicBeatState
override public function create()
{
instance = this;
PauseSubState.script = "";
if (FlxG.sound.music != null)
FlxG.sound.music.stop();
+55 -31
View File
@@ -1,5 +1,8 @@
package funkin.menus;
import funkin.scripting.events.PauseCreationEvent;
import funkin.scripting.events.PauseSelectOptionEvent;
import funkin.scripting.Script;
import flixel.FlxG;
import flixel.FlxSprite;
import flixel.FlxSubState;
@@ -16,6 +19,8 @@ import funkin.options.keybinds.KeybindsOptions;
class PauseSubState extends MusicBeatSubstate
{
public static var script:String = "";
var grpMenuShit:FlxTypedGroup<Alphabet>;
var menuItems:Array<String> = ['Resume', 'Restart Song', 'Change Controls', 'Options','Exit to menu'];
@@ -23,16 +28,33 @@ class PauseSubState extends MusicBeatSubstate
var pauseMusic:FlxSound;
public var pauseScript:Script;
public var game:PlayState = PlayState.instance; // shortcut
private var __cancelDefault:Bool = false;
public function new(x:Float, y:Float)
{
super();
pauseMusic = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true);
pauseScript = Script.create(Paths.script(script));
pauseScript.setParent(this);
pauseScript.load();
var event = new PauseCreationEvent('breakfast', menuItems);
pauseScript.call('create', [event]);
menuItems = event.options;
pauseMusic = new FlxSound().loadEmbedded(Paths.music(event.music), true, true);
pauseMusic.volume = 0;
pauseMusic.play(false, FlxG.random.int(0, Std.int(pauseMusic.length / 2)));
FlxG.sound.list.add(pauseMusic);
if (__cancelDefault = event.cancelled) return;
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
bg.alpha = 0;
bg.scrollFactor.set();
@@ -74,56 +96,58 @@ class PauseSubState extends MusicBeatSubstate
changeSelection();
cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]];
pauseScript.call("createPost");
}
override function update(elapsed:Float)
{
super.update(elapsed);
if (pauseMusic.volume < 0.5)
pauseMusic.volume += 0.01 * elapsed;
super.update(elapsed);
pauseScript.call("update", [elapsed]);
if (__cancelDefault) return;
var upP = controls.UP_P;
var downP = controls.DOWN_P;
var accepted = controls.ACCEPT;
if (upP)
{
changeSelection(-1);
}
if (downP)
{
changeSelection(1);
}
if (accepted)
{
var daSelected:String = menuItems[curSelected];
switch (daSelected)
{
case "Resume":
close();
case "Restart Song":
FlxG.resetState();
case "Change Controls":
persistentDraw = false;
openSubState(new KeybindsOptions());
case "Exit to menu":
FlxG.switchState(new MainMenuState());
}
}
if (FlxG.keys.justPressed.J)
{
// for reference later!
// PlayerSettings.player1.controls.replaceBinding(Control.LEFT, Keys, FlxKey.J, null);
}
selectOption();
}
public function selectOption() {
var event = new PauseSelectOptionEvent(menuItems[curSelected]);
pauseScript.call("onSelectOption", [event]);
if (event.cancelled) return;
var daSelected:String = event.name;
switch (daSelected)
{
case "Resume":
close();
case "Restart Song":
FlxG.resetState();
case "Change Controls":
persistentDraw = false;
openSubState(new KeybindsOptions());
case "Exit to menu":
FlxG.switchState(new MainMenuState());
}
}
override function destroy()
{
pauseMusic.destroy();
pauseScript.call("destroy");
if (pauseMusic != null) pauseMusic.destroy();
super.destroy();
}
+1
View File
@@ -59,6 +59,7 @@ class Script extends FlxBasic implements IFlxDestroyable {
"Strum" => funkin.game.Strum,
"Character" => funkin.game.Character,
"Boyfriend" => funkin.game.Character, // for compatibility
"PauseSubstate" => funkin.menus.PauseSubState,
"FreeplayState" => funkin.menus.FreeplayState,
"MainMenuState" => funkin.menus.MainMenuState,
"PauseSubState" => funkin.menus.PauseSubState,
+13
View File
@@ -20,6 +20,19 @@ class ScriptPack extends Script {
super(name);
}
public function getByPath(name:String) {
for(s in scripts)
if (s.path == name)
return s;
return null;
}
public function getByName(name:String) {
for(s in scripts)
if (s.fileName == name)
return s;
return null;
}
public function importScript(path:String):Script {
var script = Script.create(Paths.script(path));
if (script is DummyScript) {
@@ -0,0 +1,23 @@
package funkin.scripting.events;
/**
* CANCEL this event to prevent default behaviour!
*/
class PauseCreationEvent extends CancellableEvent {
/**
* Music that is going to be played
*/
public var music:String;
/**
* All option names
*/
public var options:Array<String>;
public function new(music:String, options:Array<String>) {
super();
this.music = music;
this.options = options;
}
}
@@ -0,0 +1,13 @@
package funkin.scripting.events;
class PauseSelectOptionEvent extends CancellableEvent {
/**
* Option name thats going to be selected
*/
public var name:String;
public function new(name:String) {
super();
this.name = name;
}
}