DOPE SHIT ALL DAY LETS GOOOOO

This commit is contained in:
Cameron Taylor 2020-10-03 23:42:58 -07:00
parent 97921c7a9b
commit 13e3c92db9
5 changed files with 243 additions and 22 deletions

83
source/ChartParser.hx Normal file
View file

@ -0,0 +1,83 @@
package;
import flixel.util.FlxStringUtil;
using StringTools;
class ChartParser
{
static public function parse(songName:String, section:Int):Array<Dynamic>
{
var IMG_WIDTH:Int = 8;
var regex:EReg = new EReg("[ \t]*((\r\n)|\r|\n)[ \t]*", "g");
var csvData = FlxStringUtil.imageToCSV('assets/data/' + songName + '/section' + section + '.png');
var lines:Array<String> = regex.split(csvData);
var rows:Array<String> = lines.filter(function(line) return line != "");
csvData.replace("\n", ',');
var heightInTiles = rows.length;
var widthInTiles = 0;
var row:Int = 0;
// LMAOOOO STOLE ALL THIS FROM FLXBASETILEMAP LOLOL
var dopeArray:Array<Int> = [];
while (row < heightInTiles)
{
var rowString = rows[row];
if (rowString.endsWith(","))
rowString = rowString.substr(0, rowString.length - 1);
var columns = rowString.split(",");
if (columns.length == 0)
{
heightInTiles--;
continue;
}
if (widthInTiles == 0)
{
widthInTiles = columns.length;
}
var column = 0;
var pushedInColumn:Bool = false;
while (column < widthInTiles)
{
// the current tile to be added:
var columnString = columns[column];
var curTile = Std.parseInt(columnString);
if (curTile == null)
throw 'String in row $row, column $column is not a valid integer: "$columnString"';
if (curTile == 1)
{
if (column < 4)
dopeArray.push(column + 1);
else
{
var tempCol = (column + 1) * -1;
tempCol += 4;
dopeArray.push(tempCol);
}
pushedInColumn = true;
}
column++;
}
if (!pushedInColumn)
dopeArray.push(0);
row++;
}
trace(dopeArray.length);
trace(dopeArray);
return dopeArray;
}
}

14
source/Charting.hx Normal file
View file

@ -0,0 +1,14 @@
package;
import flixel.FlxG;
import flixel.FlxState;
class Charting extends FlxState
{
override function create()
{
FlxG.sound.music.stop();
super.create();
}
}

View file

@ -1,6 +1,7 @@
package;
import flixel.FlxGame;
import openfl.display.FPS;
import openfl.display.Sprite;
class Main extends Sprite
@ -9,5 +10,9 @@ class Main extends Sprite
{
super();
addChild(new FlxGame(0, 0, PlayState));
#if !mobile
addChild(new FPS(10, 3, 0xFFFFFF));
#end
}
}

View file

@ -1,6 +1,7 @@
package;
import flixel.FlxSprite;
import flixel.graphics.frames.FlxAtlasFrames;
import flixel.util.FlxColor;
class Note extends FlxSprite
@ -25,7 +26,9 @@ class Note extends FlxSprite
this.noteData = noteData;
makeGraphic(50, 50);
var tex = FlxAtlasFrames.fromSparrow(AssetPaths.NOTE_assets__png, AssetPaths.NOTE_assets__xml);
frames = tex;
var swagWidth:Float = 55;
switch (Math.abs(noteData))
@ -69,9 +72,19 @@ class Note extends FlxSprite
tooLate = true;
}
else
{
canBeHit = false;
if (tooLate && alpha > 0.3)
alpha *= 0.3;
if (strumTime <= Conductor.songPosition)
{
wasGoodHit = true;
}
}
if (tooLate)
{
if (alpha > 0.3)
alpha = 0.3;
}
}
}

View file

@ -1,24 +1,33 @@
package;
import flixel.FlxG;
import flixel.FlxObject;
import flixel.FlxSprite;
import flixel.FlxState;
import flixel.graphics.frames.FlxAtlasFrames;
import flixel.group.FlxGroup.FlxTypedGroup;
import flixel.system.FlxSound;
import flixel.text.FlxText;
import flixel.tweens.FlxTween;
import flixel.util.FlxCollision;
import flixel.util.FlxColor;
import flixel.util.FlxStringUtil;
import flixel.util.FlxTimer;
import haxe.Json;
import lime.utils.Assets;
using StringTools;
class PlayState extends FlxState
{
private var lastBeat:Float = 0;
private var lastStep:Float = 0;
private var vocals:FlxSound;
private var canHit:Bool = false;
private var totalBeats:Int = 0;
private var totalSteps:Int = 0;
private var canHitText:FlxText;
@ -32,21 +41,48 @@ class PlayState extends FlxState
private var sectionScores:Array<Dynamic> = [[], []];
private var camFollow:FlxObject;
override public function create()
{
dad = new FlxSprite(100, 100).loadGraphic(AssetPaths.DADDY_DEAREST__png);
var dadTex = FlxAtlasFrames.fromSparrow(AssetPaths.DADDY_DEAREST__png, AssetPaths.DADDY_DEAREST__xml);
dad.frames = dadTex;
dad.animation.addByPrefix('idle', 'Dad idle dance', 24);
dad.animation.addByPrefix('singUP', 'Dad Sing note UP', 24);
dad.animation.addByPrefix('singRIGHT', 'Dad Sing note UP', 24);
dad.animation.addByPrefix('singDOWN', 'Dad Sing Note DOWN', 24);
dad.animation.addByPrefix('singLEFT', 'dad sing note right', 24);
dad.animation.play('idle');
add(dad);
boyfriend = new FlxSprite(470, 100).loadGraphic(AssetPaths.BOYFRIEND__png);
boyfriend = new FlxSprite(770, 450);
var tex = FlxAtlasFrames.fromSparrow(AssetPaths.BOYFRIEND__png, AssetPaths.BOYFRIEND__xml);
boyfriend.frames = tex;
boyfriend.animation.addByPrefix('idle', 'BF idle dance', 24, false);
boyfriend.animation.addByPrefix('singUP', 'BF NOTE UP', 24, false);
boyfriend.animation.addByPrefix('singLEFT', 'BF NOTE LEFT', 24, false);
boyfriend.animation.addByPrefix('singRIGHT', 'BF NOTE RIGHT', 24, false);
boyfriend.animation.addByPrefix('singDOWN', 'BF NOTE DOWN', 24, false);
boyfriend.animation.addByPrefix('hey', 'BF HEY', 24, false);
boyfriend.animation.play('idle');
add(boyfriend);
generateSong('assets/data/bopeebo.json');
generateSong('assets/data/bopeebo/bopeebo.json');
canHitText = new FlxText(10, 10, 0, "weed");
strumLine = new FlxSprite(0, 50).makeGraphic(FlxG.width, 10);
strumLine.scrollFactor.set();
add(strumLine);
camFollow = new FlxObject(0, 0, 1, 1);
add(camFollow);
FlxG.camera.follow(camFollow, LOCKON, 0.04);
// FlxG.camera.setScrollBounds(0, FlxG.width, 0, FlxG.height);
FlxG.camera.zoom = 1.05;
FlxG.worldBounds.set(0, 0, FlxG.width, FlxG.height);
super.create();
@ -56,13 +92,25 @@ class PlayState extends FlxState
private function generateSong(dataPath:String):Void
{
// FlxG.log.add(ChartParser.parse());
var songData = Json.parse(Assets.getText(dataPath));
FlxG.sound.playMusic("assets/music/" + songData.song + ".mp3");
FlxG.sound.playMusic("assets/music/" + songData.song + "_Inst.mp3");
vocals = new FlxSound().loadEmbedded("assets/music/" + songData.song + "_Voices.mp3");
FlxG.sound.list.add(vocals);
vocals.play();
notes = new FlxTypedGroup<Note>();
add(notes);
var noteData:Array<Dynamic> = songData.data;
var noteData:Array<Dynamic> = [];
for (i in 1...songData.sections + 1)
{
trace(i);
noteData.push(ChartParser.parse(songData.song.toLowerCase(), i));
}
var playerCounter:Int = 0;
@ -86,6 +134,7 @@ class PlayState extends FlxState
+ ((Conductor.crochet * 4) * playerCounter));
var swagNote:Note = new Note(daStrumTime, songNotes);
swagNote.scrollFactor.set(0, 0);
swagNote.x += ((FlxG.width / 2) * playerCounter); // general offset
@ -116,14 +165,15 @@ class PlayState extends FlxState
}
}
var bouncingSprite:FlxSprite;
var sectionScored:Bool = false;
override public function update(elapsed:Float)
{
super.update(elapsed);
if (FlxG.keys.justPressed.NINE)
FlxG.switchState(new Charting());
Conductor.songPosition = FlxG.sound.music.time;
var playerTurn:Int = totalBeats % 8;
@ -133,29 +183,65 @@ class PlayState extends FlxState
sectionScored = true;
}
if (playerTurn == 0)
{
camFollow.setPosition(dad.getGraphicMidpoint().x + 150, dad.getGraphicMidpoint().y - 100);
vocals.volume = 1;
}
if (playerTurn == 4)
{
camFollow.setPosition(boyfriend.getGraphicMidpoint().x - 100, boyfriend.getGraphicMidpoint().y - 100);
}
if (playerTurn < 4)
{
bouncingSprite = dad;
sectionScored = false;
}
else
bouncingSprite = boyfriend;
if (bouncingSprite.scale.x < 1)
{
bouncingSprite.setGraphicSize(Std.int(bouncingSprite.width + (FlxG.elapsed * 2)));
}
canHitText.visible = canHit;
canHitText.text = 'WWEED' + debugNum;
FlxG.watch.addQuick("beatShit", playerTurn);
everyBeat();
everyStep();
notes.forEach(function(daNote:Note)
notes.forEachAlive(function(daNote:Note)
{
if (daNote.y > FlxG.height)
{
daNote.active = false;
daNote.visible = false;
}
else
{
daNote.visible = true;
daNote.active = true;
}
if (daNote.y < -daNote.height)
{
if (daNote.tooLate)
vocals.volume = 0;
daNote.kill();
}
if (!daNote.mustPress && daNote.wasGoodHit)
{
switch (Math.abs(daNote.noteData))
{
case 1:
dad.animation.play('singUP');
case 2:
dad.animation.play('singRIGHT');
case 3:
dad.animation.play('singDOWN');
case 4:
dad.animation.play('singLEFT');
}
daNote.kill();
}
daNote.y = (strumLine.y + 5 - (daNote.height / 2)) - ((Conductor.songPosition - daNote.strumTime) * 0.4);
});
@ -164,6 +250,9 @@ class PlayState extends FlxState
private function popUpScore():Void
{
boyfriend.animation.play('hey');
vocals.volume = 1;
var placement:String = sectionScores[1][curSection] + '/' + sectionScores[0][curSection];
var coolText:FlxText = new FlxText(0, 0, 0, placement, 32);
coolText.screenCenter();
@ -242,8 +331,21 @@ class PlayState extends FlxState
{
if (!note.wasGoodHit)
{
switch (Math.abs(note.noteData))
{
case 1:
boyfriend.animation.play('singUP');
case 2:
boyfriend.animation.play('singRIGHT');
case 3:
boyfriend.animation.play('singDOWN');
case 4:
boyfriend.animation.play('singLEFT');
}
sectionScores[1][curSection] += note.noteScore;
note.wasGoodHit = true;
vocals.volume = 1;
}
}
@ -259,7 +361,10 @@ class PlayState extends FlxState
totalBeats += 1;
bouncingSprite.setGraphicSize(Std.int(bouncingSprite.width * 0.9));
dad.animation.play('idle');
if (!boyfriend.animation.curAnim.name.startsWith("sing"))
boyfriend.animation.play('idle');
}
}
}
@ -273,6 +378,7 @@ class PlayState extends FlxState
if (Conductor.songPosition > lastStep + Conductor.stepCrochet)
{
totalSteps += 1;
lastStep += Conductor.stepCrochet;
canHitText.text += "\nWEED\nWEED";
}