Funkin/source/funkin/play/PicoFight.hx
2022-09-16 15:38:36 -04:00

205 lines
4.8 KiB
Haxe

package funkin.play;
import flixel.FlxSprite;
import flixel.addons.effects.FlxTrail;
import flixel.group.FlxGroup.FlxTypedGroup;
import flixel.math.FlxMath;
import flixel.util.FlxColor;
import funkin.audiovis.PolygonSpectogram;
import funkin.noteStuff.NoteBasic.NoteData;
class PicoFight extends MusicBeatState
{
var picoHealth:Float = 1;
var darnellHealth:Float = 1;
var pico:Fighter;
var darnell:Fighter;
var darnellGhost:Fighter;
var nextHitTmr:FlxSprite;
var funnyWave:PolygonSpectogram;
var noteQueue:Array<NoteData> = [];
var noteSpawner:FlxTypedGroup<FlxSprite>;
override function create()
{
Paths.setCurrentLevel("weekend1");
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height);
bg.scrollFactor.set();
add(bg);
FlxG.sound.playMusic(Paths.inst("blazin"));
SongLoad.loadFromJson('blazin', "blazin");
Conductor.bpm = SongLoad.songData.bpm;
for (dumbassSection in SongLoad.songData.noteMap['hard'])
{
for (noteStuf in dumbassSection.sectionNotes)
{
noteQueue.push(noteStuf);
trace(noteStuf);
}
}
funnyWave = new PolygonSpectogram(FlxG.sound.music, FlxColor.RED, FlxG.height);
funnyWave.x = (FlxG.width / 2);
funnyWave.realtimeVisLenght = 0.6;
add(funnyWave);
noteSpawner = new FlxTypedGroup<FlxSprite>();
add(noteSpawner);
makeNotes();
nextHitTmr = new FlxSprite((FlxG.width / 2) - 5).makeGraphic(10, FlxG.height, FlxColor.BLACK);
add(nextHitTmr);
var trailShit:FlxTrail = new FlxTrail(nextHitTmr);
add(trailShit);
pico = new Fighter(0, 300, "pico-fighter");
add(pico);
darnell = new Fighter(0, 300, "darnell-fighter");
add(darnell);
darnellGhost = new Fighter(0, 300, "darnell-fighter");
darnellGhost.alpha = 0.5;
add(darnellGhost);
mid = (FlxG.width / 2) - (pico.width / 2);
resetPositions();
// fuk u, hardcoded bullshit bitch
super.create();
}
function makeNotes()
{
for (notes in noteQueue)
{
if (notes.strumTime < Conductor.songPosition + (Conductor.crochet * 4))
{
spawnNote(notes);
spawnNote(notes, FlxDirectionFlags.RIGHT);
}
}
}
function spawnNote(note:NoteData, facing:Int = FlxDirectionFlags.LEFT)
{
var spr:FlxSprite = new FlxSprite(0, (FlxG.height / 2) - 60).makeGraphic(10, 120, Note.codeColors[note.noteData]);
spr.ID = Std.int(note.strumTime); // using ID as strum, lol!
spr.facing = facing;
noteSpawner.add(spr);
}
var mid:Float = (FlxG.width * 0.5) - 200;
function resetPositions()
{
resetPicoPos();
resetDarnell();
}
function resetPicoPos()
{
pico.x = mid + pico.width;
}
function resetDarnell()
{
darnell.x = mid - darnell.width;
}
var prevNoteHit:Float = 0;
override function update(elapsed:Float)
{
darnellGhost.x = darnell.x;
Conductor.songPosition = FlxG.sound.music.time;
funnyWave.thickness = CoolUtil.coolLerp(funnyWave.thickness, 2, 0.5);
funnyWave.waveAmplitude = Std.int(CoolUtil.coolLerp(funnyWave.waveAmplitude, 100, 0.1));
funnyWave.realtimeVisLenght = CoolUtil.coolLerp(funnyWave.realtimeVisLenght, 0.6, 0.1);
noteSpawner.forEachAlive((nt:FlxSprite) ->
{
// i forget how to make rhythm games
nt.x = (nt.ID - Conductor.songPosition) * (nt.ID / (Conductor.songPosition * 0.8));
if (nt.facing == FlxDirectionFlags.RIGHT)
{
nt.x = FlxMath.remapToRange(nt.x, 0, FlxG.width, FlxG.width, 0);
nt.x -= FlxG.width / 2;
}
else
{
nt.x += FlxG.width / 2;
}
nt.scale.x = FlxMath.remapToRange(nt.ID - Conductor.songPosition, 0, Conductor.crochet * 3, 0.2, 2);
nt.scale.y = FlxMath.remapToRange((nt.ID - Conductor.songPosition), 0, Conductor.crochet * 2, 6, 0.2);
if (nt.ID < Conductor.songPosition)
nt.kill();
});
if (noteQueue.length > 0)
{
nextHitTmr.scale.y = FlxMath.remapToRange(Conductor.songPosition, prevNoteHit, noteQueue[0].strumTime, 1, 0);
darnellGhost.scale.x = darnellGhost.scale.y = FlxMath.remapToRange(Conductor.songPosition, prevNoteHit, noteQueue[0].strumTime, 2, 1);
darnellGhost.alpha = FlxMath.remapToRange(Conductor.songPosition, prevNoteHit, noteQueue[0].strumTime, 0.3, 0.1);
if (Conductor.songPosition >= noteQueue[0].strumTime)
{
prevNoteHit = noteQueue[0].strumTime;
noteQueue.shift();
darnell.doSomething(darnellGhost.curAction);
darnellGhost.doSomething();
darnellGhost.animation.curAnim.frameRate = 12;
}
}
if (controls.NOTE_LEFT_P)
{
pico.punch();
}
if (controls.NOTE_LEFT_R)
pico.playAnimation('idle');
super.update(elapsed);
}
override function stepHit():Bool
{
return super.stepHit();
}
override function beatHit():Bool
{
// super.beatHit() returns false if a module cancelled the event.
if (!super.beatHit())
return false;
funnyWave.thickness = 10;
funnyWave.waveAmplitude = 300;
funnyWave.realtimeVisLenght = 0.1;
picoHealth += 1;
makeNotes();
return true;
}
}