second push
This commit is contained in:
+1
-1
@@ -1 +1 @@
|
||||
2
|
||||
60
|
||||
@@ -1,43 +0,0 @@
|
||||
package;
|
||||
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxSprite;
|
||||
import flixel.graphics.frames.FlxAtlasFrames;
|
||||
import flixel.util.FlxTimer;
|
||||
|
||||
using StringTools;
|
||||
|
||||
class Boyfriend extends Character
|
||||
{
|
||||
public var stunned:Bool = false;
|
||||
|
||||
public function new(x:Float, y:Float, ?char:String = 'bf')
|
||||
{
|
||||
super(x, y, char, true);
|
||||
}
|
||||
|
||||
override function update(elapsed:Float)
|
||||
{
|
||||
if (!debugMode)
|
||||
{
|
||||
if (animation.curAnim.name.startsWith('sing'))
|
||||
{
|
||||
holdTimer += elapsed;
|
||||
}
|
||||
else
|
||||
holdTimer = 0;
|
||||
|
||||
if (animation.curAnim.name.endsWith('miss') && animation.curAnim.finished && !debugMode)
|
||||
{
|
||||
playAnim('idle', true, false, 10);
|
||||
}
|
||||
|
||||
if (animation.curAnim.name == 'firstDeath' && animation.curAnim.finished)
|
||||
{
|
||||
playAnim('deathLoop');
|
||||
}
|
||||
}
|
||||
|
||||
super.update(elapsed);
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,12 @@ import openfl.display.FPS;
|
||||
import openfl.display.Sprite;
|
||||
import openfl.events.Event;
|
||||
import flixel.FlxG;
|
||||
import flixel.graphics.FlxGraphic;
|
||||
import flixel.addons.transition.FlxTransitionableState;
|
||||
import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond;
|
||||
import flixel.addons.transition.TransitionData;
|
||||
import flixel.math.FlxPoint;
|
||||
import flixel.math.FlxRect;
|
||||
|
||||
// TODO: REMOVE TEST
|
||||
import modsfolder.ModsFolder;
|
||||
@@ -91,5 +97,15 @@ class Main extends Sprite
|
||||
ModsFolder.currentModFolder = "B-Sides";
|
||||
|
||||
FlxG.fixedTimestep = false;
|
||||
FlxG.autoPause = false;
|
||||
|
||||
var diamond:FlxGraphic = FlxGraphic.fromClass(GraphicTransTileDiamond);
|
||||
diamond.persist = true;
|
||||
diamond.destroyOnNoUse = false;
|
||||
|
||||
FlxTransitionableState.defaultTransIn = new TransitionData(FADE, 0xFF000000, 1, new FlxPoint(0, -1), {asset: diamond, width: 32, height: 32},
|
||||
new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
||||
FlxTransitionableState.defaultTransOut = new TransitionData(FADE, 0xFF000000, 0.7, new FlxPoint(0, 1),
|
||||
{asset: diamond, width: 32, height: 32}, new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
||||
}
|
||||
}
|
||||
|
||||
+16
-79
@@ -10,7 +10,6 @@ import flixel.FlxState;
|
||||
import flixel.addons.display.FlxGridOverlay;
|
||||
import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond;
|
||||
import flixel.addons.transition.FlxTransitionableState;
|
||||
import flixel.addons.transition.TransitionData;
|
||||
import flixel.graphics.FlxGraphic;
|
||||
import flixel.graphics.frames.FlxAtlasFrames;
|
||||
import flixel.group.FlxGroup;
|
||||
@@ -69,30 +68,15 @@ class TitleState extends MusicBeatState
|
||||
{
|
||||
if (!initialized)
|
||||
{
|
||||
var diamond:FlxGraphic = FlxGraphic.fromClass(GraphicTransTileDiamond);
|
||||
diamond.persist = true;
|
||||
diamond.destroyOnNoUse = false;
|
||||
|
||||
FlxTransitionableState.defaultTransIn = new TransitionData(FADE, FlxColor.BLACK, 1, new FlxPoint(0, -1), {asset: diamond, width: 32, height: 32},
|
||||
new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
||||
FlxTransitionableState.defaultTransOut = new TransitionData(FADE, FlxColor.BLACK, 0.7, new FlxPoint(0, 1),
|
||||
{asset: diamond, width: 32, height: 32}, new FlxRect(-200, -200, FlxG.width * 1.4, FlxG.height * 1.4));
|
||||
|
||||
transIn = FlxTransitionableState.defaultTransIn;
|
||||
transOut = FlxTransitionableState.defaultTransOut;
|
||||
|
||||
FlxG.sound.playMusic(Paths.music('freakyMenu'), 0);
|
||||
|
||||
FlxG.sound.music.fadeIn(4, 0, 0.7);
|
||||
}
|
||||
FlxTransitionableState.skipNextTransIn = true;
|
||||
|
||||
Conductor.changeBPM(102);
|
||||
persistentUpdate = true;
|
||||
|
||||
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
|
||||
// bg.antialiasing = true;
|
||||
// bg.setGraphicSize(Std.int(bg.width * 0.6));
|
||||
// bg.updateHitbox();
|
||||
add(bg);
|
||||
|
||||
logoBl = new FlxSprite(-150, -100);
|
||||
@@ -101,8 +85,6 @@ class TitleState extends MusicBeatState
|
||||
logoBl.animation.addByPrefix('bump', 'logo bumpin', 24);
|
||||
logoBl.animation.play('bump');
|
||||
logoBl.updateHitbox();
|
||||
// logoBl.screenCenter();
|
||||
// logoBl.color = FlxColor.BLACK;
|
||||
|
||||
gfDance = new FlxSprite(FlxG.width * 0.4, FlxG.height * 0.07);
|
||||
gfDance.frames = Paths.getSparrowAtlas('gfDanceTitle');
|
||||
@@ -119,7 +101,6 @@ class TitleState extends MusicBeatState
|
||||
titleText.antialiasing = true;
|
||||
titleText.animation.play('idle');
|
||||
titleText.updateHitbox();
|
||||
// titleText.screenCenter(X);
|
||||
add(titleText);
|
||||
|
||||
var logo:FlxSprite = new FlxSprite().loadGraphic(Paths.image('logo'));
|
||||
@@ -183,14 +164,9 @@ class TitleState extends MusicBeatState
|
||||
|
||||
override function update(elapsed:Float)
|
||||
{
|
||||
if (FlxG.sound.music != null)
|
||||
Conductor.songPosition = FlxG.sound.music.time;
|
||||
// FlxG.watch.addQuick('amp', FlxG.sound.music.amplitude);
|
||||
if (FlxG.sound.music != null) Conductor.songPosition = FlxG.sound.music.time;
|
||||
|
||||
if (FlxG.keys.justPressed.F)
|
||||
{
|
||||
FlxG.fullscreen = !FlxG.fullscreen;
|
||||
}
|
||||
if (FlxG.keys.justPressed.F) FlxG.fullscreen = !FlxG.fullscreen;
|
||||
|
||||
var pressedEnter:Bool = FlxG.keys.justPressed.ENTER;
|
||||
|
||||
@@ -219,9 +195,6 @@ class TitleState extends MusicBeatState
|
||||
|
||||
if (pressedEnter && !transitioning && skippedIntro)
|
||||
{
|
||||
// if (Date.now().getDay() == 5)
|
||||
// NGio.unlockMedal(61034);
|
||||
|
||||
titleText.animation.play('press');
|
||||
|
||||
FlxG.camera.flash(FlxColor.WHITE, 1);
|
||||
@@ -237,9 +210,7 @@ class TitleState extends MusicBeatState
|
||||
}
|
||||
|
||||
if (pressedEnter && !skippedIntro)
|
||||
{
|
||||
skipIntro();
|
||||
}
|
||||
|
||||
super.update(elapsed);
|
||||
}
|
||||
@@ -290,53 +261,19 @@ class TitleState extends MusicBeatState
|
||||
|
||||
switch (curBeat)
|
||||
{
|
||||
case 1:
|
||||
createCoolText(['ninjamuffin99', 'phantomArcade', 'kawaisprite', 'evilsk8er']);
|
||||
// credTextShit.visible = true;
|
||||
case 3:
|
||||
addMoreText('present');
|
||||
// credTextShit.text += '\npresent...';
|
||||
// credTextShit.addText();
|
||||
case 4:
|
||||
deleteCoolText();
|
||||
// credTextShit.visible = false;
|
||||
// credTextShit.text = 'In association \nwith';
|
||||
// credTextShit.screenCenter();
|
||||
case 5:
|
||||
createCoolText(['In association', 'with']);
|
||||
case 7:
|
||||
addMoreText('newgrounds');
|
||||
ngSpr.visible = true;
|
||||
// credTextShit.text += '\nNewgrounds';
|
||||
case 8:
|
||||
deleteCoolText();
|
||||
ngSpr.visible = false;
|
||||
// credTextShit.visible = false;
|
||||
|
||||
// credTextShit.text = 'Shoutouts Tom Fulp';
|
||||
// credTextShit.screenCenter();
|
||||
case 9:
|
||||
createCoolText([curWacky[0]]);
|
||||
// credTextShit.visible = true;
|
||||
case 11:
|
||||
addMoreText(curWacky[1]);
|
||||
// credTextShit.text += '\nlmao';
|
||||
case 12:
|
||||
deleteCoolText();
|
||||
// credTextShit.visible = false;
|
||||
// credTextShit.text = "Friday";
|
||||
// credTextShit.screenCenter();
|
||||
case 13:
|
||||
addMoreText('Friday');
|
||||
// credTextShit.visible = true;
|
||||
case 14:
|
||||
addMoreText('Night');
|
||||
// credTextShit.text += '\nNight';
|
||||
case 15:
|
||||
addMoreText('Funkin'); // credTextShit.text += '\nFunkin';
|
||||
|
||||
case 16:
|
||||
skipIntro();
|
||||
case 1: createCoolText(['ninjamuffin99', 'phantomArcade', 'kawaisprite', 'evilsk8er']);
|
||||
case 3: addMoreText('present');
|
||||
case 4: deleteCoolText();
|
||||
case 5: createCoolText(['In association', 'with']);
|
||||
case 7: addMoreText('newgrounds'); ngSpr.visible = true;
|
||||
case 8: deleteCoolText(); ngSpr.visible = false;
|
||||
case 9: createCoolText([curWacky[0]]);
|
||||
case 11: addMoreText(curWacky[1]);
|
||||
case 12: deleteCoolText();
|
||||
case 13: addMoreText('Friday');
|
||||
case 14: addMoreText('Night');
|
||||
case 15: addMoreText('Funkin');
|
||||
case 16: skipIntro();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package;
|
||||
package funkin.game;
|
||||
|
||||
import funkin.system.IBeatReceiver;
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxSprite;
|
||||
import flixel.animation.FlxBaseAnimation;
|
||||
@@ -7,15 +8,18 @@ import flixel.graphics.frames.FlxAtlasFrames;
|
||||
|
||||
using StringTools;
|
||||
|
||||
class Character extends FlxSprite
|
||||
class Character extends FlxSprite implements IBeatReceiver
|
||||
{
|
||||
public var stunned:Bool = false;
|
||||
|
||||
public var animOffsets:Map<String, Array<Dynamic>>;
|
||||
public var debugMode:Bool = false;
|
||||
|
||||
public var isPlayer:Bool = false;
|
||||
public var curCharacter:String = 'bf';
|
||||
|
||||
public var holdTimer:Float = 0;
|
||||
public var lastHit:Float = -5000;
|
||||
public var dadVar:Float = 4;
|
||||
|
||||
public function new(x:Float, y:Float, ?character:String = "bf", ?isPlayer:Bool = false)
|
||||
{
|
||||
@@ -138,6 +142,8 @@ class Character extends FlxSprite
|
||||
addOffset("singLEFT", -10, 10);
|
||||
addOffset("singDOWN", 0, -30);
|
||||
|
||||
dadVar = 6.1;
|
||||
|
||||
playAnim('idle');
|
||||
case 'spooky':
|
||||
tex = Paths.getSparrowAtlas('spooky_kids_assets');
|
||||
@@ -526,24 +532,6 @@ class Character extends FlxSprite
|
||||
|
||||
override function update(elapsed:Float)
|
||||
{
|
||||
if (!curCharacter.startsWith('bf'))
|
||||
{
|
||||
if (animation.curAnim.name.startsWith('sing'))
|
||||
{
|
||||
holdTimer += elapsed;
|
||||
}
|
||||
|
||||
var dadVar:Float = 4;
|
||||
|
||||
if (curCharacter == 'dad')
|
||||
dadVar = 6.1;
|
||||
if (holdTimer >= Conductor.stepCrochet * dadVar * 0.001)
|
||||
{
|
||||
dance();
|
||||
holdTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
switch (curCharacter)
|
||||
{
|
||||
case 'gf':
|
||||
@@ -555,7 +543,7 @@ class Character extends FlxSprite
|
||||
}
|
||||
|
||||
private var danced:Bool = false;
|
||||
|
||||
|
||||
/**
|
||||
* FOR GF DANCING SHIT
|
||||
*/
|
||||
@@ -621,6 +609,14 @@ class Character extends FlxSprite
|
||||
}
|
||||
}
|
||||
|
||||
public function beatHit(curBeat:Int) {
|
||||
if ((lastHit + (Conductor.stepCrochet * dadVar) < Conductor.songPosition) || animation.curAnim == null || (!animation.curAnim.name.startsWith("sing") && animation.curAnim.finished))
|
||||
dance();
|
||||
}
|
||||
public function stepHit(curStep:Int) {
|
||||
// nothing
|
||||
}
|
||||
|
||||
public function playAnim(AnimName:String, Force:Bool = false, Reversed:Bool = false, Frame:Int = 0):Void
|
||||
{
|
||||
animation.play(AnimName, Force, Reversed, Frame);
|
||||
@@ -633,6 +629,9 @@ class Character extends FlxSprite
|
||||
else
|
||||
offset.set(0, 0);
|
||||
|
||||
if (AnimName.startsWith("sing"))
|
||||
lastHit = Conductor.songPosition;
|
||||
|
||||
if (curCharacter == 'gf')
|
||||
{
|
||||
if (AnimName == 'singLEFT')
|
||||
@@ -1,4 +1,4 @@
|
||||
package;
|
||||
package funkin.game;
|
||||
|
||||
import flixel.FlxG;
|
||||
import flixel.FlxObject;
|
||||
@@ -9,13 +9,23 @@ import flixel.util.FlxTimer;
|
||||
|
||||
class GameOverSubstate extends MusicBeatSubstate
|
||||
{
|
||||
var bf:Boyfriend;
|
||||
var bf:Character;
|
||||
var camFollow:FlxObject;
|
||||
|
||||
var stageSuffix:String = "";
|
||||
|
||||
public function new(x:Float, y:Float)
|
||||
var x:Float = 0;
|
||||
var y:Float = 0;
|
||||
|
||||
public function new(x:Float, y:Float) {
|
||||
super();
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public override function create()
|
||||
{
|
||||
super.create();
|
||||
var daStage = PlayState.curStage;
|
||||
var daBf:String = '';
|
||||
switch (daStage)
|
||||
@@ -30,11 +40,9 @@ class GameOverSubstate extends MusicBeatSubstate
|
||||
daBf = 'bf';
|
||||
}
|
||||
|
||||
super();
|
||||
|
||||
Conductor.songPosition = 0;
|
||||
|
||||
bf = new Boyfriend(x, y, daBf);
|
||||
bf = new Character(x, y, daBf, true);
|
||||
add(bf);
|
||||
|
||||
camFollow = new FlxObject(bf.getGraphicMidpoint().x, bf.getGraphicMidpoint().y, 1, 1);
|
||||
@@ -4,6 +4,7 @@ import flixel.FlxSprite;
|
||||
import flixel.graphics.frames.FlxAtlasFrames;
|
||||
import flixel.math.FlxMath;
|
||||
import flixel.util.FlxColor;
|
||||
import flixel.math.FlxRect;
|
||||
#if polymod
|
||||
import polymod.format.ParseRules.TargetSignatureElement;
|
||||
#end
|
||||
@@ -34,10 +35,6 @@ class Note extends FlxSprite
|
||||
public var noteScore:Float = 1;
|
||||
|
||||
public static var swagWidth:Float = 160 * 0.7;
|
||||
public static var PURP_NOTE:Int = 0;
|
||||
public static var GREEN_NOTE:Int = 2;
|
||||
public static var BLUE_NOTE:Int = 1;
|
||||
public static var RED_NOTE:Int = 3;
|
||||
|
||||
public function new(strumTime:Float, noteData:Int, ?prevNote:Note, ?sustainNote:Bool = false)
|
||||
{
|
||||
@@ -191,12 +188,8 @@ class Note extends FlxSprite
|
||||
tooLate = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
canBeHit = false;
|
||||
|
||||
if (strumTime <= Conductor.songPosition)
|
||||
wasGoodHit = true;
|
||||
}
|
||||
|
||||
|
||||
if (tooLate)
|
||||
{
|
||||
@@ -204,4 +197,16 @@ class Note extends FlxSprite
|
||||
alpha = 0.3;
|
||||
}
|
||||
}
|
||||
|
||||
public function updateClipRect(strum:Strum) {
|
||||
var t = FlxMath.bound((Conductor.songPosition - strumTime) / (height / (0.45 * FlxMath.roundDecimal(strum.getScrollSpeed(), 2))), 0, 1);
|
||||
var swagRect = new FlxRect(0, t * frameHeight, frameWidth, frameHeight);
|
||||
|
||||
setClipRect(swagRect);
|
||||
}
|
||||
|
||||
public function setClipRect(rect:FlxRect) {
|
||||
// TODO: Shader ClipRect like in Yoshi Engine for smoother sustains
|
||||
this.clipRect = rect;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ class PlayState extends MusicBeatState
|
||||
|
||||
private var dad:Character;
|
||||
private var gf:Character;
|
||||
private var boyfriend:Boyfriend;
|
||||
private var boyfriend:Character;
|
||||
|
||||
private var notes:FlxTypedGroup<Note>;
|
||||
private var unspawnNotes:Array<Note> = [];
|
||||
@@ -167,7 +167,7 @@ class PlayState extends MusicBeatState
|
||||
var camPos:FlxPoint = new FlxPoint(dad.getGraphicMidpoint().x, dad.getGraphicMidpoint().y);
|
||||
|
||||
|
||||
boyfriend = new Boyfriend(770, 450, SONG.player1);
|
||||
boyfriend = new Character(770, 450, SONG.player1, true);
|
||||
|
||||
|
||||
add(gf);
|
||||
@@ -431,12 +431,13 @@ class PlayState extends MusicBeatState
|
||||
|
||||
susLength = susLength / Conductor.stepCrochet;
|
||||
unspawnNotes.push(swagNote);
|
||||
if (susLength > 0.75) susLength++;
|
||||
|
||||
for (susNote in 0...Math.floor(susLength))
|
||||
{
|
||||
oldNote = unspawnNotes[Std.int(unspawnNotes.length - 1)];
|
||||
|
||||
var sustainNote:Note = new Note(daStrumTime + (Conductor.stepCrochet * susNote) + Conductor.stepCrochet, daNoteData, oldNote, true);
|
||||
var sustainNote:Note = new Note(daStrumTime + (Conductor.stepCrochet * susNote), daNoteData, oldNote, true);
|
||||
sustainNote.scrollFactor.set();
|
||||
unspawnNotes.push(sustainNote);
|
||||
|
||||
@@ -929,6 +930,12 @@ class PlayState extends MusicBeatState
|
||||
notes.forEachAlive(function(daNote:Note)
|
||||
{
|
||||
if (!daNote.mustPress && !daNote.wasGoodHit && daNote.strumTime <= Conductor.songPosition) goodNoteHit(daNote);
|
||||
// TODO: FIXED STEP CROCHET PER NOTES FOR BPM CHANGES
|
||||
if (daNote.wasGoodHit && daNote.isSustainNote && daNote.strumTime + (Conductor.stepCrochet) < Conductor.songPosition) {
|
||||
deleteNote(daNote);
|
||||
return;
|
||||
}
|
||||
|
||||
var strum:Strum = null;
|
||||
for(e in (daNote.mustPress ? playerStrums : cpuStrums).members) {
|
||||
if (e.ID == daNote.noteData % 4) {
|
||||
@@ -939,6 +946,7 @@ class PlayState extends MusicBeatState
|
||||
if (strum == null) return;
|
||||
|
||||
strum.updateNotePosition(daNote);
|
||||
strum.updateClipRect(daNote);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1196,7 +1204,7 @@ class PlayState extends MusicBeatState
|
||||
var funcsToExec:Array<Note->Void> = [];
|
||||
if (pressed.contains(true)) {
|
||||
funcsToExec.push(function(note:Note) {
|
||||
if (pressed[note.strumID] && note.isSustainNote && note.mustPress && !note.wasGoodHit) {
|
||||
if (pressed[note.strumID] && note.isSustainNote && note.canBeHit && note.mustPress && !note.wasGoodHit) {
|
||||
goodNoteHit(note);
|
||||
}
|
||||
});
|
||||
@@ -1265,35 +1273,6 @@ class PlayState extends MusicBeatState
|
||||
}
|
||||
}
|
||||
|
||||
function badNoteCheck()
|
||||
{
|
||||
// just double pasting this shit cuz fuk u
|
||||
// REDO THIS SYSTEM!
|
||||
var upP = controls.UP_P;
|
||||
var rightP = controls.RIGHT_P;
|
||||
var downP = controls.DOWN_P;
|
||||
var leftP = controls.LEFT_P;
|
||||
|
||||
if (leftP)
|
||||
noteMiss(0);
|
||||
if (downP)
|
||||
noteMiss(1);
|
||||
if (upP)
|
||||
noteMiss(2);
|
||||
if (rightP)
|
||||
noteMiss(3);
|
||||
}
|
||||
|
||||
function noteCheck(keyP:Bool, note:Note):Void
|
||||
{
|
||||
if (keyP)
|
||||
goodNoteHit(note);
|
||||
else
|
||||
{
|
||||
badNoteCheck();
|
||||
}
|
||||
}
|
||||
|
||||
function goodNoteHit(note:Note):Void
|
||||
{
|
||||
if (!note.wasGoodHit)
|
||||
@@ -1369,11 +1348,6 @@ class PlayState extends MusicBeatState
|
||||
{
|
||||
resyncVocals();
|
||||
}
|
||||
|
||||
if (dad.curCharacter == 'spooky' && curStep % 4 == 2)
|
||||
{
|
||||
// dad.dance();
|
||||
}
|
||||
}
|
||||
|
||||
var lightningStrikeBeat:Int = 0;
|
||||
@@ -1390,15 +1364,8 @@ class PlayState extends MusicBeatState
|
||||
Conductor.changeBPM(SONG.notes[Math.floor(curStep / 16)].bpm);
|
||||
FlxG.log.add('CHANGED BPM!');
|
||||
}
|
||||
// else
|
||||
// Conductor.changeBPM(SONG.bpm);
|
||||
|
||||
// Dad doesnt interupt his own notes
|
||||
if (SONG.notes[Math.floor(curStep / 16)].mustHitSection)
|
||||
dad.dance();
|
||||
}
|
||||
// FlxG.log.add('change bpm' + SONG.notes[Std.int(curStep / 16)].changeBPM);
|
||||
|
||||
|
||||
// HARDCODING FOR MILF ZOOMS!
|
||||
if (curSong.toLowerCase() == 'milf' && curBeat >= 168 && curBeat < 200 && camZooming && FlxG.camera.zoom < 1.35)
|
||||
{
|
||||
@@ -1418,10 +1385,10 @@ class PlayState extends MusicBeatState
|
||||
iconP1.updateHitbox();
|
||||
iconP2.updateHitbox();
|
||||
|
||||
if (curBeat % gfSpeed == 0)
|
||||
{
|
||||
gf.dance();
|
||||
}
|
||||
// if (curBeat % gfSpeed == 0)
|
||||
// {
|
||||
// gf.dance();
|
||||
// }
|
||||
}
|
||||
|
||||
var curLight:Int = 0;
|
||||
|
||||
@@ -2,23 +2,40 @@ package funkin.game;
|
||||
|
||||
import flixel.FlxSprite;
|
||||
import flixel.math.FlxMath;
|
||||
import flixel.math.FlxPoint;
|
||||
|
||||
class Strum extends FlxSprite {
|
||||
public var cpu = false;
|
||||
public var lastHit:Float = -5000;
|
||||
|
||||
public var scrollSpeed:Null<Float> = null; // custom scroll speed per strum
|
||||
|
||||
public function getScrollSpeed() {
|
||||
if (scrollSpeed != null) return scrollSpeed;
|
||||
if (PlayState.SONG != null) return PlayState.SONG.speed;
|
||||
return 1;
|
||||
}
|
||||
|
||||
public override function update(elapsed:Float) {
|
||||
super.update(elapsed);
|
||||
if (cpu) {
|
||||
if (lastHit + (Conductor.crochet) < Conductor.songPosition && getAnim() == "confirm") {
|
||||
if (lastHit + (Conductor.crochet / 2) < Conductor.songPosition && getAnim() == "confirm") {
|
||||
playAnim("static");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function updateNotePosition(daNote:Note) {
|
||||
daNote.y = (y - (Conductor.songPosition - daNote.strumTime) * (0.45 * FlxMath.roundDecimal(PlayState.SONG.speed, 2)));
|
||||
daNote.x = x;
|
||||
var offset = FlxPoint.get(daNote.isSustainNote ? ((Note.swagWidth - daNote.width) / 2) : 0, (Conductor.songPosition - daNote.strumTime) * (0.45 * FlxMath.roundDecimal(PlayState.SONG.speed, 2)));
|
||||
if (daNote.isSustainNote) offset.y -= Note.swagWidth / 2;
|
||||
// TODO: angle stuff
|
||||
daNote.x = x + offset.x;
|
||||
daNote.y = y - offset.y;
|
||||
}
|
||||
|
||||
public function updateClipRect(daNote:Note) {
|
||||
if (!daNote.isSustainNote) return;
|
||||
daNote.updateClipRect(this);
|
||||
}
|
||||
|
||||
public function updatePlayerInput(pressed:Bool, justPressed:Bool, justReleased:Bool) {
|
||||
@@ -42,13 +59,13 @@ class Strum extends FlxSprite {
|
||||
public function press(time:Float) {
|
||||
lastHit = time;
|
||||
playAnim("confirm");
|
||||
centerOffsets();
|
||||
centerOrigin();
|
||||
}
|
||||
|
||||
public function playAnim(anim:String, force:Bool = true) {
|
||||
var oldAnim = animation.curAnim;
|
||||
animation.play(anim, force);
|
||||
centerOffsets();
|
||||
centerOrigin();
|
||||
}
|
||||
public function getAnim() {
|
||||
return animation.curAnim == null ? null : animation.curAnim.name;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package;
|
||||
package funkin.menus;
|
||||
|
||||
#if desktop
|
||||
import Discord.DiscordClient;
|
||||
@@ -0,0 +1,6 @@
|
||||
package funkin.system;
|
||||
|
||||
interface IBeatReceiver {
|
||||
public function beatHit(curBeat:Int):Void;
|
||||
public function stepHit(curStep:Int):Void;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package;
|
||||
package funkin.system;
|
||||
|
||||
import Conductor.BPMChangeEvent;
|
||||
import flixel.FlxG;
|
||||
@@ -66,12 +66,14 @@ class MusicBeatState extends FlxUIState
|
||||
|
||||
public function stepHit():Void
|
||||
{
|
||||
for(e in members) if (e is IBeatReceiver) cast(e, IBeatReceiver).stepHit(curStep);
|
||||
|
||||
if (curStep % 4 == 0)
|
||||
beatHit();
|
||||
}
|
||||
|
||||
public function beatHit():Void
|
||||
{
|
||||
//do literally nothing dumbass
|
||||
for(e in members) if (e is IBeatReceiver) cast(e, IBeatReceiver).beatHit(curBeat);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package;
|
||||
package funkin.system;
|
||||
|
||||
import Conductor.BPMChangeEvent;
|
||||
import flixel.FlxG;
|
||||
@@ -1,4 +1,6 @@
|
||||
#if !macro
|
||||
import Paths;
|
||||
import funkin.game.PlayState;
|
||||
import funkin.system.MusicBeatState;
|
||||
import funkin.system.MusicBeatSubstate;
|
||||
#end
|
||||
Reference in New Issue
Block a user