events but cooler
This commit is contained in:
@@ -52,6 +52,13 @@ class Character extends FlxSprite implements IBeatReceiver implements IOffsetCom
|
||||
midpoint.x + (isPlayer ? -100 : 150) + globalOffset.x + cameraOffset.x,
|
||||
midpoint.y - 100 + globalOffset.y + cameraOffset.y);
|
||||
}
|
||||
|
||||
public function playSingAnim(direction:Int, suffix:String = "") {
|
||||
// TODO: Script Events
|
||||
var anims = ["singLEFT", "singDOWN", "singUP", "singRIGHT"];
|
||||
playAnim('${anims[direction]}$suffix', true);
|
||||
}
|
||||
|
||||
public function new(x:Float, y:Float, ?character:String = "bf", ?isPlayer:Bool = false)
|
||||
{
|
||||
super(x, y);
|
||||
|
||||
@@ -60,7 +60,7 @@ class Note extends FlxSprite
|
||||
|
||||
this.noteData = noteData;
|
||||
|
||||
var daStage:String = PlayState.instance.curStage;
|
||||
var daStage:String = PlayState.instance == null ? "stage" : PlayState.instance.curStage;
|
||||
|
||||
switch (daStage)
|
||||
{
|
||||
@@ -154,7 +154,7 @@ class Note extends FlxSprite
|
||||
|
||||
x -= width / 2;
|
||||
|
||||
if (PlayState.instance.curStage.startsWith('school'))
|
||||
if (daStage.startsWith('school'))
|
||||
x += 30;
|
||||
|
||||
if (prevNote.isSustainNote)
|
||||
|
||||
@@ -209,7 +209,7 @@ class PlayState extends MusicBeatState
|
||||
// ADD YOUR HARDCODED SCRIPTS HERE!
|
||||
default:
|
||||
trace('charts/${SONG.song}/');
|
||||
var content = Paths.getFolderContent('charts/${SONG.song}/', false, true, false);
|
||||
var content = Paths.getFolderContent('charts/${SONG.song}/', false, true, !fromMods);
|
||||
|
||||
trace(content);
|
||||
for(file in content) {
|
||||
@@ -1351,72 +1351,38 @@ class PlayState extends MusicBeatState
|
||||
{
|
||||
if (!note.wasGoodHit)
|
||||
{
|
||||
camZooming = true;
|
||||
if (note.mustPress) {
|
||||
// TODO: See TODO above
|
||||
var event = scripts.event("onPlayerHit", new NoteHitEvent(note, boyfriend, true, note.noteType, note.strumID));
|
||||
if (!event.cancelled) {
|
||||
if (!note.isSustainNote)
|
||||
{
|
||||
combo++;
|
||||
popUpScore(note.strumTime);
|
||||
}
|
||||
|
||||
if (note.noteData >= 0)
|
||||
health += 0.023;
|
||||
else
|
||||
health += 0.004;
|
||||
|
||||
if (!event.animCancelled) {
|
||||
switch (event.direction)
|
||||
{
|
||||
case 0:
|
||||
boyfriend.playAnim('singLEFT', true);
|
||||
case 1:
|
||||
boyfriend.playAnim('singDOWN', true);
|
||||
case 2:
|
||||
boyfriend.playAnim('singUP', true);
|
||||
case 3:
|
||||
boyfriend.playAnim('singRIGHT', true);
|
||||
}
|
||||
}
|
||||
|
||||
playerStrums.forEach(function(str:Strum) {
|
||||
if (str.ID == Math.abs(note.noteData % 4)) {
|
||||
str.press(note.strumTime);
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// TODO: See TODO above the todo above
|
||||
var event = scripts.event("onDadHit", new NoteHitEvent(note, dad, false, note.noteType, note.strumID));
|
||||
if (!event.cancelled) {
|
||||
if (!event.animCancelled) {
|
||||
switch (event.direction)
|
||||
{
|
||||
case 0:
|
||||
dad.playAnim('singLEFT', true);
|
||||
case 1:
|
||||
dad.playAnim('singDOWN', true);
|
||||
case 2:
|
||||
dad.playAnim('singUP', true);
|
||||
case 3:
|
||||
dad.playAnim('singRIGHT', true);
|
||||
}
|
||||
}
|
||||
note.wasGoodHit = true;
|
||||
|
||||
cpuStrums.forEach(function(str:Strum) {
|
||||
if (str.ID == Math.abs(note.noteData % 4)) {
|
||||
str.press(note.strumTime);
|
||||
}
|
||||
});
|
||||
var event:NoteHitEvent;
|
||||
if (note.mustPress)
|
||||
event = scripts.event("onPlayerHit", new NoteHitEvent(note, boyfriend, true, note.noteType, note.strumID, note.noteData > 0 ? 0.023 : 0.004));
|
||||
else
|
||||
event = scripts.event("onDadHit", new NoteHitEvent(note, dad, false, note.noteType, note.strumID, 0));
|
||||
|
||||
if (!event.cancelled) {
|
||||
if (event.player && !note.isSustainNote)
|
||||
{
|
||||
combo++;
|
||||
popUpScore(note.strumTime);
|
||||
}
|
||||
|
||||
health += event.healthGain;
|
||||
|
||||
if (!event.animCancelled) {
|
||||
event.character.playSingAnim(event.direction);
|
||||
}
|
||||
|
||||
(event.player ? playerStrums : cpuStrums).forEach(function(str:Strum) {
|
||||
if (str.ID == Math.abs(note.strumID)) {
|
||||
str.press(note.strumTime);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
note.wasGoodHit = true;
|
||||
vocals.volume = 1;
|
||||
if (event.unmuteVocals) vocals.volume = 1;
|
||||
if (event.enableCamZooming) camZooming = true;
|
||||
|
||||
if (!note.isSustainNote) deleteNote(note);
|
||||
if (event.deleteNote && !note.isSustainNote) deleteNote(note);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1482,4 +1448,4 @@ class PlayState extends MusicBeatState
|
||||
}
|
||||
|
||||
public var curLight:Int = 0;
|
||||
}
|
||||
}
|
||||
@@ -30,9 +30,16 @@ class CancellableEvent {
|
||||
*/
|
||||
public function new() {}
|
||||
|
||||
/**
|
||||
* Returns a string representation of the event, in this format:
|
||||
* `[CancellableEvent]`
|
||||
* `[CancellableEvent (Cancelled)]`
|
||||
* @return String
|
||||
*/
|
||||
public function toString():String {
|
||||
var rep = '[CancellableEvent ${cancelled ? "(Cancelled)" : ""} - ]';
|
||||
// TODO: List all fields
|
||||
var fields = Reflect.fields(this);
|
||||
var claName = Type.getClassName(Type.getClass(this)).split(".");
|
||||
var rep = '[${claName[claName.length-1]}${cancelled ? " (Cancelled)" : ""}]';
|
||||
return rep;
|
||||
}
|
||||
}
|
||||
@@ -5,28 +5,47 @@ import funkin.game.Character;
|
||||
|
||||
class NoteHitEvent extends CancellableEvent {
|
||||
@:dox(hide) public var animCancelled:Bool = false;
|
||||
|
||||
public var note:Note;
|
||||
public var character:Character;
|
||||
public var player:Bool;
|
||||
public var noteType:String;
|
||||
public var direction:Int;
|
||||
@:dox(hide) public var deleteNote:Bool = true;
|
||||
@:dox(hide) public var unmuteVocals:Bool = true;
|
||||
@:dox(hide) public var enableCamZooming:Bool = true;
|
||||
|
||||
/**
|
||||
* Creates a new NoteHitEvent with the following values:
|
||||
* @param note
|
||||
* @param character
|
||||
* @param player
|
||||
* @param noteType
|
||||
* Note that has been pressed
|
||||
*/
|
||||
public function new(note:Note, character:Character, player:Bool, noteType:String, direction:Int) {
|
||||
public var note:Note;
|
||||
/**
|
||||
* Character that pressed the note
|
||||
*/
|
||||
public var character:Character;
|
||||
/**
|
||||
* Whenever the Character is the player
|
||||
*/
|
||||
public var player:Bool;
|
||||
/**
|
||||
* Note Type name (null if default note)
|
||||
*/
|
||||
public var noteType:String;
|
||||
/**
|
||||
* Direction of the press (0 = Left, 1 = Down, 2 = Up, 3 = Right)
|
||||
*/
|
||||
public var direction:Int;
|
||||
/**
|
||||
* The amount of health that'll be gained from pressing that note.
|
||||
*/
|
||||
public var healthGain:Float;
|
||||
|
||||
/**
|
||||
* Creates a new NoteHitEvent.
|
||||
*/
|
||||
public function new(note:Note, character:Character, player:Bool, noteType:String, direction:Int, healthGain:Float) {
|
||||
super();
|
||||
|
||||
this.note = note;
|
||||
this.character = character;
|
||||
this.player = player;
|
||||
this.noteType = noteType;
|
||||
this.direction = direction;
|
||||
this.direction = cast direction;
|
||||
this.healthGain = healthGain;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -38,4 +57,31 @@ class NoteHitEvent extends CancellableEvent {
|
||||
|
||||
@:dox(hide)
|
||||
public function cancelAnim() {preventAnim();}
|
||||
|
||||
/**
|
||||
* Prevents the note from being deleted.
|
||||
*/
|
||||
public function preventDeletion() {
|
||||
deleteNote = false;
|
||||
}
|
||||
@:dox(hide)
|
||||
public function cancelDeletion() {preventDeletion();}
|
||||
|
||||
/**
|
||||
* Prevents the vocals volume from being set to 1 after pressing the note.
|
||||
*/
|
||||
public function preventVocalsUnmute() {
|
||||
unmuteVocals = false;
|
||||
}
|
||||
@:dox(hide)
|
||||
public function cancelVocalsUnmute() {preventVocalsUnmute();}
|
||||
|
||||
/**
|
||||
* Prevents the camera zoom every 4 beats from enabling.
|
||||
*/
|
||||
public function preventCamZooming() {
|
||||
enableCamZooming = false;
|
||||
}
|
||||
@:dox(hide)
|
||||
public function cancelCamZooming() {preventCamZooming();}
|
||||
}
|
||||
Reference in New Issue
Block a user